@aztec/accounts 0.55.0 → 0.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"transpiled":true,"noir_version":"0.33.0+cb20e078dd909656110d133339b2b425e6c3ebb0","name":"EcdsaKAccount","functions":[{"name":"constructor","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(initializer)"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"H4sIAAAAAAAA/+1dB3xURRM/0ggQqkpRwdAEpL29u+QuoAjSi/Tek1yO3puAhWJBBESwK3ZU7L1i7wULFhAbdlFRVOyK3zzYJ8MxSa7Mxjef936/f24ye2/vvzu7s2X23pXz7Lserubx1M3aJ5cDpOrXFEB2hM55xXIaocsg7s0idFUIXTVCV4PQ1QK0j9AdRbwvm9DVJ3QNCN3RhK4JIDNC15TQNSN0xxC65oSuBaFrSehaEbrWhM4idIrQeQmdj9D5CV0OocsldAFCFyR0eYSuDaFrS+iOJXTHEbp2hO54Qtee0HUgdCcQuo6ErhOh60zouhC6roSuG6HrTuh6ELqehK4XoTuR0PUmdH0IXV9C14/Q9Sd0AwjdQEI3iNANJnRDCN1QQjeM0A0ndCMI3UhCN4rQjSZ0YwjdWEKXT+gKCF0hoQsRuiJCF9Y6fJXTr+31q8/K9fuLAt4i5VP5ljevIJhj+XMKcoMqqHKCOSFv0OcrCvqDgbyCvICVp/y+IhXOyfOFrX3XzpT9eVkJXd5Ckzy/jZunUpEam5s9fqUhrnY97NGyPcY4clMkf6vf49z3Hfy/C/A94IeU/XrnSo2oAyuxSzVjzOu7FD7b/MjWhizLZP0dw5jXLsb62y2k/poz5vU9Y/39xFh/lG/4EfmG3Uj+Cck/RPiGn+H/XwC/An4rA9/QgjGvnxlt87uQtt2SMa9fGOvvDyH114oxr18Z6+9Pw77hd+QD/kDyn0j+LcI3/GX/D/g7ZZ8hTPuG1ox5/cVom3KpMtq2xZjXHsb6SxFSf4oxr78Z6y811axvsNu34wNSkJyKZE/qgb4hDf5PB2QAypeBb/Ay5pWWymebTCFt28eYVzpj/VUQUn9+xrwyGOuvomHfkIl8QAUkV0Ry+QjfUAn+zwJUBlQpA9+Qw5hXJUbbVBXStnMZ88pirL9qhtt2VdSGqyG5MpKrRLTt6vB/DcAhgENT98e1Stqns2MZjhz0FL9PdxjkVxNQC1C7DPpNHmNehzHavY6QftOGMa+ajPV3uJD6a8uYVy3G+jvCsN+pg/zL4Ug+Asm1I/zOkfB/XUA9wFFl4BuOZczrSEbbZAtp28cx5lWXsf7qC6m/dox51WOsvwaGfUM28gH1kdwAyUdF+IaG8H8jQGPA0WXgG45nzKsho22aCGnb7RnzasRYf02F1F8HxrwaM9ZfM8O+oQnyAU2R3AzJR0f4hmPg/+aAFoCWZeAbTmDM6xhG27QS0rY7MubVnLH+Wgupv06MebVgrD/LsG9ohXxAayRbSG4Z4RsU/O8F+AD+MvANnRnzUoy2yRHStrsw5uVlrL9cw207B7XhXCT7kOyPaNsB+D8IyAO0iXKfzj4z68jdPMXv07WF/I4FHAdoVwb9pjtjXm0Z7X68kH7TgzGvYxnrr72Q+uvJmNdxjPXXwbDfOR75l/ZI7oDkdhF+5wT4vyOgE6BzGfiGXox5ncBomy5C2vaJjHl1ZKy/rkLqrzdjXp0Y66+bYd/QBfmArkjuhuTOEb6hO/zfA9AT0KsMfEMfxry6M9rmRCFtuy9jXj0Y66+3kPrrx5hXT8b662PYN5yIfEBvJPdBcq8I39AX/u8H6A8YUAa+oT9nP2G0zUAhbXsAZz9hrL9BQupvIGdbZqy/wYZ9w0DkAwYheTCSB0T4hiHw/1DAMMDwMvANgxjzGsJomxFC2vZgxryGMtbfSMNtewRqwyORPAzJwyPa9ij4fzRgDGBslPt09nezHXmop/h9unzIrwBQCAiVQb8ZxphXPqPdi4T0m+GMeRUw1l9YSP2NYMyrkLH+xhn2O0XIv4SRPA7JoQi/Mx7+nwCYCJhUBr5hJGNe4xltM1lI2x7FmNcExvqbIqT+RjPmNZGx/qYa9g2TkQ+YguSpSJ4U4Rumwf/TATMAM8vAN4xhzGsao21mCWnbYxnzms5Yf7OF1F8+Y14zGOtvjmHfMAv5gNlInoPkmRG+YS78Pw9wEmB+GfiGAsa85jLaZoGQtl3ImNc8xvpbKKT+Qox5ncRYfycb9g0LkA9YiOSTkTw/wjecAv+fCjgNsKgMfEMRY16nMNpmsZC2HWbM61TG+ltiuG0vRm14CZJPQ/KiiLa9FP4/HXAG4Mwo9+mqo/wCqcXv050FacsAZwOWl0G/GcVXv+osRrufI6TfLGWsv2WM9bfCcL85B7XhFUg+G8nLI/rNSvh/FeBcwOoS+s1KlMcqJJ+L5NUReZ8H/68BrAWcX0Le56E81iB5LZLPj8j7Avj/QsBFgItLyPsClMeFSL4IyRdH5H0J/H8p4DLA5SXkfQnK41IkX4bkyyPyXgf/XwG4EnAV4UtS9Gt7/WoldqmjPXzt92rGfmXXTaquIzvfbHhNR3UbeZVjrpdyHt6+6HB0ynANlOlawHWA9YDrU0spUKLGuYHNOHvXdMZ43hg/T3+kguqUN6DOdw2S1yP5xohOuQH+vwlwM+CWMhjgr2XsSBsYB6hbDQ9QtyIb3ITkm5F8S4RtboP/bwfcAbiTsA13+7wr/jrwRVMHuH1eh+TbkHxXRB3cDf/fA7gXcF8Z1MH9fO0gTNXB/ais1yP57hLq4AH4/0HAQ4CHoxg4E36oooevjz5gaOLMbfeNfDxDlN03Ivva9nLkdSXY/RH4/1HAY4DHy2DCtJ7Rnz7CaHd7YlHJUzaTI8bxycJ8n0g1SNjOnDvfJxkbg6lyP4lmlkz5Gl2d47wSrdNrGe3zlNDO+pShzvp0qkHCTxvorM+4vLPa5X7GUGflngk8qblyj65PprrT3naHtX/aK8Vz8MXdDg7zmHHUTO3qn595wXXxrG63zzl7Ns6rnfBBhO45vZ+DL+5RBFdinMb3auOrZxkb0nOGpvrcHZGzzM8TeRVYhaEcVZAbCqii/JxgYWGeTylvfm5+boE3GC4qyFHBnCDkWZjvDcLHefMLVZGVn1tUliPn84ZGzhdSDRJ+wcDI+aLLR0673C8KGTmf01y5OqyTL6eNXmJu+I7jt/Ot7znw4nZczzHWw8t89ZCD6+FlYgDkbmebmIMxFZCt7P83oT0ZG3t02iupZsv1Kl8cI2CS52uIp8rJLcovCAf9RT4Y7KyQ3yry+XyW1+sPe0PeoqDK9QfD4XAwrMKBokJVUJgL2Qd8hYUw4OXl5IUwT+7+8gpjf3mdr80VUvuDr6I29xqSXy9hf3Az/P8G4E3AW3p/MN2zf48x8uIem0xN+Lh5bmbkmYF4vq39wRb9ulW/vqNft+n5SlP9/nfh//cA79sLB8CHgO2AjwAfAz4BfAr4DPA54AvAl4AdgK8AXwO+AewEfAv4DrAL8D3gB8CPgN2AnwA/A34B/Ar4DfA74A/An4C/7HYE+Dt1X2MqB0hxIv2OI9+Wuj8yXVaz0i2GZqWpaQYJ25lz55uW5u5ZqV3uNBSOYMq3TDcPtxpqbOlpBgmnG2hsGS5vbHa5M4Q3tncMNbbyaQYJlzfQ2DJd3tjscmcaaGwmuNoeOCONf35fIU1mJ9tmqJNVTDNIuKKBTlbJ5Z3MLnclIZ3MdgYVDHSyrDTexhq5oNyCFo5bkbwttfjDgJVBqAKoCqiWZv4wIOOoqCoztvnqhm1j5+/YoAqSqyK5WtqBtqkBwiGAQwGHpR2YH2e7tPtlloH2XpOvTlXk5gZ3n3+bcSBxFv+1oPy1AXUAhwOOABwJqAuoBzgKkA2oD2gAaAhoBGgMOBrQBNAU0AxwDKA5oAWgJaAVoDXAAiiAF+AD+AE5gFxAABAE5AHaANoCjgUcB2iXtm/DCK//a6Xt3wB1dLUJXR1CdzihO4LQHUno6hK6eoTuKEKXTejqE7oGhK4hoWtE6BoTuqMJXRNC15TQNSN0xxC65oSuBaFrSehaEbrWhM4idIrQeQmdj9D5CV0OocsldAFCFyR0eYSuDaFrS+iOJXTHEbp2yB86l+N/2+tXK7HrAJ+TqK+txTAWFoX3XbUZx9VLs8xsGEfaIsEyh+rw1V/e4Xx5qSMYbXGZCFsUqSPZ6q9Q1WXLK6jqMdrichG2sNRRXPVXZKlsrrwKLVWf0RbrJNgiaKkGXPUHY09DpryKIK9GjLa4QoAtCqHMjZnqL2h/a5UpLyiyasJoiyvdb4siu8xNeeqv0M6rGU9eQTuvYxhtcZX7bWFnrZqz1F/R3rxasORVuDevloy2uNr1tgjuLXMrlvrbS1O15siraF9eFqMtrnG7LQr3lVlx1F9wX15ejrz2FVn5GG1xrcttEdJl9jOUuUDnlcOQV0Dnlctoi+vcbYt/vo0QSLzMyskrmHBewbCTVx6jLda72hbBAqfMbRKvP6fMqm3CeQX+yetYRltc72pb5PxT5uMSLrP6J692aXx7lng/L+GHuJSRLazELsW4b6YY933UOkZb3CjEFoz7A4pxfauuYrTFBiG2YFwHKcZ5vLqW0RY3CbEF43xPMc5X1PWMtrhZiC0YxzXF6JfVBkZb3GLIFtznjRj7r2Jsf8pU/aVE1J8b4sr//EI54zzUzoP7DJB93qpmGv85qPZpvLbmLrf9JaVaBsr9eJa7y723PRoo9xNl5BsT5dmBsT8y2lo94fJ2Y/eX4w20m6ddXu5ahvrLM0L6ywmM/YXR1spU/XHbuWOaDJ6d4ufpjVTY3CLPgtt+1znzfQKSOyK5U9qBZ8E7g9AF0BXQLa34s+BWYpeyv6xc20Aff96wb0uUn13mzgbK/YKQNWtnxnl+d0Y/ydhulBRbvMd4LrhHmpk+7KZ+QfnY7siX9ojSx/YEoRfgREBvgz7WfhhEHQO+5mWX+1i7zD0NlHuTkH7dk7Ev9mH0sYztRkmxxfuMPrZvmpk+7KZ+QfnYPsiX9o3Sx/YDoT9gAGCgQR9rP2zncAO+5jWX+1i7zP0MlPt1If26H2NfHMToYxnbjZJiiw8YfezgNDN92E39gvKxg5AvHRyljx0CwlDAMMBwgz7WfpjZEQZ8zZsu97F2mYcYKPdbQvr1EMa+OILRxzK2GyXFFh8y+tiRaWb6sJv6BeVjRyBfOjJKHzsKhNGAMYCxBn3s9tT9z0zA+SZap1td7mPtMo8yUO53hPTrUYx9MZ/RxzK2GyXFFtsZfWxBmpk+7KZ+QfnYfORLC6L0sYUghABFgLBBH2s/jLeuAV/znst9rF3mQgPlfl9Ivy5k7IvjGH0sY7tRUmzxEaOPHZ9mpg+7qV9QPnYc8qXjo/SxE0CYCJgEmGzQx9oPO69nwNdsd7mPtcs8wUC5PxLSrycw9sUpjD6Wsd0oKbb4mNHHTk0z04fd1C8oHzsF+dKpUfrYaSBMB8wAzDToY+0fkzjKgK/51OU+1i7zNAPl/kxIv57G2BdnMfpYxnajpNjiE0YfOzvNTB92U7+gfOws5EtnR+lj54AwFzAPcJJBH2v/WE+2AV/zpct9rF3mOQbKvUNIv57D2BfnM/pYxnajpNjiU0YfuyDNTB92U7+gfOx85EsXROljF4JwMuAUwKkGfaz9Y2j1Dfiab1zuY+0yLzRQ7p1C+vVCxr54GqOPZWw3SootPmP0sYvSzPRhN/ULyseehnzpoih97GIQlgCWAk436GPtH5tsYMDX7HK5j7XLvNhAub8X0q8XM/bFMxh9LGO7UVJs8Tmjjz0zzUwfdlO/oHzsGciXnhmljz0LhGWAswHLDfpY+8d8GxrwNbtd7mPtMp9loNw/CenXZzH2xXMYfSxju1FSbPEFo49dkWamD7upX1A+9hzkS1dE6WNXgrAKcC5gtUEfa/9YeiMDvuZXl/tYu8wrDZT7NyH9eiVjXzyP0ccythslxRZfMvrYNWlm+rCb+gXlY89DvnRNlD52LQjnAy4AXGjQx+5I3f8biDjfROv0T5f7WLvMaw2U+y8h/XotY1+8iNHHMrYbJcUWOxh97MVpZvqwm/oF5WMvQr704ih97CUgXAq4DHC5QR/7Ver+35TF+SZap57K7vaxdpkvMVDucpVl9OtLGPviOkYfy9hulBRbfMXoY69IM9OH3dQvKB+7DvnSK6L0sVeCcBXgasA1Bn3s16n7f6Mb55tonaa53MfaZb7SQLnThfTrKxn74rWMPpax3Sgptvia0cdel2amD7upX1A+9lrkS6+L0seuB+F6wA2AGw362G/Avk0N+JpMl/tYu8zrDZS7gpB+vZ6xL25g9LGM7UZJscU3jD72pjQzfdhN/YLysRuQL70pSh97Mwi3AG4F3GbQx+4E+zYz4GuyXO5j7TLfbKDclYX065sZ++LtjD6Wsd0oKbbYyehj70gz04fd1C8oH3s78qV3ROlj7wThLsDdgHsM+thvwb7HGPA11VzuY+0y32mg3NWF9Os7GfvivYw+lrHdKCm2+JbRx96XZqYPu6lfUD72XuRL74vSx94PwgOABwEPGfSx34F9mxvwNYe63MfaZb7fQLkPE9Kv72fsiw8z+ljGdqOk2OI7Rh+7Mc1MH3ZTv6B87MPIl26M0sc+AsKjgMcAjxv0sbvAvi0M+JraLvexdpkfMVDuOkL69SOMffEJRh/L2G6UFFvsYvSxT6aZ6cNu6heUj30C+dIno/SxT4HwNOAZwLMGfez3YN+WBnzNkS73sXaZnzJQ7rpC+vVTjH3xOUYfy9hulBRbfM/oY59PM9OH3dQvKB/7HPKlz0fpY18A4UXAS4CXDfrYH8C+rQz4mmyX+1i7zC8YKHd9If36Bca+uInRxzK2GyXFFj8w+thX0sz0YTf1C8rHbkK+9JUofeyrILwGeB2w2aCP/RHs29qAr2nkch9rl/lVA+VuLKRfv8rYF99g9LGM7UZJscWPjD72zTQzfdhN/YLysW8gX/pmlD72LRDeBmwBbDXoY3eDfS0Dvqapy32sXea3DJS7mZB+/RZjX3yH0ccythslxRa7GX3stjQzfdhN/YLyse8gX7otSh/7LgjvAd4HfGDQx/4E9lUGfE0Ll/tYu8zvGih3SyH9+l3Gvvgho49lbDdKii1+YvSx29PM9GE39QvKx36IfOn2KH3sRyB8DPgE8KlBH/sz2NdrwNdYLvexdpk/MlBuJaRff8TYFz9j9LGM7UZJscXPjD728zQzfdhN/YLysZ8hX/p5lD72CxC+BOwAfGXQx/4C9vUZ8DV+l/tYu8xfGCh3jpB+/QVjX/ya0ccythslxRa/MPrYb9LM9GE39QvKx36NfOk3UfrYnSB8C/gOsMugj/0V7Os34GuCLvexdpl3Gih3npTvbzL2xe8ZfSxju1FSbPEro4/9Ic1MH3ZTv6B87PfIl/4QpY/9EYTdgJ8APxv0sb+BfXMM+JpjXe5j7TL/aKDcx0mJZTP2xV8YfSxju1FSbPEbo4/9Nc1MH3ZTv6B87C/Il/4apY/9DYTfAX8A/jToY38H++Ya8DXtXe5j7TL/ZqDcHaT0a8a++Bejj2VsN0qKLX5n9LF70sz0YTf1C8rH/oV86Z4ofezftpAOaYCUdHM+9g+wb8CAr+nkch9rl/lvA+XuLKRf/83YF1PT+XgxthslxRZ/MPrYtHQzfdhN/YLysXYbdHxpWnp0PjYd3pcBKA/INOhj/wT7Bg34mm4u97F2me065s63u5B+nc7YFysw+ljGdqOk2OJPRh9bMd1MH3ZTv6B8bAXkVytG6WMrwfuyAJUBVQz62L/AvnkGfGwvl/tYu8yVDPjYE4X060qMfbEqo49lbDdKii3+YvSx1dLN9GE39QvKx1ZFfrValD62OryvBuAQwKEGfewesG8bAz62r8t9rF3m6gZ8bD8h/bo6Y188jNHHMrYbJcUWexh9bM10M33YTf2C8rGHIb9aM0ofWwveVxtQB3C4QR/7N9i3rQEfO9DlPtYucy0DPnaQkH5di7EvHsHoYxnbjZJii78ZfeyR6Wb6sJv6BeVjj0B+9cgofWxdeF89wFGAbIM+1s74WAM+dqjLfaxd5roGfOwwIf26LmNfrM/oYxnbjZJiCw9j/LFBupk+7KZ+QfnY+sivNojSxzaE9zUCNAYcbdDHloOMjzPgY0e63MfaZW5owMeOEtKvGzL2xSaMPpax3SgptijH6GObppvpw27qF5SPbYL8atMofWwzeN8xgOaAFgZ9bApk3M6Ajx3rch9rl7mZAR+bL6RfN2Psiy0ZfSxju1FSbJHC6GNbpZvpw27qF5SPbYn8aqsofWxreJ8FUAAv8rHOlcJs5+oevvpsnW6mbadGlDlRnptT+epvC+Oemo+x/iArTyXP/rEEX9zjNSdvzNefbpCwP50/3xxGR2eq3Dnp+yuYKd+9jS3Fs985mWxsjJ3XMslzS6qZTpGL2i3/t2AZZ017Ty9rjg7pdKQz3VA4DYAbdkB3oKBdJhMGyDXgmXKZh2ZT5U4xWO6EjyQarkMrsUvZDTPPwPKxDfPw7jgAO99FOl/uuggaqou2huqircG6sB2hiboIuf2rcIbaQNG/W+7CUvgZa/thQ1sXkcs7K7FLMbZLxWhrxVl/9hzE3hqgZtyeGOuztPaE8zQxZnHVCZ5UHlvSLNlK7FJ5hgYBTDpGzqq0z7E5H2vAKUx0yX5mLJO3hGOh6e50MBMrm2mXx6HJSbz2Ka3OOe3TDuWlfD7oG6GACofCvpxAnrdA5fpyc8P+cCA36A+Fc/z5oUCR8uf7vHlFASusgkVFgRxfYSA3nBcqzA1jp61CPp8/lFdQqHK8ufkFVjDky7fC/oDPa+WHfIFQyBfMzc33+UK5wXAwL+j15od9QSsnEMizcr2+PK8p+7TT9inL1fVmQ6vr4/Xqur0UB26K3/EGnHUHQwNXB4Orl722MlAXJxiqixMM1sVmQyu5yW7/Mqih/jDF5Ss5U21/qpCVHGO7VIy2VlOTK7nISx1vaCXXUeJKrqPhlVxHA05h5n9wJdcp3Z0OZqahlUInYSu5zowruamMKzlT9umMVnLFDQpu3oIzydPUANNF4gDTxfAA08XAADO7jAYYzjivi2JFBwwwifKaU0YrgER5dmUcoBnbn5pjaADoGsUAnfCjudL5BsIDtkddNEDPNmSfbv9HW63d9VZrD+ogk5XYpYo70MN5Qi3h55EzOhcThnfqkNupmqrDRPPq6XJ72B2mp4GJUS9Dk8ReBreiexiqixMN1cWJhrflTdTFSS7fljfVH+a7fFveVNtfIGRbnrFdKkZbqwXJbfnIa++YxVUneLLb2+SuSU9Dg0Bvg7smNufeBpzCqUK25XsyTgT7pLvTwZxqaFXZpwy25Tnt05dxW34B46rflH36/gurflNfX+qnV/39pThwU/z6GXDWAwwNXAMMrl7suuhvoC4GGqqLgYa/KmNiZr/I5Ss5U/1hsctXcqba/hIhKznGdqkYba2WJFdykZfqZ2glN0jiSm6Q4ZXcIANO4cz/4EpucLo7HcyZhlYKg4Wt5IYwruSWMK7kTNlnyL9wwKp7upl+L2WAGSpxgBlqeIAZamCAWSbkgBWnA5tvaAabKK+zhRywGsY4QDO2P3W2oQFgWBkcsBrOeMBqQWV3DtDLDNlnOGEf7lXvZsZn9r3DmNcIxrHMnuCU1fP/RhiaOIxMN0h4ZDp/vqMYBzZT5R6Vvr+CmfIt0+f/vSPk+X+cpzZxpxhd0mw64aeOM84GsFd3SP8/HJsdozvQWOrYLIcBRhvwTKMNB+S4yp1isNwJPy7a5UFNu2HmG1hWFhhaYhcYDOSNNVQXhYbqotDw8VQTdbHC5UFNU/1hpcuDmqba/iohQU3GdqkYba1WJYOakdfeMYurTvCkMmRyzznf0CAQMrjnbHMOGXAKa4QENfMZJ4JF6e50MGsM7ckVlUFQk9M+Ycag5irGPVNT9gn/C8dT3zG0uh6nV9fjpThwU/zGGXDWEwwNXBMMrl7suhhvoC4mGqqLiQbr4h1DK7nzXb6SM9UfLnD5Ss5U279QyEqOsV0qRlurC5MruchLjTO0kpskcSU3yfBKbpIBp3Dpf3AlNzndnQ7mUkMrhcnCVnJTGFdyFzKu5EzZZ8q/cDx1TLqZfi9lgJkqcYCZaniAmWpggLlcyPFUTge20tAMNlFe64QcT53GOEAztj+1ztAAMK0MjqdOZzyeuqqyOwfoyw3ZZ/r/0VbrDL3VOpM6yGQldqniDvRwnlBLNC/GQ1FGnjfn1CG3UzVVh4nmNcvl9rA7zCwDE6PZhiaJsw1uRc80VBdzDNXFHMPb8ibq4iqXb8ub6g9Xu3xb3lTbv0bItjxju1SMtlbXJLflI6+9YxZXneDJ7lyTuyazDA0Ccw3umtic5xpwCtcL2ZafxTgRnJfuTgdzvaFV5bwy2JbntM9JjNvy1zCu+k3Z56R/YdVv6utL8/Wqf4EUB26K33wDznqhoYFrocHVi10XCwzUxcmG6uJkw1+VMTGzv9HlKzlT/WGDy1dyptr+TUJWcoztUjHaWt2UXMlFXmq+oZXcKRJXcqcYXsmdYsAp3PYfXMmdmu5OB3OboZXCqcJWcqcxruRuYlzJmbLPaf/CAasZ6Wb6vZQBZpHEAWaR4QFmkYEB5g4hB6w4HdjVhmawifK6U8gBq8WMAzRj+1N3GhoAFpfBAasljAesrqnszgH6DkP2WVLC7g7HuZdZ6fwPGeL0Z0tdvnOaCZ2lUhq/bU43XG6O30ztaaDtcD4L9wyX16Hdtk9P59/FYuwz6nRGe5zpcnvY7eVMA/PQswyf40uUn73Lf5aBct9T2d2+e4uhct9raK7L7WsZ7aPudXlEZ6shWy9j9Gn2JkxZPaN4GfM+gXOdnW6Q8Nnp/PkuZxzgTJV7efr+CmbKd29js5HiMd/YynnMOERuns8xnjHJQjzP0fZboV9X6tdV+vVc/bpav56nX9fo17X69Xz9eoF+vbCkncREG/PydN4G4KxoV2rSWLea0K0ldE6By9JTnmPIU16UbpDwRQY85cUu95R2uS825CnLqrGtMNTYLkk3SPgSA43tUpc3NrvclxpobBTXhL90rTsG9/qB0yFcJnQevcpQh7083SDhyw102HUu77B2udcJHx3ONdTYrkg3SPgKA43tSpc3NrvcVwoZHVbrjsE9OnA6hKtcHgWyZwKXGdhdutrl5bbb+FUGyn2N0NnAeYYc9LXpBglfa8BBX+dyB22X+zrhs4E1hhrb+nSDhNcbaGzXu7yx2eW+XshsYK3uGNyzAU6HcIPLR0V71L7GwKh4o8vLbbfxGwyUe4PQ2cD5hhz0TekGCd9kwEHf7HIHbZf7ZuGzgQsMNbZb0g0SvsVAY7vV5Y3NLvetQmYDF+qOwT0b4HQIt7l8VLRH7Q0GRsXbXV5uu43fZqDcdzCX27lSmHlyHiy5kzEWb8LWdlu8w4Ct7zJka26ed7Px9PlN8rwnfp6hSIXNrZZn/7dF7P/tetij5XOQvALJ92jZue9e+P8+wP2AB9L3652L+3T0Ssa+dC9jH3/QUFvnrj/GiKe6j7H+HhJSf4xBPHU/Y/09zLyAiPQNDyIf8BCSH0byAxG+YSP8/wjgUcBjZeAbVjPaZiOjbR4X0rYZ4x/qEcb6e0JI/TFu6atHGevvScO+4XHkA55A8pNIfizCNzwF/z8NeAbwbBn4hrWMtnmK0TbPCWnbjLuh6mnG+nteSP0xbvCpZxjr7wXDvuE55AOeR/ILSH42wje8CP+/BHgZsKkMfMOFjLZ5kdE2rxi2zSvIBi8h+WUkb4qwzavw/2uA1wGb0w/MD9uEY8/kLgN7l3cy2ucNl+/h2bZ6w8C+zpsuL7epbwu+5fJy2237TQPlfsDl3w61y/2WgXI/KOSbwIz2UQ8yP6syw1M2AVTOLylWRjzf1rG+Lfp1q359R79u06/v6tf39Ov7+vUD/fqhft2uXz/Srx+nl/AlQCuxSzF+CfCAx9psTT/4y33vEroPCN1H6WX/JcC3mevBuT5JN0j4k3T+fD9lnP2YKven6fsrmCnfMj3KscVQY/ss3SDhzww0ts9d3tjscn9uoLFRXBN+AIbuGNxTB06H8EW6zA77jqEO+2W6QcJfGuiwO1zeYe1y7xA+Omwz1Ni+SjdI+CsDje1rlzc2u9xfCxkd3tUdg3t04HQI37h888SeCXxhYBNhp8vLbbfxbwyU+1uhs4H3DDno79INEv7OgIPe5XIHbZd7l/DZwPuGGtv36QYJf2+gsf3g8sZml/sHIbOBD3TH4J4NcDqEH10+Ktqj9rcGRsXdLi+33cZ/NFDun4TOBj405KB/TjdI+GcDDvoXlztou9y/CJ8NbDfU2H5NN0j4VwON7TeXNza73L8JmQ18pDsG92yA0yH87vJR0R61fzIwKv7h8nLbbfx3A+X+0+Xltu3yp4Fy/8Xs4Ev6AtfbSN6SXvwXuPbA/3/rkxrlMswfttzKVwdqD6MPSskwc9iHu/4Yo1Xqb8b6SxVSf4wBGOXJ4Ku/tAyzvsFu344PSEVyGpLLZRzoG9Lh/wxAeUBmGfiGdxltk85omwpC2jbj3rXKYKy/ikLqj3E7VpVnrL9Khn1DBeQDKiK5EpIzI3xDFvxfGVAFULUMfMMHjLbJYrRNNSFtm3EnS1VmrL/qQuqPcXNGVWGsvxqGfUM15AOqI7kGkqtG+IZD4P9DAYcBapaBb/iI0TaHMNqmlmHb1EI2OBTJhyG5ZoRtasP/dQCHA47IMPcFLvvs+V8G9p04H8xzJLPv4d6HsG1lc+S2TV3D7fL+1P3try5qix+jfYi7Ug9sl/XgfUcBsgH1S2iXVmLX3i+KLDewt7PR5V+Ssstcz0BbekTIl6QY7aMecflPY9q23mqgjT/u8nLbD4e600C5n6hcNnPURHk24PPritHW6glDP6/eAPkzE33oXQNt6WmX96HVhvrQM0L6UEPGPsRoa/WMgDHnAwPt5nmXl3utof7ygpD+0oixvzDaWr1gaMxpZHjMedtAW3rZ5X3oHEN9aJOQPtSYsQ8x2lptEjDmbDHQbl5zeblXGOovrwvpL0cz9hdGW6vXmcecyH21xmgv7WgkN8gofl+tCaQ1BTQDHEPsxXPvs1ydymfn5ox2xmO4nW92RD2kHVwPykrgahJZpwnk1vRg+8SdWzPGfvimIX9B2MJKpNTHeEieceXW3FNMmePIrQWjLd4qa1tY8ZW6pacEnjHm1spTYpljyq01oy3e/ndsYcVcak+pPKPOTXmiKHOUuXkZbbHl37SFFX2pfZ4oeUaRm98TdZlLzS2H0RZb/31bWNGUOtcTE88Scwt4YixzCbkFGW3xjltsYZVc6jxPHDyLya2NJ64yk7m1ZbTFNnfZwiqu1Md64uZ5UG7HeRIoc0Ru7Rht8a4bbWEdXOrjPQnyRLm19yRc5n9y68Boi/fcawsLl/oEDwvPvbl19DCVGXLrxGiL991ui32X6syYF+P6VuH1WcJPeBBiC8Z1kGKcx6utjLb4UIgtGOd7inG+ot5ltMV2IbZgHNcUo19WHzDa4qMyskWiPFsw7jEz+gLF2JbVR2XXLxLaM+/q4dsz7+bh2zPvztjedgnZM+/h4dsz7+nh2zPvxWiL74XsmZ/o4dsz7+3h2zPvw2iLH4Tsmff1lMoz6tz6eaIoc5S59We0xY9C9swHeKLkGUVuAz1Rl7nU3AYx2mK3kD3zwZ6YeJaY2xBPjGUuIbehjLb4Scie+TBPHDyLyW24J64yk7mNYLTFz0L2zEd64uZ5UG6jPAmUOSK30Yy2+EXInvkYT4I8UW5jPQmX+Z/c8hlt8auQPfMCDwvPvbkVepjKDLmFGG3xm5D9qCLGvBjXt+p7xv2o34XYgnEdpBjn8Wo3oy3+EGILxvmeYpyvqF8YbfGnEFswjmuK0S+r3xlt8ZeQPfOWjHvmjL5AMbZlxWmLvc/P8uz7zUv7sv9vgc7sd/Hsl1sifRjpm2i9fTatFcitM8r2NzRbMT8zxLmsDIOErQz+fBXjA4JMlVtl7K9gpnzL9EnorQ01Nm+GQcJeA43N5/LGZpfbZ6CxUVwTLb/SXLnz9TN/SynLs/8bcwfUqV95vT7lDwA1CziGCoPeomB+Tk5+Xo435A+FvZY3JzdcZAG3UJ4/D9R+VZhvWWErvyCscvZE5pcfLIRS51ohC/6Ec0JBKLY/L+QPhn2W3x+ycpXfKsgLFoUCKpCfV5Dj8+aHc31WocrxWYE8tYfZ5nufUkuVO8E65eZp55cDNs8FBPQonBXB3bm4+1vA0NMSmevci+siqP1DnvNb8M7X8OyEvyJ0eRkHjzDcjwsMMDjVovC+K8jooPMMGTeFuf44y9wG5aWCPq834LPfFwxZyh8q9Aa93lCB3yq08gu9RXl+lRf2e/2+wlBhAeSZr8JWOL8wLxzcx6ssZyhtDM1Q2mYYJNzWwAzlWJfPUOxyHytkhpKnuXLnexxzY3WctZ1viqH2ai9j/Abqop3Ln/nZ2lC5j3d5uU3Nztszt/3Kuuzt0D7N8Uhur8tgIwfpc5HsTHI6wOsJgI56Flnes3+PiLraM9W1ibzzrNzCgrxCXzmiDNxtpUUG/0SJm2MXj/s5thRQj2EB9djE0MSdm2cHITybM/ts5+qU4Tnw4ibeScgKrjnjpL2zoYf0dNYP6SnLVZ2phtclwyDhLgZWdV1dvqqzy921jFZ1VmLX3qfUvWfgaW1ZVdxd7vMMPaWuchUzTpb7KXXdGB0jo61VZZe3G7u/vG+g3VRzebnXGOov1YX0l+6M/YXR1oqz/qinOnZDOwPdkdyohKc69oC0noBegBPL4KmOPRjnA72xnXOt3FzY1LeKfFZYWV7Y9c/LK4AAY74qyilUuRAIyC0qhM8p9AVz8vIhRhkK+v35KlhQ6MuBSGVZTg57G5oc9skwSLiPgclhX5dPDu1y9zV0AsY+xpXiMd/YeggJ9GLH00/XeX/9OkC/DsQxXe7Rra+h5ecAtI8b6bH7Ic/cH8kDSvDYgyBtMGAIYGiGud+36qEbP3c9H2p49sTRDgYZKPdhhmZP3GdyGR2GGsSYF2O7UZy2sJ15BWQPPCIPsx2X/YZUT9lMLYYxens8Og3XHnhE5MYn95GaYYxTguHR51VYSl5qBPOcrdizeYldpZ1R8xaGlS+nKJBj5eb7c0K5Pm/IG7BC/pywgorw5vmhGsKFfpgce31hb8BbaPJsXjndsJyRboSWR8LrKMDoMj4TN1rgmbgxukOOjTwTN0aficMXd2cdzXj+bQxjxx8rJHrCWeZ8oeff8g0thgsyDBIuMLAYLnT5Ytgud2EZRUo4HEChgTl8yND5t5DB82/2Lvg7BnaDa7t8F3yVoV3wOkJ2wYsY116MtlZ1BESNthloN0e6vNznGuovdYX0lzBjf2G0tarLHDXCK0/7/yK0AgsjuaEeP0tbrY2D1/GACWW8WpsgcLU2Uc+fJkWu1iaWwWptAuNqbSLjZHWSkNUaZ5knC12tTTa0WpuSYZDwFAOrtakuX63Z5Z4qZLU2SXPlzneaodXatIyDRzhu+3E6RdNcxzFyzdb5TIc8ZwBmAmYBZgPmAOYC5gFOAswHLAAsBJwMOAVwKuA0wCLAYsASwFLA6YAzAGcCzgIsA5wNWA44B7ACsBKwCnCuHp2xzW0+mZ4DdTMI3UxCN4vQzSZ0cwjdXEI3j9CdROjmE7oFhG4hoTuZ0J1C6E4ldKcRukWEbjGhW0LolhK60wndGYTuTEJ3FqFbRujOJnTLCd05hG4FoVtJ6FYRunO1Dl/cT8Eaxzh+TWebWFpqBiOvbJdH3O0y27aYyVJ/++w6K/G8vE7MczajLeq72Rb+/XHeOYmV2cIx47mJ5OU9MP48j9EWDdxpCysy5n5SnGXODR8cv58fX15B6izAAkZbNHSbLYL0+YeFsZc5UNxZipNjzStQ/LmMUxht0cg9tvCWdBbl1FjKHCj5XMtp0edV6hmZRYy2aOwGWwRK5akWR1dmK4oyqyXR5GVFVX9qKaMtjv53bZETJU91emll9kddZnVGiXn5wzHUnzqT0RZN/i1bBGLiqc4qvszBGMuslhWTV1445vpTZzPaomnZ28KKg6daTpXZiqvM6pyD81Jx1p9awWiLZmVpi1DcPNXKA8vsS6DMahXKyxtOqP7UuYy2OKaMbGEldinG/QHFuL5VeH2WqC2aC7EF4zpIMc7jVWNGW7QQYgvG+Z5inK+opoy2aCnEFozjmmL0y6o5oy1aldEJISuxSzH2X8XY/hRn/dntNwzI1vmdq2NiK3WM7BwdMztbx9DO0jG1M3SMbamOuS3WMbjTdEzuFB2jW6hjdvN1DG+ejunN0TG+WTrmZ8cB7LhC5BV5qCPRtjeecd6zOoPtUEeZPiQf87YSvDDf8zIMErYz5853DWNjMFXuNahTMOW7t7GleMrm2N74DDPOPrJOEu2AuCGvzTD4vfM1fBVywPfOMekYOReWduTM5mznH+sRu9IqfS1jBzyf2as59WrnuyjOtqDs7/koK2zleWEnJ1CYGyjIC3kLgvlhXzjHF/LFW6+lNXbOer3AUL1eEH+9/l+01wsN1euF//H2epGher1I12tZfr2fc/DEg/3FelJxiT1mmBjg1hqYra1lnkmYKnesncOKodyJcrzUcB1aiV3KbpiXZvDb5jJDTuGyEpytldilLjFUF5cbqovLDdbFeEN10c7lDycy1R+O/3fLXerRElNtv72QrUfGdqkYba0468+eSNnbj9QuhCfG+iytPeE8TYxZXHWCJ5XrStqFsBK71KWGBoF1JexClJKNKu1zbM7rDDiFTi6JDcUyeUu0zFdkuNPBcNoCt8sr0OQkXvuUVuec9rkSxxZ8PugboYAKh8K+nECet0Dl+nJzw/5wIDfoD4Vz/PmhQJHy5/u8eUUBK6yCRUWBHF9hIDecFyrMDWOnrUI+nz+UV1Cocry5+QVWMOTLt8L+gA8W/CFfIBTyBXNz832+UG4wHMyDRTos/YNWTiCQZ+V6fXleU/a5Eq2uuQaF0nZzcJ5SBoWrJA4KVxkeFK4yMCh0ccmgUGwjDuz7Zj6n07napYNCF0NO52qGQaG0rU1O+1zj0kHBlH2u+T/acr1Wb7leR225WoldxcY7OGOViebFuH2rTBjeqUPu5wyZqsNE81rvcnvYHWa9gYH9ekOTnOsNbn9eZ6gubjBUFzcY3go2URfdXL4VbKo/dHf5VrCptt9DyFYwY7tUjLZWPZJbwZHX3jGLq07wZPdGk6v+9YYGgRsNrvptzjcacAq9hWwFr2ecCG7IcKeD6W1oVbmhDLaCOe1zE+Oqvwfjqt+UfW4i7BPrmZrStn457XOzIf95M0M9lLY7xVkPtxiqh1uEtYdbDdXDrcLaw22G6uG2KEJFbp7YEXTZ2jGeNN4ucdJ4u+FJ4+0GJo193fEcocKydHJ3MObFOWnsa2hSckcUk8ZET9dz2ufODL6JHuek0ZR97mQYHEu5WJ+ZcReb/wya+U1xvevGHVHibON3uzyCYdv4bgPjzT2Gxl4730z9f9hz8MX1mU5+3PXdMc39HO/lnkhKabT9XR5esct8r4FyDxDy4JF7GR3zfYyOmbHdKE5bGHaS/4Qp/otO8r7/qpO8P8Osk7QSu5Rd5vsNlPsBQzOaBzL2P1nfxNc9qRmyldilOGfID7q8PdkrqgcNtKeHBPSjhwyU+2FD/ejhEvqRldhlzKcMdvnvL5pqA0OE/P7iRsZJIqOt1RBDO1Qbk6tr4xwfMT1x5FhlPmKg0w8Xssp8RECnT9QWI4Q44EcZbcHY/tSI5CpdhLN9lNPZSh0VN6W6n+Njpg4vcI9ij/MR9UptUI9nuJ/jE1Ia1JN8RH1SG9STAhrUU1Ia1NN8RP1SG9TTAhrUM1Ia1LN8RHOkNqhnBTSo56Q0qOf5iOZKbVDPC2hQL0hpUC/yEQ1IbVAvCmhQL0lpUC/zEQ1KbVAvC2hQm6Q0qFf4iOZJbVCvCGhQr0ppUK/xEc2X2qBeE9CgXpfSoDbzES2Q2qA2C2hQb0hpUG/yES2U2qDeFNCg3krGyCy1UUCM7G0pPX8LH9EiqQ1qi4CevzXZ8y11v4Ce/46Unr+NjaiypDaobQJ6/rtSGtR7fA1KSW1Q7wloUO9LaVAf8DUosed3PhDQoD6U0qC28zUosed3tgtoUB9JaVAf8zUosed3PhbQoD6R0qA+5WtQYs/vfCqgQX0mpUF9ztegxJ7f+VxAg/oiub8DEV0B+ztfSun5O/h6vthzMTsE9PyvpDSor/kalNhzMV8LaFDfSGlQO/kalNhzMTsFNKhvk3MTS90gYG7ynZSev4uv54s9b7JLQM//XkqD+oGvQYWkNqgfBDSoH6U0qN18DUrsuZjdAhrUT1Ia1M98DSostUH9LKBB/WKqQXH/kB/jwz0VfsBhog39V0MVyN0hf2Pj6QvY3OxnW9VHXH/VD2iz5ceQ/ASSn0LyM0h+DskvIPklJG9C8qtIfh3JbyD5LSS/jeStSH4Hye8i+X0kf4jkj5D8CZI/Q/IXSP4SyV8h+Rskf4vk75D8PZJ/RPJPSP4Fyb9p+Xd4/QPwJ+AvwB7A3wBPeXgfIAWQCkgDpAMyAOUBmYAKgIqASoAsQGVAFUBVQDVAdUANwCGAQwGHAWoCagFqA+qUP/j3hLgdVjm+vKxsnc/hwPsIwJGAuoB6gKMA2YD6gAaAhoBGgMaAowFNAE0BzQDHAJoDWgBaAloBWgMsgAJ4AT6AH5ADyAUEAEFAXvl9lWSXy3nYoc3HsaujO4LQHUno6hK6eoTuKEKXTejqE7oGhK4hoWtE6BoTuqMJXRNC15TQNSN0xxC65oSuBaFrSehaEbrWhM4idIrQeQmdj9D5CV0OocsldAFCFyR0eeX3P5zWubifW4j7bKLjmN03Es2rKGxfljqiPB+v0e74GasSy2zb4kiW+ttn17qJ5+V1fli4HqMtxrjZFv79P6Z8VGJltvAPM2cnkpf3wB95rs9oi7HutIUV+cPWDeIsc2744B/JbhhfXkHqB7cbMdoi3222CNI/Mt449jIHivvB8qNjzStQ/I+fN2G0RYF7bOEt6Qffm8ZS5kDJPx7fLPq8Ckv7IfpjGG1R6AZbBErlqZpHV2YrijKrFtHkZUVVf6oloy1C/64tcqLkqVqVVmZ/1GVWrUvMyx+Oof6UxWiLon/LFoGYeCpVfJmDMZZZeYvJKy8cc/0pH6MtwmVvCysOnspPldmKq8wq5+C8VJz1p3IZbTGuLG0RipunChxYZl8CZVZBlJc3nFD9qTxGW4wX8tsNjPsDinF9q8Yy/nbDBCG2YFwHKcZ5vCpktMVEIbZgnO8pxvmKCjPaYpIQWzCOa4rRL6sJjLaYXEa/L2MldinG/qsY25/irD8nNpitX3E8IjJegeMZON6B4yE4XoLjKTjeguMxOF6D4zk43oPjQThehONJON6E41E4XoXjWTjeheNhOF6G42k43objcTheh+N5ON6H44E4XojjiTjeWBHJlZCcheTKSK6C5KpIrobk6kiugeRDkHwokg9Dck0k10JybSTXQfLvKCb+B5L/RPJfSN6D5L+R7EF5lkNyCo6hITkNyelIzkByeSRnIrmClh2H0gb+bws4FnAcoB3geHvODOgAOAHQEdAJ0BnQBdAV0A3QHdAD0BPQC3AioDegD6AvoB+gP2AAYCBgEGAwYAhgKGAYYDhgBGAkYBRgNGAMYCwgH1AAKASEAEWAMGAcYDxgQnndXjz7faL9fzf7LIKWuyO5UYauV/Te4Sh9hJYnQr6TAJMB6Tp/5x58OT6lvX61ErvU5PKGDkjx8vTiuphSft/r1PKeA4O9dsJfEQS4B67JDIu7fQHacHgK40JxqiFDpjDXH2eZp6G8FGz0wwa9/b5gCPZpQrDF7vWGCvxWoZVf6C3K88Mel9/r9xWGCmHTMZivwlY4vzAvHNzHy+50lTz7Oxi+uDvdtPL8kwz7ml7eIOHp5fnzncHYGEyVe0b5/RXMlC/JlcMBzCjPn+9M5sbqOGs7X9On6TidommuExm5Zut8ZkGeswFzAHMB8wAnAeYDFgAWAk4GnAI4FXAaYBFgMWAJYCngdMAZgDMBZwGWAc4GLAecA1gBWAlYBTgXsBpwHmCNHp2xzWeVP/iE1mxCN4fQzSV08wjdSYRuPqFbQOgWErqTCd0phO5UQncaoVtE6BYTuiWEbimhO53QnUHoziR0ZxG6ZYTubEK3nNCdQ+hWELqVhG4VoTuX0K0mdOcRujXlzZ/8m8g4fs1im1haajYjr5OFnPybw1J/++w6N/G8/jn5N4/RFqcIOfl3UmJlPuDk3/xE8oo4+beA0RanCjn5tzDOMlMn/06OLy/y5N8pjLY4TcjJv1NjL3OxJ/9OizWvEk7+LWK0xSIhJ/8Wx1LmUk7+LYk+r1JP/i1ltMViISf/To+uzFGd/DsjmryiPPl3JqMtlgg5+XdWaWWO4eTfsvJ8J//OZrTFUiEn/5aX5zv5d055vpN/KxhtcbqQk38ry/Od/FtVnu/k37mMtjhDyMm/1eX5Tv6dV57v5N8aRlucKeRUDeP+gGJc36pTGU/VnCXEFozrIMU4j1eLGW2xTIgtGOd7inG+ok5ntMXZQmzBOK4pRr+szmK0xXIhJ/8Y+69ibH+Ks/7s9jsJkK3zW6NjYqt1jGyVjpmt0DG05TqmtkzH2M7UMbfTdQxuiY7JLdIxulN1zO5kHcNboGN6J+kY31wd87PjAHZcIfKKPNSR8AlgxnnP2vJshzqssjzUgXlbCV6Y7/nlDRK2M+fO9wLGxmCq3BegTsGU797GluIpm2N7k8qbcfaRdZJoB8QN+ULU1thPqVzAVyEKR5Ex6Rg5F5Z25MzmbOcf6xG70ir9QsYOeBGzV3Pq1c53UZxtQdnfJVJW2Mrzwk5OoDA3UJAX8hYE88O+cI4v5Iu3Xktr7Jz1erGher04/nr9v2ivlxiq10v+4+31UkP1eqmu13Ski7zcPHjiwf4yPam43B4zTAxwFxqYrV3IPJMwVe5YO4cVQ7kT5bjOcB1aiV3KbpjryvPb5gpDTuGKEpytldilLjdUF1caqosrDdbFJEN1cWkVd/sUU/3hsn+33KUeLTHV9i8XsvXI2C4Vo60VZ/3ZEyl7+5HahfDEWJ+ltSecp4kxi6tO8KTyqpJ2IazELrXO0CBwVQm7EKVko0r7HJvzVQacwlUuiQ3FMnlLtMxXl3eng+G0BW6XV6PJSbz2Ka3OOe1zDY4t+HzQN0IBFQ6FfTmBPG+ByvXl5ob94UBu0B8K5/jzQ4Ei5c/3efOKAlZYBYuKAjm+wkBuOC9UmBvGTluFfD5/KK+gUOV4c/MLrGDIl2+F/QEfLPhDvkAo5Avm5ub7fKHcYDiYB4t0WPoHrZxAIM/K9fryvKbscw1aXXMNCqXt5uA8pQwK10ocFK41PChca2BQuMYlg0KxjTiw75v5nE7nOpcOCtcYcjrXMQwKpW1tctpnvUsHBVP2Wf9/tOV6vd5yvYHacrUSu4qNd3DGKhPNi3H7VpkwvFOHqULqMNG8bnS5PewOc6OBgX2DoUnOBoPbnzcYqoubDNXFTYa3gk3UxXUu3wo21R/Wu3wr2FTbv17IVjBju1SMtlbXJ7eCI6+9YxZXneDJ7s0mV/03GhoEbja46rc532xiQBSyFXwj40TwlvLudDA3GVpV3lIGW8Gc9rmVcdV/PeOq35R9biXsE+uZmtK2fjntc5sh/3kbQz2UtjvFWQ+3G6qH24W1hzsM1cMdwtrDnYbq4c4oQkVuntgRdNnaMZ403iVx0niX4UnjXQYmjbe44zlChWXp5O7mDGswThpvMTQpuTuKSWOip+s57XNPeb6JHuek0ZR97mEYHEu5WJ+ZcS+b/wwaOYh9gd51444ocbbx+1wewbBtfJ+B8eZ+Q2OvnW+m/n+S5+CL6zOd/Ljru2Oa+zk+wD2RlNJob3N5eMUu8wMGyn27kAePPMDomB9kdMyM7UZx2sKwk/wnTPFfdJIP/led5EMu/3qeXeaHDJT7YUMzmofL73+yvomve1IzZCuxS3HOkDe6vD3ZK6qNBtrTIwL60SMGyv2ooX70aAn9yErsMuZT7qry32wDd5fRuZZEeT7GOElktLW629AO1WPJ1bVxjo+bnjhyrDIfN9Dp7xOyynxcQKdPeHtOiAN+gtEWjO1P3Z9cpYtwtk9wOlupo+KmVPdzfDJpKBh5MtzP8amkoaC1CjDU00lDQSUIMNQzSUNZ6lkBhno2aShLPS/AUM8lDWWpFwUY6vmkoSz1sgBDvZA0lKVeEWCoF5OGstRrAgz1UtJQltoswFAvJw1lqTcFGGpT0lCW2ihgr++VpKEstUVAj3o1aSgI9QjoUa8lDWWpbQJ61OtJQ1nqPQGG2pw0lKU+EGCoN5KGstR2AYZ6M2koS30swFBvJQ1lqU8FGOrtpKEs9bkAQ21JGgoWkwLWUVuThrLUDgE96p2koSz1tQBDbUsaylI7BRjq3aShLHWDgDHqvaShLLVLQI96P2koS/0gwFAfJA1lqd0CDPVh0lCW+lmAobabehQl94PrGR9moR5hfCjCR8xfkre/I1kfGfsj/UVfW34SyU8h+WkkP4PkZ5H8HJKfR/ILSH4RyS8h+WUkb0LyK0h+FcmvIfl1JG9G8htIfhPJbyH5bSRvQfJWJL+D5G1IfhfJ7yH5fSR/gOQPkbwdyb9l7JM/Bt0ngE8BnwE+B3wB+BKwA/AV4GvAN4CdgG8B3wF2Ab4H/AD4EbAb8BPgZ8AvgF8BvwF+B/wB+BPwF2AP4G+A/eHlMg9+Li23IyjHl5eVrfNJAd6pgDRAOiADUB6QCagAqAioBMgCVAZUAVQFVANUB9QAHAI4FHAYoCagFqA2oA7gcMARgCMBdQH1AEcBsgH1tQHxl+ZtPo5dHV0qoUsjdOmELoPQlSd0mYSuAqGrSOgqEbosQleZ0FUhdFUJXTVCV53Q1SB0hxC6QwndYYSuJqGrRehqE7o6hO5wQncEoTuS0NUldPUI3VGELpvQ1c/c/5AT5+L+/jvus4mOY3bfSDSvor2/IWmp1Ew+Xg+543HIJZbZtkUaS/3ts2t64nl5nR+oyWC0xcNutoV//4/ylE+szBb+gZ/MRPLyHvhjQRUYbbHRnbawIn8gqWKcZc4NH/xjS5XiyytI/XBTFqMtHnGbLYL0j1VVjr3MgeJ++KpKrHkFiv8RraqMtnjUPbbwlvTDYdViKXOg5B8hqx59XqX+QF4NRls85gZbBErlqQ6JrsxWFGVWh0aTlxVV/anDGG3x+L9ri5woeaqapZXZH3WZVa0S8/KHY6g/VZvRFk/8W7YIxMRT1Sm+zMEYy6wOLyavvHDM9aeOYLTFk2VvCysOnupIqsxWXGVWdQ/OS8VZf6oeoy2eKktbhOLmqY46sMy+BMqsslFe3nBC9afqM9riaSHPAGTcH1CM61u1kfEZgM8IsQXjOkgxzuPVY4y2eFbKszEZ649xvqKeZLTFc0JswTiuKUa/rJ5htMXzQn4AnbH/Ksb2pzjrz4kNZutXHI+IjFfgeAaOd+B4CI6X4HgKjrfgeAyO1+B4Do734HgQjhfheBKON+F4FI5X4XgWjnfheBiOl+F4Go634XgcjtfheB6O9+F44AHxQiTjeOMPKKb8I5J3I/knJP+M5F+Q/CuOTSP5dyT/geQ/kfwXkvcg+W8kexDnckj+GL3nEyR/iuTPkPw5kr9A8pdI3oHkr5D8NZK/QfJOJH+L5O+QvAvJ32vZcSgN4J+GgEaAxoCjAU0ATQHNAMcAmgNaAFoCWgFaAyyAAngBPoAfkAPIBQQAQUAeoA2gLeBYwHGAdoDjAe0BHQAnADoCOgE6A7oAugK6AboDegB6AnoBTgT0BvQB9AX0yzR/BqAF44GlbJ1Pf+A9ADAQMAgwGDAEMBQwDDAcMAIwEjAKMBowBjAWkA8oABQCQoAiQBgwDjAeMAEwETAJMBkwBTAVMA0wHTBDNwQcl+2feXCsdgChG0joBhG6wYRuCKEbSuiGEbrhhG4EoRtJ6EYRutGEbgyhG0vo8gldAaErJHQhQldE6MKEbhyhG0/oJhC6iYRuEqGbTOimELqphG4aoZtO6GZkmj8DgPtsonM4u28kmpdzBmBAJh+vrULOAAxkqb99dh2UeF7/nAEYzGiLd4ScARiSWJkPOAMwNJG8Is4ADGO0xTYhZwCGx1lm6gzAiPjyIs8AjGS0xbtCzgCMir3MxZ4BGB1rXiWcARjDaIv3hJwBGBtLmUs5A5AffV6lngEoYLTF+0LOABRGV+aozgCEoskryjMARYy2+EDIGYBwaWWO4QzAuEy+MwDjGW3xoZAzABMy+c4ATMzkOwMwidEW24WcAZicyXcGYEom3xmAqYy2+EjIGYBpmXxnAKZn8p0BmMFoi4+FxNcY9wcU4/pWbWOMr30ixBaM6yDFOI9X7zPa4lMhtmCc7ynG+YrazmiLz4TYgnFcU4x+WX3CaIvPhZwBYOy/irH9Kc76Mx0r7MKX1z+xwpkwd5kFmA2YA5gLmAc4CTAfsACwEHAy4BTAqYDTAIsAiwFLAEsBpwPOAJwJOAuwDHA2YDngHMAKwErAKsC5gNWA83TwBsdvZhIxnVmEbjahm0Po5hK6eYTuJEI3n9AtIHQLCd3JhO4UQncqoTuN0C0idIsJ3RJCt5TQnU7oziB0ZxK6swjdMkJ3NqFbTujOIXQrCN1KQreK0J1L6FYTuvMyzccKcZ9N1NfPZIl17YsVzmJcs/wsJFY4m6X+9tl1TuJ5/RMrnMtoi1+ExArnJVbmA2KFJyWSV0SscD6jLX4VEitcEGeZqVjhwvjyImOFJzPa4jchscJTYi9zsbHCU2PNq4RY4WmMtvhdSKxwUSxlLiVWuDj6vEqNFS5htMUfQmKFS6Mrc1SxwtOjySvKWOEZjLb4U0is8MzSyhxDrPCsTL5Y4TJGW/wlJFZ4diZfrHB5Jl+s8BxGW+wREitckckXK1yZyRcrXMVoi7+FxArPzeSLFa7O5IsVnsdoC09VGfvwjPsDinF9q35l3IcvJ8QWjOsgxTiPV38w2iJFiC0Y53uKcb6i9jDaIlWILRjHNcXolxX2K4naIs2QLbhjhYz9VzG2P8VZf6ZjhS0NfK9wDcxd1gLOB1wAuBBwEeBiwCWASwGXAS4HrANcAbgScBXgasA1gGsB1wHWA64H3AC4EbABcBPgZsAtgFsBtwFuB9wBuFMHb3D8Zg0R01lL6M4ndBcQugsJ3UWE7mJCdwmhu5TQXUboLid06wjdFYTuSkJ3FaG7mtBdQ+iuJXTXEbr1hO56QncDobuR0G0gdDcRupsJ3S2E7lZCdxuhu53Q3UHo7sw0Hytsyfi9wjUssa59scK1jGuWQ8toPpBorPB8lvrbZ9cLEs/rn1jhhYy2OMzNtkCxwosSK/MBscKLE8krIlZ4CaMtarrTFgfFCi+Ns8xUrPCy+PIiY4WXM9qilttsUUyscF3sZS42VnhFrHmVECu8ktEWtd1jixJjhVfFUuZSYoVXR59XqbHCaxhtUccNtogiVnhtdGWOKlZ4XTR5RRkrXM9oi8P/XVtEHSu8vrQyxxArvCGTL1Z4I6Mtjvi3bBFjrHBDJl+s8KZMvljhzYy2OLLsbRFXrPCWTL5Y4a2ZfLHC2xhtUbcsbZFArPD2TL5Y4R2ZfLHCOxltUU/IPjzj/oBiXN+qmoz78EcJsQXjOkgxzuNVHUZbZAuxBeN8TzHOV9SRjLaoL8QWjOOaYvTL6ihGWzQQEitk7L+Ksf2pBoJihWG+vP6JFd4Fc5e7AfcA7gXcB7gf8ADgQcBDgIcBGwGPAB4FPAZ4HPAE4EnAU4CnAc8AngU8B3ge8ALgRcBLgJcBmwCvAF4FvAZ4XQdvcPzmLiKmczehu4fQ3Uvo7iN09xO6Bwjdg4TuIUL3MKHbSOgeIXSPErrHCN3jhO4JQvckoXuK0D1N6J4hdM8SuucI3fOE7gVC9yKhe4nQvUzoNhG6Vwjdq4TuNUL3eqb5WCHus4n6+rtYYl37YoV3M65ZvEJihfew1N8+u96beF7/xArvY7SFT0is8P7EynxArPCBRPKKiBU+yGgLv5BY4UNxlpmKFT4cX15krHAjoy1yhMQKH4m9zMXGCh+NNa8SYoWPMdoiV0is8PFYylxKrPCJ6PMqNVb4JKMtAkJihU9FV+aoYoVPR5NXlLHCZxhtERQSK3y2tDLHECt8LpMvVvg8oy3yhMQKX8jkixW+mMkXK3yJ0RZthMQKX87kixVuyuSLFb7CaIu2QmKFr2byxQpfy+SLFb7OaItjhezDM+4PKMb1rfIz7sMfJ8QWjOsgxTiPVwFGW7QTYgvG+Z5inK+oNoy2OF6ILRjHNcXol9VxjLZoLyRWyNh/FWP7U+0FxQqbGPhe4WaYu7wBeBPwFuBtwBbAVsA7gG2AdwHvAd4HfAD4ELAd8BHgY8AngE8BnwE+B3wB+BKwA/AV4GvAN4CdgG8B3wF2Ab7XwRscv9lMxHTeIHRvErq3CN3bhG4LodtK6N4hdNsI3buE7j1C9z6h+4DQfUjothO6jwjdx4TuE0L3KaH7jNB9Tui+IHRfErodhO4rQvc1ofuG0O0kdN8Suu8I3S5C932m+VhhE8bvFW5miXXtixW+wbhm6SskVvgmS/3ts+tbief1T6zwbUZb9BMSK9ySWJkPiBVuTSSviFjhO4y26C8kVrgtzjJTscJ348uLjBW+x2iLAUJihe/HXuZiY4UfxJpXCbHCDxltMVBIrHB7LGUuJVb4UfR5lRor/JjRFoOExAo/ia7MUcUKP40mryhjhZ8x2mKwkFjh56WVOYZY4ReZfLHCLxltMURIrHBHJl+s8KtMvljh14y2GCokVvhNJl+scGcmX6zwW0ZbDBMSK/wuky9WuCuTL1b4PaMthgvZh2fcH1CM61vVn3EffoQQWzCugxTjPF4NYrTFSCG2YJzvKcb5ihrKaItRQmzBOK4pRr+sRjDaYrSQWCFj/1WM7U9x1p8df8hCdWf/XwSxgj1aDiO5Yca+1xT03uEofYSWf4C5xY+A3YB0nX+K5+CLOy65O9NMu/Lw8vTiuvhJB35+jgwK2Ql/RRDgbuC72QI54fBPjBPKnw0ZMoW5/jjL/AvKS8GGIGzk2e8LhizlD8FWnNcbKvBbhVZ+obcozw9rYb/X7ysMFcLmRDBfha1wfmFeOLiPl93pKnn2dzB8cXe6XzJ5nZFz/ZppkLCdOXe+vzE2BlPl/i1zfwUz5Uty5XAAv2Xy5/s7c2N1nLWdr+lTN5xO0TTXHxi5Zut8/oA8/7QHRcAewN92W64A3AEpgFRAGiAdkAEoD8gEVABUBFQCZAEqA6oAqgKqAaoDagAOARwKOAxQE1ALUBtQB3B4Bc9BJ4T+IE5y/Eno/iJ0ewjd34TOLl+krhyhSyF0qYQujdClE7oMQlee0GUSugqEriKhq0TosghdZUJXhdBVJXTVCF11QleD0B1C6A4ldIcRupqErhahq03o6hC6wyuYPyH0A+P49QfjCaE/GXlNFXJC6C/GE0J7GE8I/c1oi2lCTgjZPjiBvA44IVQukbwiTgilVOCzxXQhJ4RS4ywzdUIoLb68yBNC6Yy2mCHkhFBG7GUu9oRQ+VjzKuGEUCajLWYKOSFUIZYyl3JCqGL0eZV6QqgSoy1mCTkhlBVdmaM6IVQ5mryiPCFUhdEWs4WcEKpaWpljOCFUrQLfCaHqjLaYI+SEUI0KfCeEDqnAd0LoUEZbzBVyQuiwCnwnhGpW4DshVIvRFvOEnBCqXYHvhFCdCnwnhA5ntMVJQqLvjPsDinF9q6YzRt/nC7EF4zpIMc7j1SxGWywQYgvG+Z5inK+ouYy2WCjEFozjmmL0y2o+oy1OFnJCiLH/Ksb2pzjrz26/cwDZOr/DdUysto6R1dQxs0N1DK2GjqlV0zG2KjrmlqVjcBV1TC5Tx+gydMwuTcfwUnRMz953/VvH+v7Ssb8/IoMgnoMPdSTa9n5k3OM+ogLboQ6rLA91YN5Wghfme2QFg4TtzLnzrcs4CTZV7roV9lcwU757G1uKp2yO7f1YRsf2Eu2AuCHXQ22N/ZRKXb7ep3AUGZOOkXNhaUfObM52/rEesSut0usxdsCjmL2aU692vovibAsK6q5QWWErzws7OYHC3EBBXshbEMwP+8I5vpAv3notrbFz1mu2oXrNjr9e/y/aa31D9Vr/P95eGxiq1wa6XtORLvJy8+CJB/uGelLRyB4zTAxw9QzM1upV4J1JmCp3rJ3DiqHciXJsbLgOrcQuZTfMxhX4bXO0IadwdAnO1krsUo0M1UUTQ3XRxGBd2I7QRF2sqOpun2KqP6z8d8td6tESU21/lZCtR8Z2qRhtrTjrz55I2duP1C6EJ8b6LK094TxNjFlcdYInlU1L2oWwErtUY0ODQNMSdiFKyUaV9jk256YGnMIal8SGYpm8JVrmZhXc6WA4bYHbZTM0OYnXPqXVOad9jsGxBZ8P+kYooMKhsC8nkOctULm+3NywPxzIDfpD4Rx/fihQpPz5Pm9eUcAKq2BRUSDHVxjIDeeFCnPD2GmrkM/nD+UVFKocb25+gRUM+fKtsD/ggwV/yBcIhXzB3Nx8ny+UGwwH82CRDkv/oJUTCORZuV5fnteUfY5Bq2uuQaG03Rycp5RBobnEQaG54UGhuYFB4XyXDArFNuLAvm/mczqdFi4dFM435HRaMAwKpW1tctqnpUsHBVP2afl/tOXaSm+5tqa2XK3ErmLjHZyxykTzYty+VSYM79RhqpA6TDQvy+X2sDuMZWBgV4YmOcrg9mdrQ3XhNVQXXsNbwSbq4kKXbwWb6g8XuXwr2FTbv1jIVjBju1SMtlYXJ7eCI6+9YxZXneDJrs/kqt8yNAj4DK76bc4+A07hciFbwRbjRNBfwZ0O5nJDq0p/GWwFc9onh3HVfzHjqt+UfXII+8R6pqa0rV9O++Qa8p+5DPVQ2u4UZz0EDNVDQFh7CBqqh6Cw9pBnqB7yoggVuXliR9Bla8d40thG4qSxjeFJYxsDk8Yr3PEcocKydHJtGfPinDReYWhS0jaKSWOip+s57XNsBb6JHuek0ZR9jmUYHEu5WJ+ZcRyb/wwaOYhdV++6cUeUONt4O5dHMGwbtzMw3hxvaOy1883U/8/xHHxxfaaTH3d9d0xzP8f23BNJKY32KpeHV/Y6EwPlvlrIg0faMzrmDoyOmbHdKE5bGHaS/4Qp/otOssN/1Ume4PKv59llPsFAuTsamtF0rLD/yfomvu5JzZCtxC7FOUPu5PL2ZK+oOhloT50F9KPOBsrdxVA/6lJCP7ISu4z5lOuq/jfbwPoyOteSKM+ujJNERlur9YZ2qLomV9fGOXYzPXHkWGV2M9DpbxSyyuwmoNMnaosNQhxwd0ZbMLY/tSG5ShfhbLtzOlupo+KmVPdz7JE0lKUez3A/x55JQ1nqSQGG6pU0lKWeFmCoE5OGstSzAgzVO2koSz0vwFB9koay1IsCDNU3aShLvSzAUP2ShrLUKwIM1T9pKEu9JsBQA5KGstRmAYYamDSUpd4UYKhBSUNZaqOAvb7BSUNZaouAHjUkaShL3S+gRw1NGspS2wT0qGFJQ1nqPQGGGp40lKU+EGCoEUlDWWq7AEONTBrKUh8LMNSopKEs9akAQ41OGspSnwsw1JikoSz1qoB11NikoSy1Q0CPyk8aylJfCzBUQdJQltopwFCFSUNZ6gYBY1QoaShL7RLQo4qShrLUDwIMFU4aylK7BRhqXNJQlvpZgKHGm3oUJfeD6xkfZqE6Mz4UYQLzl+Tt70jWR8aeoL/oa8s9kNwTyb2QfCKSeyO5D5L7IrkfkvsjeQCSByJ5EJIHI3kIkocieRiShyN5BJJHInkUkkcjeQySxyI5H8kFSC5EcgjJRUgOI3kckscj+beMffJE0E0CTAZMAUwFTANMB8wAzATMAswGzAHMBcwDnASYD1gAWAg4GXAK4FTAaYBFgMWAJYClgNMBZwDOBJwFWAY4G33Hd7tn/9Weqd1lJvNL5pfML5lfMr9kfsn8kvkl83NzfipZf8n8kvkl80vml8wvmV8yv/92fnnM+eUW8uZXkMebX6HP2Zuckbl/n3I6kqcheSqSpyB5MpInIXkikicgeTySxyE5jOQiJIeQXIjkAiTnI3kskscgeTSSRyF5JJJHIHk4kocheSiShyB5MJIHIXkgkgcguT+Sz0PyaiSfi+RVSF6J5BVIPgfJy5F8NpKXIfksJJ+J5DOQfDqSlyJ5CZIXI3kRkk9D8qlIPgXJJyN5IZIXIHk+kk9C8jwkz0XyHCTPRvIsJM9E8p1IvgPJtyP5NiTfiuRbkHwzkm9C8gYk34jkG5B8PZLXI/k6JF+L5GuQfDWSr0LylUi+AsnrkHw5ki9D8qVIvgTJFyP5IiRfiOQLkHw+ktcieQ2SX0fya0h+FcmvIHkTkl9G8ktIfhHJLyD5eSQ/h+RnkfwMkp9G8lNIfhLJTyD5cSQ/huRHkfwIkjci+WEkP4TkB5H8AJLvR/J9SL4Xyfcg+W4k34Xk75G8C8nfIflbJO9E8jdI/hrJXyF5B5K/RPIXSP4cyZ8h+VMkf4Lkj5H8EZK3I/lDJH+A5PeR/B6S30XyNiS/g+StSN6C5LeR/BaS30TyG0jejOQFKE64EMknI/kUJJ+K5NOQvAjJi5G8BMlLkXw6ks9A8plIPgvJy5B8NpInInkSkicjeQqSpyJ5GpKnI3kGkmcieRaSZyN5DpLnInkekk9C8nwt7/Lsu5bD/+cAVgBWAlYBzgWsBpwHWANYCzgfcAHgQsBFgIsBlwAuBVwGuBywDnAF4ErAVYCrAdcArgVcB1gPuB5wA+BGwAbATYCbAbcAbgXcBrgdcAfgTsBdgLsB9wDuBdwHuB/wAOBBwEOAhwEbAY8AHgU8Bngc8ATgScBTgKcBzwCeBTwHeB7wAuBFwEuAlwGbAK8AXgW8BngdsBnwBuBNwFuAtwFbAFsB7wC2Ad4FvAd4H/AB4EPAdsBHgI8BnwA+BXwG+BzwBeBLwA7AV4CvAd8AdgK+BXwH2AX4HvAD4EfAbsBPgJ8BvwB+BfwG+B3wB+BPwF+APYC/AZ6KYG9ACiAVkAZIB2QAygMyARUAFQGVAFmAyoAqgKqAaoDqgBqAQwCHAg4D1ATUAtQG1AEcDjgCcCSgLqAe4ChANqA+oAGgIaARoDHgaEATQFNAM8AxgOaAFoCWgFaA1gALoABegA/gB+QAcgEBQBCQB2gDaAs4FnAcoB3geEB7QAfACYCOgE6AzoAugK6AboDugB6AnoBegBMBvQF9AH0B/QD9AQMAAwGDAIMBQwBDAcMAwwEjACMBowCjAWMAYwH5gAJAISAEKAKEAeMA4wETABMBkwCTAVMAUwHTANMBMwAzAbMAswFzAHMB8wAnAeZX3Pe7u85D7Z3Lkdvr10TP6PTNgPJnHJyvldilBjIe8EpB5V9Qcd/rwoq6MpwKshMWRegWVtz/W5WmKo77MBeuuEQ52nUSZV6FpeSlFlbkM2hJPyjtibE+S+ON8+Ru5AsY6wR38pMjG7etKBdRQdxPqY+hMKX+APTJFfl4nVKRrTEc8DMhp1Q8+Idsuet0IWM9cNbpqTHUaWmfhev0VF2nkR2bu+ONYBxdsnU+p9ncAYsBSwBLAacDzgCcCTgLsAxwNmA54BzACsBKwCrAuYDVgPMAawBrAecDLgBcCLgIcDHgEsClgMsAlwPWAa7QHR7Xpc3Hmdk7ukWEbjGhW0LolhK60wndGYTuTEJ3FqFbRujOJnTLCd05hG4FoVtJ6FYRunMJ3WpCdx6hW0Po1hK68wndBYTuQkJ3EaG7mNBdQuguJXSXEbrLCd06QneF1uGL+xdpRjBObE5j8IVFYfuy1CJGv3pLGf06UCJltm2xmKX+9tl1SeJ5eZ3J2lJGW9zqZlv4909QT0+szBae7J6RSF7eAyfOZzLa4jZ32sKKXCycFWeZc8MHLzyWxZdXkFrEnM1oi9vdZosgvXBbHnuZA8UtAs+JNa9A8QvKFYy2uMM9tvCWtIheGUuZAyUvyFcxbkqcy2iLO91gi0CpPNXq6MpsRVFmdV40eVlR1Z9aw2iLu/5dW+REyVOtLa3M/qjLrM4vMS9/OIb6Uxcw2uLuf8sWgZh4qguLL3MwxjKri4rJKy8cc/2pixltcU/Z28KKg6e6hCqzFVeZ1aUH56XirD91GaMt7i1LW4Ti5qkuP7DMvgTKrNahvLzhhOpPXcFoi/uE/Cov4/6AYlzfqtsYf5X3fiG2YFwHKcZ5vLqT0RYPCLEF43xPMc5X1D2MtnhQiC0YxzXF6JfV/Yy2eKiMfjncSuxSjP1XMbY/xVl/pmOFww3ECq+EuctVgKsB1wCuBVwHWA+4HnAD4EbABsBNgJsBtwBuBdwGuB1wB+BOwF2AuwH3AO4F3Ae4H/AA4EHAQ4CHARsBjwAeJWKFVxIxnasI3dWE7hpCdy2hu47QrSd01xO6GwjdjYRuA6G7idDdTOhuIXS3ErrbCN3thO4OQncnobuL0N1N6O4hdPcSuvsI3f2E7gFC9yChe4jQPUzoNhK6RwjdoxXNxwqHM8YKr2SMFV7FuGZ5UUis8GrGWOE1jLHCaxlt8ZKQWOF1jLHC9YyxwusZbfGykFjhDYyxwhsZY4UbGG2xSUis8CbGWOHNjLHCWxht8YqQWOGtjLHC2xhjhbcz2uJVIbHCOxhjhXcyxgrvYrTFa0JihXczxgrvYYwV3stoi9eFxArvY4wV3s8YK3yA0RabhcQKH2SMFT7EGCt8mNEWbwiJFW5kjBU+whgrfJTRFm8K2Ydn3B9QjOtb9TLjPvxbQmzBuA5SjPN49SqjLd4WYgvG+Z5inK+ozYy22CLEFozjmmL0y+otRltsFRIrZOy/irH9qa2CYoXl+PL6J1b4GMxdHgc8AXgS8BTgacAzgGcBzwGeB7wAeBHwEuBlwCbAK4BXAa8BXgdsBrwBeBPwFuBtwBbAVsA7gG2AdwHvAd4HfEDECh8jYjqPE7onCN2ThO4pQvc0oXuG0D1L6J4jdM8TuhcI3YuE7iVC9zKh20ToXiF0rxK61wjd64RuM6F7g9C9SejeInRvE7othG4roXuH0G0jdO8SuvcI3fuE7oOK5mOFuM8m6usfY4wVPs64ZvlSSKzwCcZY4ZOMscKnGG2xQ0is8GnGWOEzjLHCZxlt8ZWQWOFzjLHC5xljhS8w2uJrIbHCFxljhS8xxgpfZrTFN0JihZsYY4WvMMYKX2W0xU4hscLXGGOFrzPGCjcz2uJbIbHCNxhjhW8yxgrfYrTFd0JihW8zxgq3MMYKtzLaYpeQWOE7jLHCbYyxwncZbfG9kFjhe4yxwvcZY4UfMNriByH78Iz7A4pxfau+YtyH/1GILRjXQYpxHq92MtpitxBbMM73FON8Re1itMVPQmzBOK4pRr+sfmS0xc9CYoWM/Vcxtj9lqv6444QNDT3d2gTXIgPff/wQ5ljbAR8BPgZ8AvgU8Bngc8AXgC8BOwBfAb4GfAPYCfgW8B1gF+B7wA+AHwG7AT8Bfgb8AvgV8Bvgd8AfgD8BfwH2EDHND4nY03ZC9xGh+5jQfULoPiV0nxG6zwndF4TuS0K3g9B9Rei+JnTfELqdhO5bQvcdodtF6L4ndD8Quh8J3W5C9xOh+5nQ/ULofiV0vxG63wndH4TuT0L3F6HbU9F8TLOI8fuPHzLGNLczrq0yqsmIaX7EGNP8mDGm+QmjLcq72RYopvkpY0zzM8aY5ueMtsh0py0Oiml+wRjT/JIxprmD0RYV3GaLYmKaXzHGNL9mjGl+w2iLiu6xRYkxzZ2MMc1vGWOa3zHaopIbbBFFTHMXY0zze8aY5g+Mtsj6d20RdUzzR8aY5m7GmOZPjLao/G/ZIsaY5s+MMc1fGGOavzLaokrZ2yKumOZvjDHN3xljmn8w2qJqWdoigZjmn4wxzb8YY5p7GG1RrYxsYSV2Kcb9AcW4vlV4fZaoLaoLsQXjOkgxzuNVJUZb1BBiC8b5nmKcr6gqjLY4RIgtGMc1xeiXVXVGWxxqyBbcMU3G/qsY25/irD+7/S4EZOv89uiY2J86Rva7jpn9qmNoP+uY2m4dY/tBx9x26Rjctzom942O0X2lY3Zf6hje5zqm96mO8X2sY352HMCOK0ReKRE2TbTthRnjIH+jOZSCPRzYe7HfFwxZyh+C3ROvN1Tgtwqt/EJvUZ4fli9+r99XGCqE9WQwX4WtcH5hXji4Ly/7B2wrefbHavHFHb/FvK0ErwP4VjJI2M6cO99ylfgag6lyl6u0v36Z8t3b2FI89K8lc5chnGHG2UfWSaIdEDfkFNTWDqqQRBsKbnRWYpfCUWRMOkbOhaVUzt6OYucf6Y1LI1hapacwdsDUSrxezalXO99FcbYFBXVXqKywleeFnZxAYW6gIC/kLQjmh33hHF/IF2+9ltbYOes1zVC9psVfr/8X7TXdUL2m/8fba4ahes3Q9ZqOdJGXmwdPPNiX15OKTHvMMDHApRiYraVU4p1JmCp3rJ3DiqHcCR8/MFyHVmKXshtmhUr8tqloyClULMHZWoldKtNQXVQyVBeVDNaF7QhN1EWjau72Kab6Q+N/t9ylHi0x1faPFrL1yNguFaOtFWf92RMpe/uR2oXwxFifpbUnnKeJMYurTvCkMqukXQgrsUtVMDQIZJWwC1FKNqq0z7E5ZxlwCse4JDYUy+Qt4XNFldzpYDhtgdtlZTQ5idc+pdU5p32qoLyUzwd9IxRQ4VDYlxPI8xaoXF9ubtgfDuQG/aFwjj8/FChS/nyfN68oYIVVsKgokOMrDOSG80KFuWHstFXI5/OH8goKVY43N7/ACoZ8+VbYH/DBgj/kC4RCvmBubr7PF8oNhoN5sEiHpX/QygkE8qxcry/Pa8o+VdDqmmtQKG03B+cpZVCoKnFQqGp4UKhqYFBo4ZJBodhGHNj7Daowp9Op5tJBoYUhp1ONYVAobWuT0z7VXToomLJP9f+jLdcaesv1EGrL1UrsKjbewRmrTDQvxu1bZcLwTh2mCqnDhE9hudwedoc51MDAfpihSc5hBrc/DzFUFzUN1UVNw1vBJuqilcu3gk31h9Yu3wo21fYtIVvBjO1SMdpaWcmt4Mhr75jFVSd4slvL5Kr/UEODQC2Dq36bcy0DTsEvZCv4UMaJYO1K7nQwfkOrytplsBXMaZ86jKt+i3HVb8o+dQj7xHqmprStX077HG7Ifx7OUA+l7U5x1sMRhurhCGHt4UhD9XCksPZQ11A91I0iVOTmiR1Bl60d40ljPYmTxnqGJ431DEwac93xHKHCsnRyRzHmxTlpzDU0KTkqikljoqfrOe2TXYlvosc5aTRln2yGwbGUi/WZGfXZ/GfQyEHscnrXjTuixNnGG7g8gmHbuIGB8aahobHXzjdT/7/Qc/DF9ZlOftz13THN/RwbcU8kpTTaoMvDK3aZGxkod56QB480YnTMjRkdM2O7UZy2MOwk/wlT/BedZOP/qpM82uVfz7PLfLSBcjcxNKNpUmn/k/VNfN2TmiFbiV2Kc4bc1OXtyV5RNTXQnpoJ6EfNTHyTxVA/OqaEfmQldhnzKcdW+2+2gePK6FxLojybM04SGW2tjjO0Q9U8ubo2zrGF6YkjxyqzhYFO317IKrOFgE6fqC06CHHALRltwdj+VIfkKl2Es23J6WyljoqbUt3PsVXSUJZ6PMP9HFsnDWWpJwUYykoaylJPCzCUShrKUs8KMJQ3aShLPS/AUL6koSz1ogBD+ZOGstTLAgyVkzSUpV4RYKjcpKEs9ZoAQwWShrLUZgGGCiYNZak3BRgqL2koS20UsNfXJmkoS20R0KPaJg1lqfsF9Khjk4ay1DYBPeq4pKEs9Z4AQ7VLGspSHwgw1PFJQ1lquwBDtU8aylIfCzBUh6ShLPWpAEOdkDSUpT4XYKiOSUNZ6lUB66hOSUNZaoeAHtU5aShLfS3AUF2ShrLUTgGG6po0lKVuEDBGdUsaylK7BPSo7klDWeoHAYbqkTSUpXYLMFTPpKEs9bMAQ/Uy9ShK7u8knhg/0ZxIhc2tlmf/9xHt/38DY+3R8sKK++UFSLY57EH39Yb/+wD6AvpV2q93Lu6H94/ka1CqN+ODIfobakTc9TeKsf76MNbfAOYHLUS27f6V9rfhAUjui+R+EW17IPw/CDAYMKQS/Wxcbmc0kLEesnU+QyHPYYDhgBGAkYBRgNGAMYCxgHxAAaAQEAIUAcKAcYDxgAmAiYBJgMmAKYCpgGmA6YAZgJmAWYDZgDmAuYB5lfZVEv7i/lD9xX2sG0bohhO6EYRuJKEbRehGE7oxhG4socsndAWErpDQhQhdEaELE7pxhG48oZtA6CYSukmEbjKhm0LophK6aYRuOqGbQehmErpZhG42oZtD6OYSunmV9j9oxbm4v4M/kNEPDmXIq2jv71haahgjr07VzIxvsT7yt6Qy27YYzlJ/++w6IvG8vM6P5IxktEVnN9vCv/+HgUYlVmYL/8jQ6ETy8h74g0VjGG3RxZ22sCJ/pGlsnGXODR/8g0/58eUVpH48qoDRFl3dZosg/YNZhbGXOVDcj2+FYs0rUPwPeRUx2qKbe2zhLenHy8KxlDlQ8g+hjYs+r1J/pG88oy26u8EWgVJ5qgnRldmKosxqYjR5WVHVn5rEaIse/64tcqLkqSaXVmZ/1GVWU0rMyx+Oof7UVEZb9Py3bBGIiaeaVnyZgzGWWU0vJq+8cMz1p2Yw2qJX2dvCioOnmkmV2YqrzGrWwXmpOOtPzWa0xYllaYtQ3DzVnAPL7EugzGouyssbTqj+1DxGW/QuI1tYiV2KcX9AMa5vFV6fJWqLPkJswbgOUozzeNWd0RZ9hdiCcb6nGOcrqhejLfoJsQXjuKYY/bLqw2iL/oZswR2HZOy/irH9KSn1x/jDFqoZ43zlJOY4rn0t0q/2/1dU3B/jWYfky5F8GZIvRfIlSL4YyRch+UIkX4Dk85G8FslrkHweklcj+Vwkr0LySiSvQPI5SF6O5LORvAzJZyH5TCSfgeTTkbwUyUuQvBjJi5B8GpIfRfIjSN6I5IeR/BCSH0TyA0i+H8n3IfleJN+D5LuRfBeS70TyHUi+Hcm3IflWJN+C5JuRfBOSNyD5RiTfgOTrkbweydch+VokX4Pkq5F8FZKvRPIHSH4fye8h+V0kb0PyO0jeiuQtSH4byW8h+U0kv4HkzUh+HcmvIflVJL+C5E1IfhnJLyH5RSS/gOTnkfwckp9F8jNIfhrJTyH5SSQ/geTHkfwYkk9CMeZWSG6NZAvJCsleJPuQ7EdyDpJzkRxAchDJeUhug+S2SD4WycchuR2Sj0dyeyR3QPIJSO6I5E5I7ozkLkjuiuRuSO6O5B5I7onkXkjG5yHweQl8ngKft8DnMfB5DXyeA5/3wOdB8HkRfJ4EnzfB51HweRV8ngWfd5mHZHxeAZ9nwOcd8HkIfF4Cn6fA5y3weQx8XgOf58DnPfB5EHxeBJ8ncc6brPbsu+bD/wsACwEnA04BnAo4DbAIsBiwBLAUcDrgDMCZgLMAywBnA5YDzgGsAKwErAKcC1gNOA+wBrAWcD7gAsCFgIsAFwMuAVwKuAxwOWAd4ArAlYCrAFcDrgFcC7gOsB5wPeAGwI2ADYCbADcDbgHcCrgNcDvgDsCdgLsAdwPuAdwLuA9wP+ABwIOAhwAPAzYCHgE8CngM8DjgCcCTgKcATwOeATwLeA7wPOAFwIuAlwAvAzYBXgG8CngN8DpgM+ANwJuAtwBvA7YAtgLeAWwDvAt4D/A+4APAh4DtgI8AHwM+AXwK+AzwOeALwJeAHYCvAF8DvgHsBHwL+A6wC/A94AfAj4DdgJ8APwN+AfwK+A3wO+APwJ+AvwB7AH8DPFnQZgApgFRAGiAdkAEoD8jM8hxwldOv7fWrldilxjIeODZ91o/xLOs/Z/0qQP1WBFQCZAEqA6oAqgKqAaoDagAOARwKOAxQE1ALUBtQB3A44AjAkYC6gHqAowDZgPqABoCGgEaAxoCjAU0ATbP2VZJdT875K5uP40ccXUVCV4nQZRG6yoSuCqGrSuiqEbrqhK4GoTuE0B1K6A4jdDUJXS1CV5vQ1SF0hxO6IwjdkYSuLqGrR+iOInTZhK4+oWtA6BoSukaErjGhO5rQNSF0TbUOX9x7SLjPJrpWtvtGonk5Z/0qZvHxKhBy1q8SS/3ts2tW4nn9c9avMqMtCoWc9auSWJkPOOtXNZG8Is76VWO0RUjIWb/qcZaZOutXI768yLN+hzDaokjIWb9DYy9zsWf9Dos1rxLO+tVktEVYyFm/WrGUuZSzfrWjz6vUs351GG0xTshZv8OjK3NUZ/2OiCavKM/6Hcloi/FCzvrVLa3MMZz1q5fFd9bvKEZbTBBy1i87i++sX/0svrN+DRhtMVHIWb+GWXxn/Rpl8Z31a8xoi0lCzvodncV31q9JFt9Zv6aMtpgs5BwN4/6AYlzfqhDjOZopQmzBuA5SjPN4NY7RFlOF2IJxvqcY5ytqIqMtpgmxBeO4phj9sprCaIvpQs6qMfZfxdj+FGf92e13ESBb59dUx8SO1jGyRjpm1kDH0LJ1TK2ejrEdqWNuh+sYXG0dk6upY3SH6phdDR3Dq6ZjelV0jC9Lx/zsOECFiBirfaVE2DTRtjeKMQ7SDM2hFOzhwN6L/b5gyFL+EOyeeL2hAr9VaOUXeovy/LB88Xv9vsJQIawng/kqbIXzC/PCwX15pUMedhi63MFVwB6/xbytBC/M95gsg4TtzLnzbc44CTZV7uaoUzDlu7expXgOfiiQiTKMMvAkNXw5eSfaAXFDboHa2kEVkmhDac7X+xSOImPSMXIuLKVy9nYUO/9Ib1wawdIqvQVjB2zJ7NWcerXzXRRnW1D2SlFZYSvPCzs5gcLcQEFeyFsQzA/7wjm+kC/eei2tsXPWaytD9doq/nr9v2ivrQ3Va+v/eHu1DNWrpes1HekiLzcPnniwV3pS4bXHDBMDXAsDs7UWWbwzCVPljrVzWDGUO1GOPsN1aCV2Kbth+rL4beM35BT8JThbK7FLeQ3VRY6husgxWBe2IzRRF4uqudunmOoPi//dcpd6tMRU218iZOuRsV0qRlsrzvqzJ1LUo4nxFe1nldaecJ4mxiyuOsGTytySdiGsxC7lMzQI5JawC1FKNqq0z7E55xpwCme6JDYUy+Qt0TIHstzpYDhtgdtlAE1O4rVPaXXOaZ8gji34fNA3QgEVDoV9OYE8b4HK9eXmhv3hQG7QHwrn+PNDgSLlz/d584oCVlgFi4oCOb7CQG44L1SYG8ZOW4V8Pn8or6BQ5Xhz8wusYMiXb4X9AR8s+EO+QCjkC+bm5vt8odxgOJgHi3RY+getnEAgz8r1+vK8puwTRKtrrkGhtN0cnKeUQSFP4qCQZ3hQyDMwKCxzyaBQbCMO7P0GVZjT6bRx6aCwzJDTacMwKJS2tclpn7YuHRRM2aft/9GW67F6y/U4asvVSuwqNt7BGatMNC/G7VtlwvBOHaYKqcNE82rncnvYHaadgYH9eEOTnOMNbn8eZ6gu2huqi/aGt4JN1MVyl28Fm+oP57h8K9hU218hZCuYsV0qRlurFcmt4Mhr75jFVSd4stvB5Kq/naFBoIPBVb/NuYMBp7BayFZwO8aJ4AlZ7nQwqw2tKk8og61gTvt0ZFz1r2Bc9ZuyT0fCPrGeqSlt65fTPp0M+c9ODPVQ2u4UZz10NlQPnYW1hy6G6qGLsPbQ1VA9dI0iVOTmiR1Bl60d40ljN4mTxm6GJ43dDEwa17jjOUKFZenkujPmxTlpXGNoUtI9ikljoqfrOe3TI4tvosc5aTRlnx4Mg2MpF+szM3qy+c+gkYPYzfWuG3dEibON93J5BMO2cS8D482JhsZeO99M/f8iz8EX12c6+XHXd8c093PszT2RlNJoz3d5eMUuc28D5b5AyINHejM65j6Mjpmx3ShOWxh2kv+EKf6LTrLPf9VJ9nX51/PsMvc1UO5+hmY0/bL2P1nfxNc9qRmyldilOGfI/V3enuwVVX8D7WmAgH40wEC5BxrqRwNL6EdWYpcxn3Jxtf9mG7ikjM61JMpzEOMkkdHW6hJDO1SDkqtr4xwHm544cqwyBxvo9JcLWWUOFtDpE7XFOiEOeAijLRjbn1qXXKWLcLZDOJ2t1FFxU6r7OQ5NGspSj2e4n+OwpKEs9aQAQw1PGspSTwsw1IikoSz1rABDjUwaylLPCzDUqKShLPWiAEONThrKUi8LMNSYpKEs9YoAQ41NGspSrwkwVH7SUJbaLMBQBUlDWepNAYYqTBrKUhsF7PWFkoay1BYBPaooaShL3S+gR4WThrLUNgE9alzSUJZ6T4ChxicNZakPBBhqQtJQltouwFATk4ay1McCDDUpaShLfSrAUJOThrLU5wIMNSVpKEu9KmAdNTVpKEvtENCjpiUNZamvBRhqetJQltopwFAzkoay1A0CxqiZSUNZapeAHjUraShL/SDAULOThrLUbgGGmpM0lKV+FmCouaYeRcn94HrGh1moAYwPRZjH/CV5+zuS7VP2G9v+7lZmUk7K/1F5XtZ+eSiShyF5OJJHIHkkkkcheTSSxyB5LJLzkVyA5EIkh5BchOQwkscheTySJyB5IpInIXkykqcgeSqSpyF5OpJnIHkmkmcheTaS5yB5LpLblN8vt0XysUg+DsntkHw8ktsjuQOST0ByRyR3QnJnJHdBclckd0NydyT3QHJPJPdC8olI7o3kPkjui+R+SO6P5AFIHojkQUgejOQhSB6K5GFIHo7kEUgeieRRSB6N5DFIHovkfCQXILkQySEkFyE5jORxSB6P5AlIbpC5X26I5EZIbozko5HcBMlNkdwMyccguTmSWyC5JZJbIbk1ki0kKyR7kexDsh/JOUjORXIAyUEk5yG5DZLbIvlYJB+H5HZIPh7J7ZHcAcknILkjkjshuTOSuyC5K5K7Ibk7knsguSeSeyH5RCT3RnIfJPdFcj8kz6+0X16A5IVIPhnJpyD5VCSfhuRFSF6M5CVIXork05F8BpLPRPJZSF6G5LORvBzJ5yB5BZJXInkVks9F8mokn4fkNUhei+TzkXwBki9E8kVIvhjJlyD5UiRfhuTLkbwOyVcg+UokX4Xkq5F8DZKvRfJ1SF6P5OuRfAOSb0TyBiTfhOSbkXwLkm9F8m1Ivh3JdyD5TiTfheS7kXwPku9F8n1Ivh/JDyD5QSQ/hOSHkbwRyY8g+VEkP4bkx5H8BJKfRPJTSH4ayc8g+VkkP4fk55H8ApJfRPJLSH4ZyZuQ/AqSX0Xya0h+HcmbkfwGkt9E8ltIfhvJW5C8FcnvIHkbkt9F8ntIfh/JHyD5QyRvR/JHSP4YyZ8g+VMkf4bkz5H8BZK/RPIOJH+F5K+R/A2SdyL5WyR/h+RdSP4eyT8g+Uck70byT0j+Gcm/IPlXJP+G5N+R/AeS/0TyX0jeg+S/kexB89tySE5BciqS05CcjuQMJJdHciaSl1fYL5+D5BVIXonkVUg+F8mrkXwektcgeS2Sz0fyBUi+EMkXIfliJF+C5EuRfBmSL0fyOiRfgeQrkXwVkq9G8jVIvhbJ1yF5PZKvR/INSL4RyRuQfBOSb0byLUi+Fcm3Ifl2JN+B5DuRfBeS70byPUi+F8n3Ifl+JD+A5AeR/BCSH0byRiQ/guRHkfwYkh9H8hNIfhLJTyH5aSQ/g+Rnkfwckp9H8gtIfhHJLyH5ZSRvQvIrSH4Vya8h+XUkb0byG0h+E8lvIfltJG9B8lYkv4PkbUh+F8nvIfl9JH+A5A+RvB3JHyH5YyR/guRPkfwZkj9H8hdI/hLJO5D8FZK/RvI3SN6J5G+R/B2SdyH5eyT/gOQfkbwbyT8h+Wck/4LkX5H8G5J/R/IfSP4TyX8heQ+S/0ayp+J+uRySU5CciuQ0JKcjOQPJ5ZGcieQKSK6I5EpIzkJyZSRXQXJVJFdDcnUk10DyIUg+FMmHIbkmkmshuTaS6yD5cCQfgeQjkVwXyfWQfBSSs5FcH8kNkNwQyY2Q3BjJRyO5CZKbIrkZko9BcnMkt0BySyS3QnJrJFtIVkj2ItmHZD+Sc5Cci+QAkoNIzkNyGyS3RfKxSD4Oye2QfDyS2yO5A5JPQHJHJHdCcmckd0FyVyR3Q3J3JPdAck8k90LyiUjujeQ+SO6L5H5I7o/kAUgeiORBSB6M5CFIHorkYUgejuQRSB6J5FFIHo3kMUgei+R8JBcguRDJISQXITmM5HFIHo/kCUieiORJSJ6M5ClInorkaUiejuQZSJ6J5FlIno3kOUiei+R5SD4JyfO1fBLMo+cDFgAWAk4GnAI4FXAaYBFgMWAJYCngdMAZgDMBZwGWAc4GLAecA1gBWAlYBTgXsBpwHmANYC3gfMAFgAsBFwHwpUNybDHIzhl8MciLGWOje8dBbQc732zPvt9GrOjZH9PFVznmemmewRtPdWKpkRfXZyTzTeabzDeZbzLfZL7JfJP5JvNN5pvMN5lvMt9kvsl8k/km803mm8w3mW8yX3fky71fzfn9H1MchwrgOEwAx+ECOI4QwHGkAI6jBHAcLYDjGAEcxwrgmC+AY4EAjoUCOIYEcCwSwDEsgOM4ARzHC+A4QQDHiQI4ThLAcbIAjlMEcJwqgOM0ARynC+A4QwDHmQI4zhLAcbYAjnMEcJwrgKP9fA63c2wrgOOxAjgeJ4BjOwEcjxfAsb0Ajh0EcDxBAMeOAjh2EsCxswCOXQRw7CqAYzcBHLsL4NhDAMeeAjj2EsDxRAEcewvg2EcAx74COPYTwLG/AI4DBHAcKIDjIAEcBwvgOEQAx6ECOA4TwHG4AI4jBHAcKYDjKAEcRwvgOEYAx7ECOOYL4FgggGOhAI4hARyLBHAMC+A4TgDH8QI4ThDA0f59ALdzbCiAYyMBHBsL4Hi0AI5NBHBsKoBjMwEcjxHAsbkAji0EcGwpgGMrARxbC+BoCeCoBHD0CuDoE8DRL4BjjgCOuQI4BgRwDArgmCeAYxsBHNsK4HisAI7HCeDYTgDH4wVwbC+AYwcBHE8QwLGjAI6dBHDsLIBjFwEcuwrg2E0Ax+4COPYQwLGnAI69BHA8UQDH3gI49hHAsa8Ajv0EcLR/n9ztHBcI4LhQAMeTBXA8RQDHUwVwPE0Ax0UCOC4WwHGJAI5LBXA8XQDHMwRwPFMAx7MEcFwmgOPZAjguF8DxHAEcVwjguFIAx1UCOJ4rgONqARzPE8BxjQCOawVwPF8AxwsEcLxQAMeLBHC8WADHSwRwvFQAx8sEcLxcAMd1AjheIYDjlQI4XiWA49UCOF4jgOO1AjheJ4DjegEcrxfA8QYBHG8UwHGDAI43CeB4swCOtwjgeKsAjrcJ4Hi7AI53COB4pwCOdwngeLcAjvcI4HivAI73CeB4vwCODwjg+KAAjg8J4PiwAI4bBXB8RADHRwVwfEwAx8cFcHxCAMcnBXB8SgDHpwVwfEYAx2cFcHxOAMfnBXB8QQDHFwVwfEkAx5cFcNwkgOMrAji+KoDjawI4vi6A42YBHN8QwPFNARzfEsDxbQEctwjguFUAx3cEcNwmgOO7Aji+J4Dj+wI4fiCA44cCOG4XwPEjARw/FsDxEwEcPxXA8TMBHD8XwPELARy/FMBxhwCOXwng+LUAjt8I4LhTAMdvBXD8TgDHXQI4fi+A4w8COP4ogONuARx/EsDxZwEcfxHA8VcBHH8TwPF3ARz/EMDxTwEc/xLAcY8Ajn8L4OjJcj/HcgI4pgjgmCqAY5oAjukCOGYI4FheAMdMARyXV3A/x3MEcFwhgONKARxXCeB4rgCOqwVwPE8AxzUCOK4VwPF8ARwvEMDxQgEcLxLA8WIBHC8RwPFSARwvE8DxcgEc1wngeIUAjlcK4HiVAI5XC+B4jQCO1wrgeJ0AjusFcLxeAMcbBHC8UQDHDQI43iSA480CON4igOOtAjjeJoDj7QI43iGA450CON4lgOPdAjjeI4DjvQI43ieA4/0COD4ggOODAjg+JIDjwwI4bhTA8REBHB8VwPExARwfF8DxCQEcnxTA8SkBHJ8WwPEZARyfFcDxOQEcnxfA8QUBHF8UwPElARxfFsBxkwCOrwjg+KoAjq8J4Pi6AI6bBXB8QwDHNwVwfEsAx7cFcNwigONWARzfEcBxmwCO7wrg+J4Aju8L4PiBAI4fCuC4XQDHjwRw/FgAx08EcPxUAMfPBHD8XADHLwRw/FIAxx0COH4lgOPXAjh+I4DjTgEcvxXA8TsBHHcJ4Pi9AI4/COD4owCOuwVw/EkAx58FcPxFAMdfBXD8TQDH3wVw/EMAxz8FcPxLAMc9Ajj+LYCjp6L7OZYTwDFFAMdUARzTBHBMF8AxQwDH8gI4ZgrgWEEAx4oCOFYSwDFLAMfKAjhWEcCxqgCO1QRwrC6AYw0BHA8RwPFQARwPE8CxpgCOtQRwrC2AYx0BHA8XwPEIARyPFMCxrgCO9QRwPEoAx2wBHOsL4NhAAMeGAjg2EsCxsQCORwvg2EQAx6YCODYTwPEYARybC+DYQgDHlgI4thLAsbUAjpYAjkoAR68Ajj4BHP0COOYI4JgrgGNAAMegAI55Aji2EcCxrQCOxwrgeJwAju0EcDxeAMf2Ajh2EMDxBAEcOwrg2EkAx84COHYRwLGrAI7dBHDsLoBjDwEcewrg2EsAxxMFcOwtgGMfARz7CuDYTwDH/gI4DhDAcaAAjoMEcBwsgOMQARyHCuA4TADH4QI4jhDAcaQAjqMEcBwtgOMYARzHCuCYL4BjgQCOhQI4hgRwLBLAMSyA4zgBHMcL4DhBAMeJAjhOEsBxsgCOUwRwnCqA4zQBHKcL4DhDAMeZAjjOEsBxtgCOcwRwnCuA4zwBHE8SwHG+AY4meHbOMMPznyuFmfDFWfvz8lm5fn9RwFukfCrf8uYVBHMsf05BblAFVU4wJ+QN+nxFQX8wkFeQF7DylN9XpMI5eb6wzuySLD5etmFStYHsfLNLqYdEuXPW6TiPmUbAXeZyjGUeL6TMKYxlniCkzKmMZZ4opMxpjGWeVEZlthK71GTG+luXKmPAneKRwXOqEJ7ThPCcztjWMU/uPjmDkefLQvrkTI8MnrOE8JwthOccITznCuE5TwjPk4TwnC+E5wIhPBcK4XmyEJ6nCOF5qhCepwnhuUgIz8VCeC4RwnOpEJ6nC+F5hhCeZwrheZYQnsuE8DxbCM/lQnieI4TnCiE8VwrhuUoIz3OF8FwthOd5QniuEcJzrRCe5wvheYEQnhcK4XmREJ4XC+F5iRCelwrheZkQnpcL4blOCM8rhPC8UgjPq4TwvFoIz2uE8LxWCM/rhPBcL4Tn9UJ43iCE541CeG4QwvMmITxvFsLzFiE8bxXC8zYhPG8XwvMOITzvZObJ/qC/DI+nXwb/Gdq7UF6JnqHtl+H+OuxvoA7vZqzD/gLqcICBOryHsQ4HCKjDgQbq8F7GOhxo6MuW3GW+jy0vn7dvRuL1VxS2r8IwLjN3+7nfI2NMfUAIzweF8HxICM+HhfDcKITnI0J4PiqE52NCeD4uhOcTQng+KYTnU0J4Pi2E5zNCeD4rhOdzQng+L4TnC0J4viiE50tCeL4shOcmITxfEcLzVSE8XxPC83UhPDcL4fmGEJ5vCuH5lhCebwvhuUUIz61CeL4jhOc2ITzfFcLzPSE83xfC8wMhPD8UwnO7EJ4fCeH5sRCenwjh+akQnp8J4fm5EJ5fCOH5pRCeO4Tw/EoIz6+F8PxGCM+dQnh+K4Tnd0J47hLC83shPH8QwvNHITx3C+H5kxCePwvh+YsQnr8K4fmbEJ6/C+H5hxCefwrh+ZcQnnuE8PxbCE87Qwk8yxnimcLMMwXxTPT7MR2EfD8mlbHMzTNktMc0If0mXQjPDCE8ywvhmSmEZwUhPCsK4VlJCM8sITwrC+FZRQjPqkJ4VhPCs7oQnjWE8DxECM9DhfA8TAjPmkJ41hLCs7YQnnWE8DxcCM8jhPA8UgjPukJ41hPC8yghPLOF8KwvhGcDxFPlFfj8uYVF4Txfrj8nJwD/F+aGCoOqIJSbX1jgCxSECoLBYFFBQaiosMCb6y0KQg5eX74/vyhQUJCDeXLvpTZk3Eu9WsjvDTcqo739ROuzHGOZGwuJZxzN2B4vzpLRHpsI8WlNhfBsJoTnMUJ4NhfCs4UQni2F8GwlhGdrITwtITyVEJ5eITx9Qnj6hfDMEcIzVwjPgBCeQSE884TwbCOEZ1shPI8VwvM4ITzbCeF5vBCe7YXw7CCE5wlCeHYUwrOTEJ6dhfDsIoRnVyE8uwnh2V0Izx5CePYUwrOXEJ4nCuHZWwjPPkJ49hXCs58Qnv2F8BwghOdAITwHCeE5WAjPIUJ4DhXCc5gQnsOF8BwhhOdIITxHCeE5WgjPMUJ4jhXCM18IzwIhPAuF8AwJ4VkkhGdYCM9xQniOF8JzghCeE4XwnCSE52QhPKcI4TlVCM9pQnhOF8JzhhCeM4XwnCWE52whPOcI4TlXCM95QnieJITnfCE8FwjhuVAIz5OF8DxFCM9ThfA8TQjPRUJ4LhbCc4kQnkuF8DxdCM8zhPA8UwjPs4TwXCaE59lCeC4XwvMcITxXCOG5UgjPVUJ4niuE52ohPM8TwnONEJ5rhfA8XwjPC4TwvFAIz4uE8LxYCM9LhPC8VAjPy4TwvFwIz3VCeF4hhOeVQnheJYTn1UJ4XiOE57VCeF4nhOd6ITyvF8LzBiE8bxTCc4MQnjcJ4XmzEJ63COF5qxCetwnhebsQnncI4XmnEJ53CeF5txCe9wjhea8QnvcJ4Xm/EJ4PCOH5oBCeDwnh+bAQnhuF8HxECM9HhfB8TAjPx4XwfEIIzyeF8HxKCM+nhfB8RgjPZ4XwfE4Iz+eF8HxBCM8XhfB8SQjPl4Xw3CSE5ytCeL4qhOdrQni+LoTnZiE83xDC800hPN8SwvNtITy3COG5VQjPd4Tw3CaE57tCeL4nhOf7Qnh+IITnh0J4bhfC8yMhPD8WwvMTITw/FcLzMyE8PxfC8wshPL8UwnOHEJ5fCeH5tRCe3wjhuVMIz2+F8PxOCM9dQnh+L4TnD0J4/iiE524hPH8SwvNnITx/EcLzVyE8fxPC83chPP8QwvNPITz/EsJzjxCefwvh6UmRwbOcEJ4pQnimCuGZJoRnuhCeGUJ4lhfCM1MIzwpCeFYUwrOSEJ5ZQnhWFsKzihCeVYXwrCaEZ3UhPGsI4XmIEJ6HCuF5mBCeNYXwrCWEZ20hPOsI4Xm4EJ5HCOF5pBCedYXwrCeE51FCeGYL4VlfCM8GQng2FMKzkRCejYXwPFoIzyZCeDYVwrOZEJ7HCOHZXAjPFkJ4thTCs5UQnq2F8LSE8FRCeHqF8PQJ4ekXwjNHCM9cITwDQngGhfDME8KzjRCebYXwPFYIz+OE8GwnhOfxQni2F8KzgxCeJwjh2VEIz05CeHYWwrOLEJ5dhfDsJoRndyE8ewjh2VMIz15CeJ4ohGdvITz7COHZVwjPfkJ49hfCc4AQngOF8BwkhOdgITyHCOE5VAjPYUJ4DhfCc4QQniOF8BwlhOdoITzHCOE5VgjPfCE8C4TwLBTCMySEZ5EQnmEhPMcJ4TleCM8JQnhOFMJzkhCek4XwnGKIZ0oET5+V6/cXBbxFyqfyLW9eQTDH8ucU5AZVUOUEc0LeoM9XFPQHA3kFeQErT/l9RSqck+cL67yPZizz1DIqs5XYpaal8NXfJVlmypx2sJ19CfBUJ2VFlDkUf17zsw6qPxVvXguy+GxxVbUys8U+nlZ8ZV5Il9mKJ6+Ti6m/vHDseZ3CaIury9oW+3gGYy3zqSWVORBbXqeVWH/+cCx5LWK0xTX/ji328fRHX+bFpZc5J9q8lkRTf1Z0eS1ltMW1/6Yt9vG0oinz6dGWOVB6XmdEX3+FpeV1JqMtrvv3bbGPZ6DkMp8VW5m9JeW1LNb6CxSf19mMtljvFlvs4xkorszL4ylzkM7rnPjqL0jltYLRFte7yxZ7eeaGDy7zyvjLbEXmtSqR+vMemNe5jLa4wYW20DwtXObViZbZvz+v8xKvP6+T1xpGW9zoXlvs5Vm0j6ham8WRV9jOTZ3PlBfkpi5gtMUGl9vC4Xkh3/6AYlzfKrw+S7SMN5WRLazELsW4DlKM83h1HaMtbhZiC8b5nmKcr6gbGG1xixBbMI5ritEvq5sYbXGrEFtM59tDV4y+QDG2ZWXKFinMtpjBGCfonCEjbjUzhWm+FyoIlWSbROszle/3ONQsITHF2UJ4zhHCc64QnvOE8DxJCM/5QnguEMJzoRCeJwvheYoQnqcK4XmaEJ6LhPBcLITnEiE8lwrheboQnmcI4XmmEJ5nCeG5TAjPs4XwXC6E5zlCeK4QwnOlEJ6rhPA8VwjP1UJ4nieE5xohPNcK4Xm+EJ4XCOF5oRCeFwnhebEQnpcI4XmpEJ6XCeF5uRCe64TwvEIIzyuF8LxKCM+rhfC8RgjPa4XwvE4Iz/VCeF4vhOcNQnjeKITnBiE8bxLC82YhPG8RwvNWITxvE8LzdiE87xDC804hPO8SwvNuITzvEcLzXiE87xPC834hPB8QwvNBITwfEsLzYSE8Nwrh+YgQno8K4fmYEJ6PC+H5hBCeTwrh+ZQQnk8L4fmMEJ7PCuH5nBCezwvh+YIQni8K4fmSIZ4pETwT/c5qOmOZXxZS5gzGMm8SUubyjGV+RUiZMxnL/KqQMldgLPNrQspckbHMrwspcyXGMm8WUuYsxjK/IaTMlRnL/KaQMldhLPNbQspclbHMbwspczXGMm8RUubqjGXeKqTMNRjL/I6QMh/CWOZtQsp8KGOZ3xVS5sMYy/yekDLXZCzz+0LKXIuxzB8IKXNtxjJ/KKTMdRjLvF1ImQ9nLPNHQsp8BGOZPxZS5iMZy/yJkDLXZSzzp0LKXI+xzJ8JKfNRjGX+XEiZsxnL/IWQMtdnLPOXQsrcgLHMO4SUuSFjmb8SUuZGjGX+WkiZGzOW+RvGMtvnAZznqI9D5S+n6yBVp9vxczuebMdX7XijHX+z41F2fMaOV9j79/Z+tr2/a+932vt/9n6YvT9k75fY+wf2etpeX9rrLXv9Yc/H7fmpPV+z5y/2eG6Pb9kA2//Z/sDuH3Z7sevP/r3UJoCmgGaAYwDNAS0ALQGtAK3tOgEogNe2G8APyAHkAgKAICAP0AbQFnAs4DhAO8Dx2k4dACcAOgI6AToDugC6AroBugN6AHoCegFOBPQG9AH0BfQD9AcMAAwEDAIMBgwBDAUMAwwHjACMBIwCjAaMAYwF5AMKAIUA+2HeRYAwss+ZKfttNh4wATARMAkwGTAFMBUwDTAdMAMwEzALMBswBzAXMA9wEmA+YAFgIeBkwCmAUwGnARYBFgOWAJYCTgecYXMAnAVYBjgbsBxwDmAFYCVgFeBcwGrAeYA1gLWA8wEXAC4EXAS4GHAJ4FLAZYDLAesAVwCuBFwFuBpwDeBawHWA9YDrATcAbgRsANwEuBlwC+BWwG2A2wF3AO4E3AW4G3AP4F7AfYD7AQ8AHgQ8BHgYsBHwCOBRwGOAxwFPAJ4EPAV4GvAM4FnAc4DnAS8AXgS8BHgZsAnwCuBVwGuA1wGbAW8A3gS8BXgbsAWwFfAOYBvgXcB7gPcBHwA+BGwHfAT4GPAJ4FPAZ4DPAV8AvgTsAHwF+BrwDWAn4FvAd4BdgO8BPwB+BOwG/AT4GfAL4FfAb4DfAX8A/gT8BdgD+BtgO4NygBSA/ez3NEA6IANQHpAJqACoCKgEyAJUBlQBVAVUA1QH1AAcAjgUcBigJqAWoDagDuBwwBGAIwF1AfUARwGyAfUBDQANAY0AjQFHA5oAmgKaAY4BNAe0ALQEtAK0BthOTgG8AB/AD8gB5AICgCAgD9AG0BZwLOA4QDvA8YD2gA6AEwAdAZ0AnQFdAF0B3QDdAT0APQG9ACcCegP6APoC+gH6AwYABgIGAQYDhgCGAoYBhgNGAEYCRgFGA8YAxgLyAQWAQkAIUAQIA8YBxgMmACYCJgEmA6YApgKmAaYDZgBmAmYBZgPmAOYC5gFOAswHLAAsBJwMOAVwKuA0wCLAYsASwFLA6YAzAGcCzgIsA5wNWA44B7ACsBKwCnAuYDXgPMAawFrA+YALABcCLgJcDLgEcCngMsDlgHWAKwBXAq4CXA24BnAt4DrAesD1gBsANwI2AG4C3Ay4BXAr4DbA7YA7AHcC7gLcDbgHcC/gPsD9gAcADwIeAjwM2Ah4BPAo4DHA44AnAE8CngI8DXgG8CzgOcDzgBcALwJeArwM2AR4BfAq4DXA64DNgDcAbwLeArwN2ALYCngHsA3wLuA9wPuADwAfArYDPgJ8DPgE8CngM8DngC8AXwJ2AL4CfA34BrAT8C3gO8AuwPeAHwA/AnYDfgL8DPgF8CvgN8DvgD8AfwL+AuwB/A2wJwLlACmAVEAaIB2QASgPyARUAFQEVAJkASoDqgCqAqoBqgNqAA4BHAo4DFATUAtQG1AHcDjgCMCRgLqAeoCjANmA+oAGgIaARoDGgKMBTQBNAc0AxwCaA1oAWgJaAVoDLIACeAE+gB+QA8gFBABBQB6gDaAt4FjAcYB2gOPtuRagA+AEQEdAJ0BnQBdAV0A3QHdAD0BPQC/AiYDegD6AvoB+gP6AAYCBgEGAwYAhgKGAYYDhgBGAkYBRgNGAMYCxgHxAAaAQEAIUAcKAcYDxgAmAiYBJgMmAKQD7N+Ht31u3f9fG/j0V+/dF7N/bsH/Lwv6dCPs3GOzfN7B/O8B+Lr/9zHv7efL2s9rt56Dbzxi3n9+9CGA/d9p+prP9vGT7WcT2c37tOYj9fFr72a/2c1XtZ5bazwO1n7VpP8fSfkak/fxF+9mG9nMD7Wfy2c+7s58lZz+nzX4Gmv18MfvZXfZzsexnTtnPc7KflWQ/h8h+xo/9/JyrAPZzX+xnqtjPK7GfBWI/Z8N+hoX9fAj72Qv2cw3sZwbY38e3v+tuf4/c/o62/f1n+7vF9vd27e/E2t83tb/LaX9P0v4Oov39Pvu7c/b30uzvfNnfp7K/q2R/D8j+jo39/ZXHAfb3LuzvNNjfF7DP4tvn3O0z5Pb5bPvss32u2D6za5+Htc+H2ucl7fOD9nk6+3yZfd7KPn9kn8exz6fY5zXs8wt2PN+Ob9vxXjv+accD7fiYHS+y4yd2PMHeX7f3m+39V3s/0t6fs/er7P0bez/DXt/b6117/Wevh+z1ge3rnGvDfnHvXNu+8mfPLpoyfXb27GnZ+aFQ9rwJs8dnT5tbNDM8eZo9Jdw7L3KuBvq1+9QJsyfkT56wIH/2hGlTs8fnzxqfHZpWNCt76rTZ2VPyZxfaE9G9MybnsiLvLJppf9zMolmzsifsu2/2+KLswmlTZ8/ML5ydHSqaPnna/CJ7orp3JhUr6+9RqRvr174zp82dMHVc9vQ5BZMnFGbPzZ88pyh7wtTCyXNm2aUI50+YXLT353L+QDcfoV8L8ydP3vtps2YVzZw9Zkr+SWMKJsweMwtKYif/FfstttOM8ZbM2G+pFPstlWO/pWbst9SO/ZZ6sd+SHfstjWK/5ejYb2kd+y0q9lv8sd+SG/stx8d+S4fYb+ka+y3dY79lQOy3DIr9ltGx3zI29lsKY7+lKPZbpsZ+y/TYb5kb+y0nxX7LybHfcmrst5wV+y1nx37LithvWRX7LRfFfsslsd9yZey3XB37LTegW1ro1777Jguh/Nn52bNnFtkThlDRSXtnO1Ob6MmOPf2YCjMZ+/03MuSxgSGPpqn782ikX7tPhTnPhJAzAZpUNH9W9vgJU2dnh6f9Mxuz39csgXuPSeDeVujeaCd6OXHc0y6Oe+bFcc+G1IPt2DF/qj3Zhfa3bxqcPX2aXRP5s8Gg4QkwO54PrTO7YP7soln2LrbnE5RHlM34s9hv+SL2W3bEfsvO2G/5LvZbfo39lt9jv+Xv2G8plxbzLemx31I+9luqxX5LjdhvOTT2W2rGfkvt2G85PPZbjor9lvqx39IY3RKtz2mJ7ql/8D1T5kyePWH65PkH36jivTEnDpZ3o3vi9Yw7Y6/Q72K/5fvYb/kx9lt+if2W32K/JSU95lvSYr+lQuy3VIr9lqqx31I99lsOj/2WI2O/pV7st2THfkuD2G9pFPstzWK/pXnst7RGt0TrcwLonpgcXNt4bzw+DpYXZey/J17P+HpGzBX6Ruy3vBX7LVtiv+Xd2G95P/ZbPo/9li9jv2Vn7Ld8F/stP8Z+y0+x37In9lv2HhmK7ZaU2G9Ji/2WjNhvyYz9lsqx31I19lsOQbdE63OOQPfE5OCOivfGhnGw7BV7ZZwY+y39Y79lYOy3fIluidfLN8iM+WMbxX7L0bHf0jT2W1rEfkur2G8JxH5LXuy3tIv9lvax39Ip9lu6xH5Ln9hv6Rf7LQNiv2VQ7LcMif2WYbHfMjr2W8bGfksI3RKt/5yM7onJWU+P98bZcbB8Hd0Tr2esVCHmCq0c+y1VY7+leuy3HBb7LbVivyU79lsaxH5Lk9hvaRb7LS1jv6V17LcEY7+lTey3HBv7Le1iv6V97LecEPstXWO/pXvst5yIbonW5wxC98Tk4IbFe+OoOFieEcc9y2K8xz7FtFm/r8gT/70T0L119GuHmTPz5+uw5bQ5s7OnhbMLps2ZGpqFb5we740L42D7sz60lYfuJcw4a07BvkNpxWZwXKysnRs7xXvjoDiK+6u+1x/rhzo3dkjgQzvH+6GD4/jQFB1APxbdG5NhnQzax8raubFrvDcOiaO4FfS9MRvWuTEewzr3xmxY58Z4DFsjUcPWiNewNeI1bI0EDFsn0eLWibe4deItbp0Eils/3nZcP4F2XD/edlw/gXbcPFHDNo/XsM3jNWzzBAzrjdew3gQM643XsN4EDNs2UcO2jdewbeM1bNsEDHtCosU9Id7inhBvcU9IoLi99b1xTxidDGKeMDo3dor3xngmjH3j7bZ9E+i2fePttn0T6LbDE23Hw+Ntx8PjbcfDE2jH+fEaNj8Bw+bHa9j8BAw7MVHDTozXsBPjNezEBAw7I9Hizoi3uDPiLe6MBIo7P952PD+Bdjw/3nY8P4F2vDRRwy6N17BL4zXs0gQMuzxewy5PwLDL4zXs8gQMuzZRw66N17Br4zXs2gQMe2mixb003uJeGm9xL02guLfpe5uje52iD5g9bWb+uKLsWZMhtmXt/QosbG1Pm1cUapWN02bBPvIsiH7Nzp85Ozs8c9qUbNUK570h1gI5N94R740Px1ETK/V5+Zh7tHNjPD3auTfmHu3cGE+P3q7vjXuR4GQQ8yLBubFTvDfGs0j4Kl7DfpWAYb+K17BfJWDY3freuH2Xk0H7WFk7N3aN98Z4fNcfiRb3j3iL+0e8xf0jgeKm6PP0Mbdj58Z42rFzb8zt2Lkxnnacpe+N27BOBu1jZe3c2DXeG+Mx7BGJFveIeIt7RLzFPSKB4n6l7417+HEyiHn4cW7sFO+N8Qw/u+PttrsT6La74+22uxPotnsSbcd74m3He+Jtx3sSaMfp6QkW18mgfaysnRu7xntjPMXN0vfG3I6dG+Npx869Mbdj58Z42nHNRA1bM17D1ozXsDUTMGzjRIvbON7iNo63uI0TKO4r+nshcQ8/TgYxDz/OjZ3ivTGe4WervjfmbuvcGE+3de6Nuds6N8bTbT/W98bdjp0M2sfK2rmxa7w3xtOOdyRa3B3xFndHvMXdkUBxd8Xbjncl0I53xduOdyXQjn9P1LC/x2vY3+M17O8JGLZC+QSL62TQPlbWzo1d470xnuL21PfG3I6dG+Npx869Mbdj58Z42nGfRA3bJ17D9onXsH0SMOxR+nshcc8rnAxinlc4N3aK98Z45hXN9L0xt2PnxnjasXNvzO3YuTGeduzT98bdjp0M2sfK2rmxa7w3xtOO2yRa3DbxFrdNvMVtk0BxO8Tbjjsk0I47xNuOOyTQjnsmatie8Rq2Z7yG7ZmAYYcnWtzh8RZ3eLzFHZ5AcTP1F2niHn6cDGIefpwbO8V7YzzDTw19b8zd1rkxnm7r3Btzt3VujKfbHqnvjbsdOxm0j5W1c2PXeG+Mpx03TLS4DeMtbsN4i9swgeIeE287PiaBdnxMvO34mATasT9Rw/rjNaw/XsP6EzBsx0SL2zHe4naMt7gd4y1uZf2mhvrVzsd5QqydcZqH7xfF0PdFefMO+vMqePb/wpgJ3ulm8rbsVWtHPXdw+DufZdvGeRKo8x77pWoEF+dKQ+9PQfY0wj3o39vFMkzkbVk5e8seUS+2Li3z4DpK1zqHi/1vbS3bvwzXKeIeg/bMrew50CbOZ+ALpzs8KnrMtd9y6HOcz3c+y2knWbqu7Gtc0eyO+rcyuk+dNTt/amFROUQtPYI6TossauR77CuV0NlXZfR+bPLUiLzsHwO0TVg+c38+nF1y7/wWNZk09FlOU0tB78nMPLBunP8boHJWQE8e2dtN9f9OvnaXztByhczi70uLuK8aek8Guq98xH3lEe+97/XsH1js+rxSyzLdf8BrsEt7Dbq5A9x/OrKNfaWitI4RbZ0aGrDr6YSGi5qe/emdM/fn7ei6EG62K+Fmu0W4WVvX3WmPqH6wndM0B/vCQ1JFz4Hlaa//txK5gv58O+9KJvK2vEE8JFVAdeD0yYpI5/gJh4v972latt2sY4eWqE7Km+FdVBnZzIM+wxNhJ+dyeFT0GGv3e4ek8hGf73wWHpKcYRyGpH0/UtApf3b+wJlFRUP2/RoBHnuc/FoinfMaWd6WEZ9lX6kRfCLTI6dbVdH/GcW8hxpqq6H3O2kGp69WNHW9d8yLeE/5CI52eZ06ykS8zbTbfW2kQhS8K0a8x7mnPOLt8K2IeFcww9v+/c9/+n1JvLMi3lMJcXN4O3yzzPP2UZwo3pUj3pNF8HbK4rw3Fb0v0j+nonvx56cSdeLcY7Ae/FQZqXqoEvGeykQ9OOWpgtIqm+GtKnsO7C/OZ3gieDpXZYKTh4+PVcFz8FKVJ29vnvND4NGW1eFREd1nwl9Vjfh857Pw3KeamTqxf1/4n7ydz68WUX673qpH6PbucmvZWe8476mG+DvvqYHuS0f/d0P3VEef57zX0XkiPgOvSU5AeThtuQrKK3J9aN/TU8vmxtB9dVs5oo4iuaSj94xF/Ppo2a7v8oiro4scr6hxr0JEXVUj8sL9H8/vHU6ZSOfUKZ6zOu0hC+kc+2N/Xj2CL16LHDAvRrLz6tQZtqnjW3EbLY/K6egc/tURJzwHq4BeDfnYHMrv4zWS85lOWTIi3uPcm47eE9avNTwHXwZ9aAj7C6dNO/yqIr3znokl8KR8DzVmRvpH5x78uZWR7NSBSZ9ZNaIOHFvhunHeM6OEOqC2LPf6JCP7VN69T49ejj77n7aFPq+08YiyG64Ppx5wP8Rlwfc578d+zHl/ZD+gfObJ+pWq23jHA7fvEZ7t2a934x7hIi1Xivj8VCIfZ62bEZFPOnrPKpT3ai3j/ZJUtMd0BZHuXCXN9dLQHk0Fg/avGGF/57PSUPmd91SMsL/z/+WoPJWKsX8FZH+n3VTKLP6+9Ij7qqH3ZJbQbioQ9l+r5YqeA/0K57wZ29puZ0O1LDQUmfv/uBcdy34znlNG7jfjvc9yyM5GyqT2rUEzTeRteRWep3o8B5bJubBfwntQJvfMitvHc/qSPX8+DNnEJuHck+3o8GYfJhu5SRoZb8YLE7woMGkEzMn5DE8ET+fCRkg1wok2QmQ9OUZIQ6RJI+BokEM2IyLzyJl2NfR+J83kAYlYIwzF7XqX4+NkFbfLbmjXUOEVajR14PCohu4ri2hAcbPmZsY/22vhnY2SdlGc9yjEr6WWq3ro0SkD3e/oIvtA5I4BjkxWiOBRLoJLDsqrn8d0Xakwrisnb1xHjr4i4lVcfTrvaaNfi9tpMBKV1XavhPjgHa2KSO+8p10JPHFeTjkjRzhcL857qOhKWgQH03WQFUUdOO/pXEodREZqUqOog5IiNbjcuC+kePbXUyX0GZF5lYvg30u/4v6COaUXkzf228XZhXGcUNj/ViQ4mxw3cV079R3Zf0vq49iXOu9xzvcWt0MVeS/2/cNQmtSVV5pB3m46BIpXWZ2IUz2dI/LDByGNHw7VKy9DJ1pinm+65UQLtfJy7sl2dNQEp5zn4BOc6RGZY8eJO7mpVU7lCE7OZ3gieDpXKsHJ4+Gd8KcTn2Vm5WnFvfwv2xWyFfcKGXPyeHgH3NQSPsvEgidywm/3k8bGP1uRC55ILniRYSF+zqCMNwHSkS4y3ILbI14YZUbci9sDvjeSl7NYqhBxv8EjluQkOXKCiCeZzqIs2kkyFZKMXExkIdnjOfAYlvNefJwJT7Lxe3GfoybO+D4sV4i4B/u1isTnlC+hLJE2xe0xw1N8/TrvcY5jFLdgNLOZQreDyAUcbgddSuAZbTuInIhHHlfDxwjxMQt8xNdDvBe3gyz0udR9WI48+ofHjcwSPqeC58DyttevViIXTOgwpxT0uZhfagR3cwvqfROuSLtGLujxTmxke8fty3mP8/W54hZPkfficWQMKnMybHXA9X8ZtsKfk47eizdxsW/m3LRIR589HHHBx0yNzGn0ws7QJlnMR1groldTG/vURlrkcTxqYefck+3ocEgNk40mpBZ5rs+0EWJZMGAjmAypVSylnqiQGmmEyBETjxJO5pkRmRe3ajEZUoslnFRWITUqVGVmNbCvDip6oq8DPGOuWEq9cK8wI0ONOGRlMExEhlYiueDQih/xc8Jr+GAyPiQcucK07xmJ7omcbeFZbWQYzdEHUV4DjNePFcb1ExlGwzMSPKMrrg6d9ziP2SluVZRlpCz7VkWRh9CdsuHZrPOeDiXwxHk55Ywc1agZtnMPXhVFzopN10GVKOrAeU+3Uuog8jB3ahR1UIWog8oRHHC7iwyjVUafEZlXuQj+zpcHcH+JXB1TeWNfjVdokbsGZdQPFbU7EdnHSuqH1O6Pc1CwuNVa5L3YJ5fm3/Aqgdo5w7smb2pZ5sovR/0/rvxsOzmru04RB1fd+uV5W9cDfbaj64kONDu6Xs7BYqQ70TkcjHS9tQ5/qacPKrPz2lfrHL+DV7zOvVno8+xnhIzPnzC1e4haD0fO0iKviJwGF82cNWHaVHxX+ShzMnikyxfvka6KHnPRHGqnMnKtgufN+EtR2P+2Z+KDxxQ8hkUu1ipGcMT34UWtIVta1DgeWW8Gvzjmra7Li/uhx3PwESBDdrJwPePjInhXHbdZznUjnmumeQ7c9MDRKec9LfQrNa6neg5egzr804h6Uzm5RfkF4aC/yFeUn2OF/FaRz+ezvF5/2BvyFgVVrj8YDoeDYRUOFBWqgsLckDcY8BUW5ucW5eXkhQxFq0Pm5shWEf7Spwd9Br5wXeGIlKkvp5e0lkhBPJz2OGvfj1T2L8r/Z4DBWWCazmtkEXGT8xAydlHYzacS7y3pwkugyOrDn+v8j11gJEfTBzYiyxTtgQ1DQZyQ1L1GgwcWCkvajsTTvchAMrU0dt6DhzrnPfg5CHjJ2V2/VvPQz+yI7MY4qGlf9iSwI8rDsR+eNlOnEHshnSHXWEhtlzlczG9f7AvcOJ+/HpXdOW2KT+TiZXFxp5nxcjOyzUROAamT74nmnYXyrhCRt8F69FKcKN6RJ/IyCd6RWyJ4ihF56hgf/IgcMyLrxLnHYD34qDJS9RD5jaHyRD3gQLnHLG8/xYniHXnoMYPg7ZQl3TzvHIoTxTsyppdO8I78Zleqhz74Gdnu8OenEnVSBu0ulyojVQ+RW8ypRD3gbRKPWd4BihPFu7hnO2HeTlmqmOcdpDhRvIt73gPmHfl8jVTPgc9UcPKKbHf481M99Ja34XaXR5WRqofinmmB68Epj/Neg7zzKU4U78hnJFUjeDtlqW6edwHFieJdI+I91QneTlmc9+LDc/j5LpHtDm+HpBJ14tyDn02E12M1UD05OudRx3g+faiW8dbrYVrGW7TOljDeyq2lZezLaiPOjq4Okp3Xw7WM++ARWsbPRHKe546fxeLkjZ+35ZS9BtI5vA5BOof/oUjnlPMwpHPqA2+FO3VZC+mcuqyNdI7tcLkdux2OdE59HIF0Tn045XYOJEfOjw2uxUJ4fhW5XsBbV857btKvxYUbI+dqkVsg1Lw2cn6D56xlcIC+EM/VSqoD5z13llAH+BlJeOvRzDOSrJCd7WPos/+pS/R5xc2NS7JJ5IF86luE1Noqch6I16OR3+6jvhm7Ub8W94wkp09gfxWZH15rczzT5ymU7zP4cyPytdPfINKdq6R9H0nP9HkdlceNz/R5Xsumn+nj2Npuu/O1LDlEnmaQt5u+WYrH/mi+WYrD4DjvrqjfO7puRMi7O/psR9cD9XdH15MIefciQt4nEiHv3kTIu09EyBuHwZ15F/7WLF6fGrJXUax79Ni3mzy6E7nnERnLsOu6npb/eVZ7z6L5szpMDfXNnzl7Qv7kDqHQzIgntkeu/KOJ5mB9KqGzL7w6x7USzUnryN1qgxEZi5p9RNYsNWuM3Dmivg5oMpJEcaJ4FzeTxbzxj/YY5k3uGlO8iztggXlHPn0X7xpHfu0j1XNwwNu5J7JO8C6KoXrwUWWk6qG4rz3geoic9Rrk7ac4UbwjDxpWJHhHfs3SIO8cihPFu7hfBMC8I6MMeBeFilakRpTTuSeyTsqg3eVSZaTqoXLEe7I8B9cDHvE9ZnmTu8YU7+J2jTFv6hcBDPEmd40p3sXtGmPese4aR+6OO/dE1kkZtDty15iqh+J2jXE9ULvGhniTu8YU7+J2jTFvatfYEG9y15jiXdyuMeZN7RpH/joB1e7w56cSdVIG7a6QKiNVD4dEvKeG5+B6cMqDd3DxrzY4Oicdr7qcHV686nJWeXjV5ezw4lWXs8OLV13ODi/2wc4OL1514R1e59XZ4cW+40hUTkdXV8t4t9tZYeDdbqeO8G63U8e4rpw6wrvdTh3hFa9TR3i326kjvNvt1BHe7XbqCO92O3WE68KpI7zb7dTRkUjn1FFdpHPqyKkLO/9mWhb61fOQwd3rPJOHivHuCl6/2JfdLp0di54Ru2zUzgtut53Q7oeRnYagP8dgnecYPDGYi/ueB30GvtKQ7JaviOPIB/bXJf16oGMf+xX7lMjTc9iX9UDtyfFlPVF+jdA9vSJ29w5BunLoM9z+KwoNPfv1bvwVBcf3V/LQ+yKRj3KzxwdnjJs6bfaE8PyOM4vyZxeFek+bXYQbO27Q+Io8IoQ/zBNBAr8Xb0aVJ9LxVa6Uz8Xvc5wePlrm8RzoCPG39bzofQIHtLz/x2/URTtoZXoOnPBxfmsOfysNh/8N1UcOdrYe9Bn4woMNfnCtIfsratOYciDOZBW242EjfnD+5Amh/NkTpk3tXzRjTtGs2XivnfoirvNaXHFTkC61lHR84VPIkVWE84jMBz8GDZveUNTDiqaaS9qbT0PljXzcnukvWpePgndxe/OYN7U3b4i3N5pxsaS9ecw71r35tIhyOvdE1gneMzBUD+TePFUPxc03cT1E7s1X9hy8h4/XrdjVO+tWvGcQefIdDwl4SE8jPtcpA94ziDy5XMlz4LcwBA79fpPxQpP+Dg/9kbHTTM+BNu9IrBs6RqwbbDs6+xcwBPXPnxqaNqXLhKLJoWgiuJEXblW45VKPYyjSzUZkC8oP5hib0Hj93siH0plqQQ5/HN100jpGrCaLe1RDik5zJnydiTRnItmFSHMmlF2JNGdi2Y1Ic86jdCfSnNV1DyKN2u1x0pxVdS8izTmvciKR5pxb6U2kOedX+hBpzjmWvkRaP63rR6T117r+RNoArRtApA3UuoFE2iCtG0SkDda6wUTaEK0bQqQN1bqhRNowrRtGpA3XuuFE2gitG0GkjdS6kUTaKK0bRaSN1rrRRNoYrRtDpI3VurFEWr7W5RNpBVpXQKQVal0hkRbSuhCRVqR1RURaWOvCRNo4rRtHpI3XuvFE2gStm0CkTdS6iUTaJK2bRKRN1rrJRNoUrZtCpE3VuqlE2jStm0akTde66UTaDK2bQaTN1LqZRNosrZtFpM3WutlE2hytm0OkzdW6uUTaPK2bR6SdpHUnEWnztW4+kbZA6xYQaQu1biGRdrLWnUyknaJ1pxBpp2rdqUTaaVp3GpG2SOsWEWmLtW4xkbZE65YQaUu1bimRdrrWnU6knaF1ZxBpZ2rdmUTaWVp3FpG2TOuWEWlna93ZRNpyrVtOpJ2jdecQaSu0bgWRtlLrVhJpq7RuFZF2rtadS6St1rrVRNp5WncekbZG69YQaWu1bi2Rdr7WnU+kXaB1FxBpF2rdhUTaRVp3EZF2sdZdTKRdonWXEGmXat2lRNplWncZkXa51l1OpK3TunVE2hVadwWRdqXWXUmkXaV1VxFpV2vd1UTaNVp3DZF2rdZdS6Rdp3XXEWnrtW49kXa91l1PpN2gdTcQaTdq3Y1E2gat20Ck3aR1NxFpN2vdzUTaLVp3C5F2q9bdSqTdpnW3EWm3a93tRNodWncHkXan1t1JpN2ldXcRaXdr3d1E2j1adw+Rdq/W3Uuk3ad19xFp92vd/UTaA1r3AJH2oNY9SKQ9pHUPEWkPa93DRNpGrdtIpD2idY8QaY9q3aNE2mNa9xiR9rjWPU6kPaF1TxBpT2rdk0TaU1r3FJH2tNY9TaQ9o3XPEGnPat2zRNpzWvcckfa81j1PpL2gdS8QaS9q3YtE2kta9xKR9rLWvUykbdK6TUTaK1r3CpH2qta9SqS9pnWvEWmva93rRNpmrdtMpL2hdW8QaW9q3ZtE2lta9xaR9rbWvU2kbdG6LUTaVq3bSqS9o3XvEGnbtG4bkfau1r1LpL2nde8Rae9r3ftE2gda9wGR9qHWfUikbde67UTaR1r3EZH2sdZ9TKR9onWfEGmfat2nRNpnWvcZkfa51n1OpH2hdV8QaV9q3ZdE2g6t20GkfaV1XxFpX2vd10TaN1r3DZG2U+t2Emnfat23RNp3WvcdkbZL63YRad9r3fdE2g9a9wOR9qPW/Uik7da63UTaT1r3E5H2s9b9TKT9onW/EGm/at2vRNpvWvcbkfa71v1OpP2hdX8QaX9q3Z9E2l9a9xeRtkfr9hBpf2vd30TaAc/NjEgr5+iItBStSyHSUrUulUhL07o0Ii1d69KJtAytyyDSymtdeSItU+syibQKWleBSKuodRWJtEpaV4lIy9K6LCKtstZVJtKqaF0VIq2q1lUl0qppXTUirbrWVSfSamhdDSLtEK07hEg7VOsOJdIO07rDiLSaWleTSKuldbWItNpaV5tIq6N1dYi0w7XucCLtCK07gkg7UuuOJNLqal1dIq2e1tUj0o7SuqOItGytyybS6mtdfSKtgdY1INIaal1DIq2R1jUi0hprXWMi7WitO5pIa6J1TYi0plrXlEhrpnXNiLRjtO4YIq251jUn0lpoXQsiraXWtSTSWmldKyKttda1JtIsrbOINCd4pog0r9Z5iTSf1vmINL/W+Ym0HK3LIdJytS6XSAtoXYBIC2pdkEjL07o8Iq2N1rUh0tpqXVsi7VitO5ZIO07rjiPS2mldOyLteK07nkhrr3XtibQOWteBSDtB604g0jpqXUcirZPWdSLSOmtdZyKti9Z1IdK6al1XIq2b1nUj0rprXXcirYfW9SDSempdTyKtl9b1ItJO1LoTibTeWtebSOujdX2ItL5a15dI66d1/Yi0/lrXn0gboHUDiLSBWjeQSBukdYOItMFaN5hIG6J1Q4i0oVo3lEgbpnXDiLThWjecSBuhdSOItJFaN5JIG6V1o4i00Vo3mkgbo3VjiLSxWjeWSMvXunwirUDrCoi0Qq0rJNJCWhci0oq0rohIC2tdmEgbp3XjiLTxWjeeSJugdROItIlaN5FIm6R1k4i0yVo3mUibonVTiLSpWjeVSJumddOItOlaN51Im6F1M4i0mVo3k0ibpXWziLTZWjebSJujdXOItLlaN5dIm6d184i0k7TuJCJtvtbNJ9IWaN0CIm2h1i0k0k7WupOJtFO07hQi7VStO5VIO03rTiPSFmndIiJtsdYtJtKWaN0SIm2p1i0l0k7XutOJtDO07gwi7UytO5NIO0vrziLSlmndMiLtbK07m0hbrnXLibRztO4cIm2F1q0g0lZq3UoibZXWrSLSztW6c4m01Vq3mkg7T+vOI9LWaN0aIm2t1q0l0s7XuvOJtAu07gIi7UKtu5BIu0jrLiLSLta6i4m0S7TuEiLtUq27lEi7TOsuI9Iu17rLibR1WreOSLtC664g0q7UuiuJtKu07ioi7Wqtu5pIu0brriHSrtW6a4m067TuOiJtvdatJ9Ku17rribQbtO4GIu1GrbuRSNugdRuItJu07iYi7Watu5lIu0XrbiHSbtW6W4m027TuNiLtdq27nUi7Q+vuINLu1Lo7ibS7tO4uIu1urbubSLtH6+4h0u7VunuJtPu07j4i7X6tu59Ie0DrHiDSHtS6B4m0h7TuISLtYa17mEjbqHUbibRHtO4RIu1RrXuUSHtM6x4j0h7XuseJtCe07gki7Umte5JIe0rrniLSnta6p4m0Z7TuGSLtWa17lkh7TuueI9Ke17rnibQXtO4FIu1FrXuRSHtJ614i0l7WupeJtE1at4lIe0XrXiHSXtW6V4m017TuNSLtda17nUjbrHWbibQ3tO4NIu1NrXuTSHtL694i0t7WureJtC1at4VI26p1W4m0d7TuHSJtm9ZtI9Le1bp3ibT3tO49Iu19rXufSPtA6z4g0j7Uug+JtO1at51I+0jrPiLSPta6j4m0T7TuEyLtU637lEj7TOs+I9I+17rPibQvtO4LIu1LrfuSSNuhdTuItK+07isi7Wut+5pI+0brviHSdmrdTiLtW637lkj7Tuu+I9J2ad0uIu17rfueSPtB634g0n7Uuh+JtN1at5tI+0nrfiLSfta6n4m0X7TuFyLtV637lUj7Tet+I9J+17rfibQ/tO4PIu1PrfuTSPtL6/4i0vZo3R4i7W+t+5tIO+CxARFp5RwdkZaidSlEWqrWpRJpaVqXRqSla106kZahdRlEWnmtK0+kZWpdJpFWQesqEGkVta4ikVZJ6yoRaVlal0WkVda6ykRaFa2rQqRV1bqqRFo1ratGpFXXuupEWg2tq0GkHaJ1hxBph2rdoUTaYVp3GJFWU+tqEmm1tK4WkVZb62oTaXW0rg6RdrjWHU6kHaF1RxBpR2rdkURaXa2rS6TV07p6RNpRWncUkZatddlEWn2tq0+kNdC6BkRaQ61rSKQ10rpGRFpjrWtMpB2tdUcTaU20rgmR1lTrmhJpzbSuGZF2jNYdQ6Q117rmRFoLrWtBpLXUupZEWiuta0Wktda61kSapXUWkaa0ThFpXq3zEmk+rfMRaX6t8xNpOVqXQ6Tlal0ukRbQugCRFtS6IJGWp3V5RFobrWtDpLXVurZE2rFadyyRdpzWHUektdO6dkTa8Vp3PJHWXuvaE2kdtK4DkXaC1p1ApHXUuo5EWiet60Skdda6zkRaF63rQqR11bquRFo3retGpHXXuu5EWg+t60Gk9dS6nkRaL63rRaSdqHUnEmm9ta43kdZH6/oQaX21ri+R1k/r+hFp/bWuP5E2QOsGEGkDtW4gkTZI6wYRaYO1bjCRNkTrhhBpQ7VuKJE2TOuGEWnDtW44kTZC60YQaSO1biSRNkrrRhFpo7VuNJE2RuvGEGljtW4skZavdflEWoHWFRBphVpXSKSFtC5EpBVpXRGRFta6MJE2TuvGEWnjtW48kTZB6yYQaRO1biKRNknrJhFpk7VuMpE2ReumEGlTtW4qkTZN66YRadO1bjqRNkPrZhBpM7VuJpE2S+tmEWmztW42kTZH6+YQaXO1bi6RNk/r5hFpJ2ndSUTafK2bT6Qt0LoFRNpCrVtIpJ2sdScTaado3SlE2qladyqRdprWnUakLdK6RUTaYq1bTKQt0bolRNpSrVtKpJ2udaejtOKeFFjBY+gpEPrpFYaePbD3KFimmbwVftqdB30GvvAThhweFT3Gnoew90k8mRGfH/nbQvipgPhhWM7T5zKRznkiHn4qz5AUdI/WU7/947Qr+54CfY/91I4ztN65bBu5/Wl/+Sn79W582t9Q/Y/ztL/SfuHBflKK81TaoikTZneeWjhz/nT9tL9e08Z5Iq5UQsaf0z5lf3o6cY9j13KeA/uI44/w/c577bLobbK9r4dGpLfX/1uJXXuPhB5mJm8L+weH/2GoTKjYbJ+J6x4/SC4F6Zz0TMSlHD8XhbLc+5mR/hE/hbocwakiSuN+oGElM3kfYHOHfyXCDmlE2bGcgt5LpVO6ysTnHELo/gfFfG8IpoYMAA==","debug_symbols":"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","brillig_names":["get_contract_instance_internal","get_public_data_witness","lt_32_hint","decompose_hint","lte_16_hint","key_registry_get_stored_keys_hint","get_public_keys_and_partial_address","notify_created_note","get_key_validation_request","unsafe_rand","emit_encrypted_note_log","directive_invert","directive_integer_quotient"]},{"name":"compute_note_hash_and_optionally_a_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{},"parameters":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"},{"name":"storage_slot","type":{"kind":"field"},"visibility":"private"},{"name":"note_type_id","type":{"kind":"field"},"visibility":"private"},{"name":"compute_nullifier","type":{"kind":"boolean"},"visibility":"private"},{"name":"serialized_note","type":{"kind":"array","length":5,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"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","debug_symbols":"7Z3bjuzKcW3/ZT3rIS+RN//KwYEh2bKxAWHLkOQDHAj+d1d3LbKqm5fsxkpWRGTMF6PlzVUdMWYXc84gmfznj3//85/++z//9bff/+Ovf//xL//nnz/+8td/++M/fvvr77f/9c//+cOPP/3tt7/85bf//Nfn//cP9/Z/KL4f//f/+uPvb//z7//449/+8eNfkit/+PHn3//99lNtt3//H7/95c8//iXefv6/f/hB9O1/ktzeP6lUf/6TmuLmn/jv/5Pw7X+S694/ya79/Cel+Q//5A/bY33yPw/Ovj1+gY9x52jyKf08mnx5HB3yezVNUjXFiarGi6omiKomiqqGRFWTRFWTRVVTRFUj6lxcRJ2Lq6hzcRV1Lq6izsVV1Lm4ijoXV1Hn4irqXFxFnYurqHNxFXUubi/+hqeym6x8eC+GJBXz4r+a7NxysMubYpqgYrxzoqrxoqoZsIDHp2qoU41vJf48+vbj4+jY3L2eKKweElZPElZPFlZPEVZPFVZPk1WPd8Lq8cLqEXZ+9sLOz17Y+dkLOz97YednL+z87IWdn72w83MQdn4OLz4/B+fDz6NvP8ZtPUFYPVFYPSSsniSsniysniKsniqsniarnuiE1SPs/ByFnZ+jsPNzFHZ+jsLOz1HY+TkKOz9HYefn+PLz8zqLDS63TT3khNXjhdUTGOup/kM926Njo6WQ2HJaj75djNq5chXzeuUq1s9XrjxFM52SmU6TmU6zmU6LmU6rmU6blU6TM9OpN9OpGY+UBHmk93pIWD2C/MZ7Pa9eQbxb/nxuP5ZtPU1WPfnV39zb9Yi1npC39bz6++WLW+updVsPCasnCasn89UTnHvhmT8XM51WM502K50WZ6ZTb6bTYKbTaKZTMtNpMtMpp0fyYePZShFWTxVWz8tdQX5korzNaNUJq8cLqycIqycKq4eE1ZOE1ZOF1fPq83OgdUYU8vaOhVqF1dNk1dOcsHo8Yz0lvdBZtWCm02imUzLTaTLTaTbTaTHTaTXTaTPSaXDOTKeCPNJ7PYKczHs9gvzGez0vX0Ha8tEhOr+t59XnhOjzWk9wm3pe/ZR6iJnWemrY1uOF1ROE1ROF1UOM9TR64Zn/1c+/M3aazXRazHRazXTarHQanJlOvZlOg5lOo5lOia9Tcpt7ZUNIwurJwup5uStIj4yWt5nx5TtF9Oppsup5+U4RvXq8sHqCsHqisHpIWD1JWD1ZWD3Czs9R2Pk5Cjs/k7DzMwk7P798pwh61EPbnejCy/dz6NVDwupJwuq59Pz8/hvK5b+hXv4b2tW/4don1N9/g7/8N4TLf0O8/DfQ5b8hXf4bLv9Op8u/0+ny73S6/DudL/9O58u/0/ny73S+/DudL/9O58u/0/ny73S+/DudL/9O58u/0+Xy73S5/DtdLv9OD3h2Mjxe0HK7fN5xueevRwoDHnAcWk6SVU6WVU6RVU6VVU4TVc6AxwSHluNllRNklSPrrFxlnZWrrLNylXVWrrLOylXWWbnKOis3WWflJuusPOABvhjqUk5MtVOOD8sdAz5tHpwMAx6yG1kNiaomiaomv7aa8LiLyH3cBG3nT9759U/ePX1y2CujrHcclbcyl0PT7ldpKZiiPz80uvUdRbd62/O37vtf0QLUr0JdgfpVqBtQvwZ1HPBQIVB/EbUH6lehDkC9HvoOJALIRyAEIB+BJINA8nJxhnLYALGYYk6BWMwap0AsJoJTIBZ9e1sGbtQ2J1Vv0V2fArHogU+BWHSqp0AMOtW0fmzyeQOEAOQjEINO9RyIQad6DsSgUz0FEgz6kBSXa1QpboEY9CHnQAyeVDOVpeDsNkAMnlTPgUg+qXryj3FwewbyXrrkoN4pXXKk9jGdlB4lLzrel7X06jalS14eOqVLDpSd0l8c/WKl9SyaO6X7uJZ++3Hzqr04YHsDvtqT4tqz4tqL5NrpUTvt1F4V19701k5Oce1ecu2lrbVXt609KK5d9LraqV30utqpXfL5ndxyt83tx7StXfL5vVN7knyeybRc/PA5bf9mkuTzTK92yeeZXu2SzzMfam/b2iX791yX16n5st2qPybJ/r1Xu+Tze6/2V5/f0zrlKq1TeyrLTkyZHlV42n0S5fGAvfc1fR4ppGaizexstOlttBlstBlttEk22kw22sw22iw22rThgrINF1RsuKBiwwUVGy6o2HBBA3YWU9GmDRdUbLigYsMFFRsuqNhwQdWGC6o2XFC14YKqDRc0YCc/FW1O44LacoOrDy5u2pzGBZ23OY0LOm9zGhf03GbdtDmLCwp+vQkkBP+5zTaLC+q0OYsL6rQ5iwv60GbetDmNC2r0aLNs2pxl3YxxOdhHok2bs6ybnTZnWTc7bc6ybkZ63LSaPn83yc2ybnbanGXdPG/z1fvPJL/uPv3pvtwdJN4tfUafnvYSonvpXm/pQW/pUW/ppLf0pLf0rLf0orf0qrf0prb0oHc1DXpX06B3NQ16V9OgdzUNelfToHc1DXpX06B3NQ16V9OodzWNelfTqHc1jXpX01fvDjOydL2radS7mka9q2nUu5pGvasp6V1NSe9qSnpXU9K7mr56T5iRpYteTdctA6JveVO66NX0vHTRq+l56ZJX0+CWq5rx+WWzS+mSV9Pz0pPk1bRTuuTVNES3lv58i8XP0iWvpp3SJa+mndIlr6bPpW9X0yR5Ne2ULnk17ZT+4tU0++WT86eXTW+P9Y+d0b2jD6vp9uBb3lu3I6adL0Y10mez0eerN0li69Mb6TMY6TMa6ZOM9JmM9Jln6fNmBdY+y8YP5Wn8UKfPafxQp88BfqgtET3fflmnT98e2xm38hToc9vvdHXnt5+L+3D8W/0jtkFird8rrz8orz8qr5+U15+U15+V11+U11+V1698/a3K198qff1dn4+7/Vxb7/ibeVwOz+XJR97NXpW+WA9tVvrKPrRZstSsdM8wtFnpBmNos9LdyNBmpVuXoc1K9zkjm23STdHQZi05qGbJQTVLDqqRpWYtOahmyUE1Sw6qWXJQzZCDSs6Qg0rOkINKzpCDSs6Qg0qOLDVryEElZ8hBJWfIQSVnyEElZ8lBeUsOasR2eFc2G56uQgYKH45/r1/4OSe0R/3R0S8d/96v8NPON/sttO4AXXLY/HEKP+0MbTYIP+2MbVa4vf9mszUtdzj7WvJzs9uDa1g+ugbacBHuFy/k8nauf3x23pCZ60T/LTLerZ/tqW3IzLUkjCQz1/oxkEyca7EZSUb4SJGRjPD5IyMZu26mR4ZA5oCM8DEoIxnDHrhDBh74iAw88BEZeOADMgQPfETGigd+b9aKrX1vdi6n2try6cG5bbNkqdm5/GSn2bksYqfZuVxfp9m5jFyn2V/3ZlSWyyw5PW1osd9scGWpPgTfvxjZeQQ0Ddj/krd+r7z+oLz+qLx+Ul5/Ul5/Vl5/UV5/VV6/8vU3K19/s/T1d+Sddln6Yj20Wekr+9BmyVKz0j3D0GalG4yhzUp3I0OblW5dhjYr3eeMbLZIN0VDm7XkoIolB1UsOagBe3EqataSgyqWHFSx5KCKJQdVLDmoaslBVUsOqlpyUNWSgxqwjamiZi05qGrJQVVLDqpaclDVkoNqwpee3q4KTfg5Z/SuCk34aWfos/dN+GlnbLPCTzsjm81OuL1n2lUhO+F+kW1XhezmOtGPewYmu7mWhJFk5lo/RpKZa7EZSMYLHykykhE+f2QkY9fN9MhIj5d8ZAhkDsgY9sAdMvDAR2TggY/IwAMfkYEHPiATrHjg92at2Nr3ZudyqqcPLecwl/nsNEuWmp3LInaancv1dZqdy8idNxsvPRu//4Z4+W+gy39Duvw35Mt/Q7n8N9TLf8Ov++XbVZzlN2Si3lezUV2+PK0+3bnQ3M7Rqfj08+hUUnczFff4HvvgekeH9Vpm+ljHG5cBu7PNycWDyy6XAC67XKJVLoGWHqOrnTrIrXWQS4+jwx6Qkpdjy/ONYmnvc/0Cg6I/PzS6Eh/1Pt+Atvu5aa3XP91/djv4XXSC6PZETxDdnugZotsTvUB0e6JXiG5PdLPTAdGiv0mTzA4o5EtjdkYiXxqzYxoR0uRla2x6enpkkQaTIrHSEKSRKg2mLmKlwWyEU5q1YGpbG4AJhlhpMGcQKw2mAVKlyZgGMEqTHu35vJEG0wCx0mAaIFYaTAPESoNcwylNXG63SnErDRwaozS3C+MrOvdZmgKHJlYaOLSvSONpHXb50p6leYcIL/UliDGdQYTr+RJEX1aI1W0gEiD+OkRcVxgA0axTjpXWZTx36vBxhXj78SPyd4pmh/VDKZqdqw+laDZgjaRYzWah71GkB0XaoWg2tgylaDa3DKVoNrgMpUig+BWKpa0Un0z3StFsdBlKEdllBEVklwEUG/ziVyiSW/davw3PtxSxRn+FYqb1k3Pa+VvEGj2CItboERSxRn+bYttSxBr9JYo1rBRb2FLEfHEERcwXf51icfCL36RYnN9SxHxxBEXMF0dQtJtd0nrXTWndOtYW6cHD024VtyszaxX1UfP90nVxBOCvBW43ETEBtxuemIDbzVlMwO1GMibgdtMbD3BvN+gxAbebCZmA242PTMCRNF8MnAD8tcCRNF8MHEnzxcCRNF8MHEnzxcCRNF8LPCBpvhg4kuaLgSNpvhg4kuaLgROAvxY4kuaLgSNpvhg4kuaLgSNpvhg4kuZw4G2p+VZE/Aw8Imm+GDiS5ouBI2leCrxugCNpjgYe/PqsZQh+A5wA/LXAkTRfDBxJ81LgeQMcSXP8okkP4OUzcIIPHw08xuVgH594LMDhw18MHD78xcDhw4cDp8fOMWl7DicAfy1w+PDXArf7as7kl4Pzp82OdsTxa4/Rp6c3NdIdotm/2pEQzSbCkRDNpryREM1eIxwJ0ex1v4EQ7b6WcSREs3OBkRDNZv2REM3m95EQCRB/HSISywCISCwDICKxDICIxDIAIhLLr0O0+5rSkRCRWAZARGIZABGJZQBEAsRfh4jEMgAiEssAiEgsAyAisQyAiMTy6xDtvkx0JEQklgEQkVgGQERiGQCRAPHXISKxDICIxDIAIhLLlyCu75CJvuUNRCSWARCRWH4dot3X2X4LYnDLHfUx+LSBiMQyACISywCISCxfghjdCvH50bifEAkQfx0iEssAiEgs34W4TSx236k8EiISywCIZhNL9kuPOfXq8G6twzv6kFi2B1Ns5efBRJsTaLX79mU24mazEBtxs8GJjbjZlMVGnED8xcTN5jc24mbDHhtxs8mQjbjZGHkdcUp1JV7Chjgy54uJ230RNBvxmTLnY4TkA4UPR7/3OlPa6/U6kwcNdd3hNT5tqXtwdHPrBrytPF3my23/u/QA6XxxH45/JzmTt+QlOZNn5CU5kxfkJTmTx2MlOdWrVXlJTuXJWElO5fhYSc40t+clSSA5iCQyziiSyDijSCLjfJXkunv67efaesffxmLL4bk89XkfY031PlFF2JGeOLBP9W5RRdiRy1iwI8SxYEfiY8FOwM6BHVmSBTuCJwt2pFQW7EipLNiRUjmwT/XmXUXYkVJZsCOlsmBHSmXBTsDOgR0plQU7UioLdqRUFuxIqSzYkVI5sCekVBbsSKks2JFSWbAjpbJgJ2DnwA4D+UXsTw9xuuenOJe7Sad6Z/q1JB8PW7vo6JeOfyePhfIa8oXWWkoOn08dU72aXRF2LJQs2DHgugZ7TctOOr6W/Ix9e3ANy0fXQJ8Vmuo9yloVevNJj8/OG41gkgRo5N1jtxtqG41gp+RrBO8lXyOCRuI1wkV6+Rrhir58jZCO5GuEUa98jXBjgXiNpnr7+awaYc4gXyPMGeRrhDmDfI0IGonXCHOGV2v0jh2jAxbsmAZcg7215dODc1vsCPgs2JHZObA3xHAW7EjWLNgRllmww7fzZ6vTu76mene8VoVafbzkym0lgkESLlGb6gXik0oE48Uv0fntrW2qd5TPqhEuacjXiKCReI0QjeRrhHAkXyNcLJGvEa6syNcIUwYJGtHjs59fjn7XaKp3xs+qEeYM8jXCnEG+RpgzyNeIoJF4jTBnkK8R5gzC8tGORpgziM+wHnMG+RphziBeo4A5g3yNMGeQrxHmDPI1wpxBvkYEjcRrhDmDfI0wZ5CvEeYM8jXCnEG8RhEZVr5GyLDyNUKGla8RMqx8jeC9v6pRXqG78EQ93N9X0yIc8iiS8LGjSOKq1iCSBN8+iiTc9SiS8MCjSMKpjiJJIDmIJK5cjCKJjDOKJDLOKJLIOKNIIuMMIpmQcUaRRMYZRRIZ56skH2+Ev1HNveNPdzZvCYHoGuzBr7WEGDbYCdg5sCNqsWBHLmPBjhB3EXbKK/a8WVIz3PU12Kn65XCqm7/2DCvOgh2+nQU7fPs12LNba8nRb7ATsHNgh29nwQ7fzoIdvp0FO67UsGDHZR0O7AUplQU7UioLdqRUFuxIqSzYCdivwf44PJe4wY6UyoIdKZUFO1IqC3akVBbsSKkc2CsM5DXY4/reXE/+w9Wl7cFnL3BtFasvv0KdZ78rlmr5GmFdF6DR+c2yFSZAvEYNc235GmEILl8jTMzla4R0JF8jgkbiNcLgXr5GmDPI1whzBvkaYc4gXyPMGaRrdPuPGDQoEAmTBgUiYdSgQCTMGhSIRBBJvkiYNlwjEoW6ikR+yx0TBB7umArwcEfS5+GO9M7C3SOQ83BHxubhjth8EfeznVdu3JGEebgTuLNwR24awP2OElFoGEqkm2EoEVhGoQzwZD/YB7Bnzyu9PYUBidglajWtH+12NILlkK8RvIx8jWCS+DU6f/Dv9l9hv+SLFDFcViASJtEKREJEUiASQpICkQgiyRcJd3spEAnzBgki0XrfpEtxKxIGDgpEwsRBgUiYOMgXiTBxUCASJg4KRMLEQYFImDgIy0l7IhFEEh9mCRMHBSJh4qBAJEwcFIiEiYMCkTBxkC9SwsRBgUiYOCgQCRMHBSJh4qBAJIJI8kXCxEGBSAizCkRCmFUgEsKsfJEywqwCkYQbh7xsjJBqjD3s2a/bKGRyH46+Nyt85D+2WeHnyO80G25fo+WzQ+lW4opbj/bU/fr5+Lgu7ov7cPw7yiL8TKYJpfDhmSaUwkdcmlAKH0RpQklAOQrlRN6MG+VEzo8bpfApliaUwmdNmlAi7YxCWZF2hqFE2vkqypIfKN9InB+fHxOzXOJmqlURjXi4I0fxcCdwZ+GOhMbDHXGOhzuyHw93BEUe7kiVLNwbIigPd+RVHu7IqzzckVd5uBO4s3BHXuXhjrzKwx15lYc78ioPd+RVDu7eIa/ycEde5eGOvMrDHXmVhzuBOwt35FUe7sirPNyRV3m4I6+ycPfwkV/kHp5uNQ0UPhx/R4ml8qso2wNldL92/B09Vstr0BdaH7ovOWzPHlgtebhjtWThHjDtuoZ7TUstvpYPe2RsDz59tbkPBInYJerseeIDrJIAkW4XTZaDPbWtSDBVCkSCA1MgEuyaApFw5V6+SNJfQQ+R3kRCSlIgEga/CkTC3QYKRCKIJF8kTBwUiISJgwKRMHFQIBImDgpEwsTh1SK9c5f+VvlpuWMucA33tr6OIDi3wx1Rn4c70jsPdwJ3Fu7I2DzcEZt5uMO/84es87vBpL/O2YRErab1o92ORrBJ8jUiaCReI9gvATO/zp2vCV5NgUi4xKFAJFziUCASIpJ8kaS/JhgivYmEiycKRMKVFgUiYd4gQSR6fHaKW5EIIskXCRMHBSJh4qBAJEwcFIiEiYMCkTBxkC9SwcRBWE7aEwkTB/lhtmDioEAkTBwUiEQQSb5ImDgoEAkTBwUiYeKgQCRMHBSIhImDfJEqJg4KRMLEQYFImDgoEIkgknyREGYViIQwq0AkhFn5IjVY8K+KlFfqLjxhD8v7bhqM8jCUsLPDUOIy1zCUBJSjUMJlD0MJLzwMJRzrMJS4SDIMJS5lDEIZHNLOMJRIO8NQIu0MQ4m0MwwlAeUolEg7w1Ai7XwV5eMd8zesuXf8+bbot18O7pdwv33kcniIYcsdOYqHO0IXC3ePhMbDHXHuIu6UV+55u656AvdLuFNdKr/9uPP3DkvOwx3+nYc7/Ps13LNb19Uc/ZY7/DsPd/h3Fu4B/p2HO/w7D3dcu+Hhjgs9PNwJ3Fm4I6/ycEde5eGOvMrDHXn1Iu6Pw3OJW+7IqyzcI/IqD3fkVR7uyKs83JFXebjDR17DPa6v4fXkP1xv2h58+jrYQFiC+SXqPCceCOu1ApGwuAsQqXMnLcEJKBCJIJJ8kTATVyASBugKREJKUiASRvMKRMIcX75ICRMHBSJh4qBAJEwcFIiEiYMCkQgiyRcJEwcFImHioEAkTBwUiISJgwKRMHG4RiQKdRWJtnfKZgwReLhjLsDDHVGfhzvSOw93AncW7sjYPNwRmy/ifr4zS0YS5uGOcMvCvSA3DeB+R4koNAwl0s0wlAgsw1DCk/EPYM+fXiqwb/wStZrWj3ZbjfCeeQUawcvI1wgmiV+j3kOAFfZLgUgEkeSLhEm0ApEQkRSIhJCkQCQMxBWIhLu95IvUMG+QIBKt9026FLciYeCgQCRMHBSIhImDApEIIskXCRMHBSJh4qBAJEwchOWkPZEwcVAQZjFxEC9SdJg4KBAJEwcFImHioEAkTBwUiEQQSb5ImDgoEAkTBwUiYeKgQCRMHBSIhImDfJE8wqwCkRBmFYiEMKtAJIJI8kWayIL7nB4vai7+w9HvzYaJRv6+1lXY9rTH4cHRzT2OLqn7F3lzlOtfjS/uw/F3lBN5GW6UEzkObpQT+QJulBOt3twoJxoYc6OcaKzLjXIm58eMcqIRKTfKiQaZzCgj0s4wlEg7w1Ai7XwVZckPlLX1js+PIVIucTPoiYhGPNwJ3Fm4I3TxcEdC4+GOOMfDHdmPhzuCIgt3Qqrk4Y4IysMdeZWHO/IqD3cCdxbuyKs83JFXebgjr/JwR17l4Y68ysI9Ia/ycEde5eGOvMrDHXmVhzuBOwt35FUe7sirPNyRV3m4I6/ycEdeZeGe4SO/yD083WoaKHw4/o4SS+VXUbYHyujol46/o8dqeQ36QusjziWH7dkDqyUPd6yWLNxnege9KO41Lftd+Fo+bBuxPfj0bd+xYFDAL1FvG5ACqyRAJO/Wz/ZPha8iwVQpEAkOTIFIsGvyRaq4cq9AJFzmVyASUpICkTD4VSASQST5ImHioEAkTBwUiISJgwKRMHFQIBImDvJFapg4vFqkO3cMEXi4Yy5wDfe27tAfnNvhjqjPw53AnYU7AjkPd2RsHu6IzTzcZ0rCLT96ja5XyTffONTdprfNlFdZUZKbKVUyo5wpKDKjnCn7MaOcKc4xoySgHIVyptDFjHKmHMWMcqZoxIwSaWcYSqSdUSg90s5XUY58bpxmerm8Ku7IUTzcEbp4uBO4s3BHnOPhjuzHwx1BkYc7UiUPd0RQFu4BeZWHO/IqD3fkVR7uyKs83AncWbgjr/JwR17l4Y68ysMdeZWHO/IqC/eIvMrDHXmVhzvyKg935FUe7gTuLNyRV3m4I6/ycEdeZeFO8JFf5N57vwtN9ar6a1EOfr8LTfW2eknoz993QVO9rV4Td6yWLNynenu3JO7D3u9CU734WKtEnfe70FRvSVYr0vn2gzTVK5WnFQkOTIFIsGsKRMKVewUi4TK/fJEyUpICkTD4VSAS7jZQIBImDgpEIogkXyRMHBSIhImDApEwcVAgEiYOrxbpzh1DBBbuBXOBa7if70NPBVGfhzvSOw93BHIe7gTuLNwRm3m4w7/zh6zzu8EKrD6/RK2m9aPdVqMKmyRfI1gq+RoRNBJ/52uFV1MgEi5xKBAJlzgUiISIpEAkhCT5IjVcPFEgEq60KBAJ8wYJItHjs1PcioSBgwKRCCLJFwkTBwUiYeKgQCRMHBSIhImDApEwcRCWk7YiJYeJg/gwmxwmDgpEwsRBgUiYOCgQiSCSfJEwcVAgEiYOCkTCxEGBSJg4KBAJEwf5InlMHBSIhImDApEQZhWIRBBJvkgIswpEQphVIBIs+FdFyit1F56wh5/vu0kBRnkYStjZYShxmWsYSvj3YSgJKEehhBcehhKOdRhKXCQZhhKXMoahRNoZhTIi7QxDibQzDCXSzjCUSDvDUBJQjkKJtPNVlI93zN+w5t7x59uip4hodA3320cuh4cYttyRo3i4I3TxcEdCY+FOiHMXcae8cs/bdZXgsq/hTnWp/G0z2y13AncW7vDvPNzh36/hnt26rubot9zh33m4w7/zcId/Z+Ge4N95uOPaDQ93XOjh4Y68ysOdwJ2FO/IqD3fkVR7uyKsXcX8cnkvcckde5eGOvMrCPSOv8nBHXuXhjrzKwx0+8hrucX0Nryf/4XrT9uDT18GmjCWYX6Lec+IF67UCkbC4CxCpcydtgRNQIBLG3ApEIogkXyQM0BWIhJSkQCSM5hWIhDm+ApEwcZAvUsXEQYFImDgoEAkTBwUiYeKgQCSCSPJFwsRBgUiYOCgQCRMHBSJh4nCNSBTqKhJt75StGCKwcG+YC/BwR9Tn4Y70zsMdgZyHO4E7C3fE5ou4n+/M0pCEebgj3PJwR24awP0NZXaIQsNQIt0MQ4nAMgwlPBn/APb06aUbXkjELlGraf1ot6MRLId4jfCaeQUawSTxa9R5CDB72C8FImG4rEAkgkjyRUJEUiASQpICkTAQVyAS7vZSIBLmDRJEovW+SZfiRqSAgYMCkTBxUCASJg4KRMLEQYFIBJHki4SJgwKRMHEQlpP2RMLEQX6YDZg4KBAJEwf5IkVMHBSIhImDApEwcVAgEiYOCkQiiCRfJEwcFIiEiYMCkTBxUCASJg7yRSKEWQUiIcwqEAlhVoFICLMKRJrJgte69tqetv07ktQ9ji6pL1J7XD2NritqTWU5vJZ8LtL547I0kwHXKlHnMb80k7WbVaOZnN2sGs1k7LRq1PMMaSZjN61IBJHkizTTVYppRUJEUiASQpICkWa6SjGtSDPdFzmrSBnzBgkinT9QkTFwUCASJg4KRMLEQYFIBJHki4SJgwKRMHFQIBImDsJy0p5ImDgoCLOYOMgXqWDioEAkTBwUiISJgwKRMHFQIBJBJPkiYeKgQCRMHBSIhImDApEwcVAgEiYO8kWqCLMKREKYVSASwqwCkQgiyRcJFvyrIuWVugtl50W9FUZ5GErY2VEoGy5zDUMJ/z4MJVz2MJTwwsNQElCOQomLJMNQ4lLGMJRIO8NQIu0MQ4m0MwhlcUg7w1Ai7QxDibTzYxRKpJ2vovzeHozerTNo/1TLzzlxcQTul3APnpbDQwxb7shRPNwRuni4I6HxcEecu4g75ZV73q6rHi77Gu5Ul8pvP27/3j0sOQ93+Hce7gTul3DPbl1Xc/Rb7vDvPNzh33m4w7/zcId/5+GOazcs3AMu9PBwR17l4Y68ysMdeZWHO4E7C3fk1Yu4Pw7PJW65I6/ycEde5eGOvMrDHXmVhXtEXuXhTuB+CffvvLP39HWwJWIJ5peo85x4iVivFYiExV2ASJ07aQlOQIFIGHMrEAkzcQUiYYCuQCSCSPJFwmhegUiY4ysQCRMHBSJh4qBAJEwc5IuUMHFQIBImDgpEwsRBgUiYOCgQiSCSfJEwcVAgEiYO14hEoa4i0fZO2YQhAg93zAV4uCPqs3DPSO883BHIebgjY/NwR2y+iPv5ziyZwJ2FO8ItD3fkpgHc7ygRhYahRLoZhbIgsAxDCU92zRo17umlQpCIXaJW0/rRbkcjWA75GsHLyNcIJolfo95DgBX2S4FIGC4rEAmTaAUiISIpEIkgknyRMBBXIBLu9lIgEuYNEkSi9b5Jl+JWJAwcFIiEiYN8kRomDgpEwsRBgUiYOCgQCRMHBSIRRJKVk/ZEwsRBfphtmDgoEAkTBwUiYeKgQCRMHMSLVB0mDgpEwsRBgUiYOCgQCRMHBSIRRJIvEiYOCkTCxEGBSAizCkRCmJUvkkeYVSASwqwCkV68JkW3Hh1dpI5IdX3zck0P6LXslVGXzy30pGba+1hKyzNbyfsPx96ZNDD5zCQ4MNkw8WCyYRLAZMMkgsmGCYHJhkkCkw2TDCYbJsUgk+TLwiTVzrHeu3U/rdvPDz/t0k+CFl3vWIIWPfJQgvHljpoWKPGtiHOCt+rj425RX9yHUHpvwGtvIGhvIGpvgLQ3kLQ3kLU3ULQ3ULU30JQ3QNpXYtK+EpP0lbjkRwO1fWhg5/j8mOfnsnmGo5L0ZXtst9LX+LHdSjcEY7uV7h7GdivdaoztVrovGdutdBMztNsk3fGM7Va6PRrbrSkvlUx5qVe/ApS5W1NeKpnyUsmUl0qmvFQy5aWyKS+VTXmpbMpLZVNe6tUvkWPu1pSXyqa8VDblpbIpL5VNealiyku9+j1Y3+02PF22CxQ+dHtvQPiJJ7RHA/Hp5TyHz+GcHH9vWPi555sNl/XT394hvf37FH7uGdttFX7uGdytcK//zW5v86Tl8Fo+POW2Pfj05YS1CreOF4LpPStY5zrdfwuNd+tn+6fnP1c0cy0MQ9HMtYqMRNPmWnKGohE+Z+REI3woyYnGrqvpoiGgOUIjfDbKicawG+6hgRs+RAM3fIgGbvgATXNww4dorLjhe7dWDO6927k8a1s3pwrO7XRLprqdy1n2up3LLPa6ncv/9bqdy9J1ug12Xdrp1ZEmfdOKC8G0mtaPdjtk7I6eemQIZA7IGB48nV9rbNL3peBEY3jw1ENjePDUQ2N48NRBI33/D040hi/D9tAYvgzbQ2P4Muz5S5ab9N1QONFYdsMdNJbdcAeNZTfcQWPZDXfQWHbD52ik7w3zKl+zhwZu+MjySd91hhONZTfcQUNAc4QGs+FDNJgNH6LBbPgQDWbDh2gwGz5CI313H040cMOHaOCGD9EQ0ByhgeU7RAPLd4gGlu8IjfTtZEJee3WhfHzv770B6UtstwHpC2G3AenDm24D0tfbbgPSV8VuA9LXrm4D0leYbgPSo3+3AekBvdeA+M2Vug1oX4mr9pVY/I5V3Qa0r8RV+0osfm+vx36Rt2Y+NrBzfOehYfHbdX2v2+DXDe1CDNtupa/xY7uVbgiGdit+n6yx3Uq3Gt/sltY9c9+P+Nyt9FXxe91SXd/6TXVHW+lL6Nhu51pve93Otd5mt56lcvTbbudab3vdzrXennYbnPideMZ2O9d62+tW+hxgbLfShwZjuyVT3c7lpXrdzuWlet0a8lK3bifzUmevPbl1O5mXOu/WT+alOt1O5qU63U7mpTrdTualOt3OtQLFdcMzT/7D7GJ78NkWYMGFuU5o3wFzfr/ZDc1cZ7+haOY6VX4Lzel1uhuauc6rQ9EQ0ByhmSv9DkUzV1Qeisauq+mimSuED0UzV2IfiUb8hriMaAy74R4auOFDNHDDh2gIaI7QwA0fooEbPkQDN3yIBm74EM1cbphCXdHQ9tqk+M2Rx3Y7l2ftdTuXDe11O5ez7HVLprqd7L7qTreG7qu+dTuXS+t1O5fx6nQrfrPZk27vDSg2DPcGFHuAewOKl/V7A3YD+vmdJuI3s7wOzOmLw4ITvyshHxm7Fx16ZAxfc+jcnJQNX3PooSGgOUJj+JpDD43haw49NIavOfTQGL7m0ENj+A6cDhrxm3xeiebsVT43NJbvR++gseyGO2gsu+EOGgKaIzSW3XAHjWU33EEDN3yIBm740PLBDR+hEb/RLiMaPJ15iAaz4UM0mA0foiGgOUKD2fAhGsyGD9HADR+igRs+RAM3fIRmsq2Uh6KB5TtEA8t3iIaA5gjNixfv0Gi5STy0GjtoUvHL3UGppNT5bO8eL+3zwfVEqotG5HJPIqL1LiVK/sPRd4wVGEdgbMD46xj9q3fCnhWjB8avYIyPx35S2MEYgHEExgiMIzASMI7AmIBxBMYMjCMwIsUMwYgU812Mec83IsWMwOiRYoZgRIr5EsYaVoyNdjAixXwJYykPjGkHI1LMEIwEjF/AmMKKMdHeuREpZghGpJghGJFihmBEihmCESlmBMaAFDMEI1LMdzEmt4MRKWYIRqSYIRgJGL+Csay70aVPVd8xIsV8CWPOD4w7E56AFDMEI1LMEIxIMV/C2FaM+dPRd4xIMSMwRqSYIRiRYoZgRIoZghEpZghGs74x0NJjdLVTB7m1DnLpcXTYA1Lycmx5A7Ycmvb6i4uU6enxhtuhd23MmlER2qS1vZy22ph1uAq0MWub5WtDZr24Am3MGnwF2phNDQq0MRtFFGhD0EaENoW22pi99KNAG8wFWLVZ5wJ1RxvMBTi1oXKmDeYCcrXBXECsNglzAUZtsl9u0sm+bLXBXECuNpgLyNUGcwG52hC0YdTGxVWbutUGcwG52mAuIFcbzAXkaoO5gFxtMBcQq03GXECuNpgLyNAmbPNNxlxArjaYC7Bqs+yVlOOONgRtGK8RNDrTBnMBudpgLiBXG8wFONeb9brnjeJWG8wF5GqDuYBYbQrmAnK1wVxArjaYC8jV5tfzDZXVCCbKPSKuLPxC8E/3ZO2/ucuFB24XXff4mtYNlGr58PKu7cE1LB9dAz0fegeTzYJpNa0f7XbINJDZJzPgreyzkvFmyXReKOgHvJR9WjQRaI7QENAcobFrabpo7JqaLpoCNEdoKtAcobHrhb2jx2enuEHT7JrhLhrLbriDxrIb7qCx7IY7aAhojtBYdsMdNHDDh2jgho8sX4MbPkRj2Q2fognOshvuoMFs+BANZsOHaDAbPkRDQHOEBrPhQzRww4do4IYP0cANH6HxsHyHaGD5DtHA8h2igeU7RCN98c5rry48Nft2/L0B6UtstwHpC2G3AenDm14DQfp6221A+qrYbUD62tVtQPoK022AtDcgPaB3G9C+EgftK3HQvhIH7Stx1L4SR+0rcZS+EqdHnAk594737vHQFbVN+onSl+3vdXv7yOXwm5DbbqWv8WO7lW4IxnYr3T2M7Va61fhmt7S+9/T9iE/dkvRV8XvdUl32Or79uNWWpC+hY7uda73tdTvXepvdepbK0W+7nWu97XU713rb63au9bbX7Vzrba9b6XOAsd1KHxoM7TbN5aV63c7lpXrdzuWlet2a8lIDXoEiqtvH4bnEbbeTealOt5N5qU63k3mpTreTealOt5N5qfNu81wrUGzr4eQ/zC62B59uARbyXCe074Dp3W+W5zr7DUUz16nyW2g61+nyXOfVkWjKXIF2KJq50u9QNHNF5aFo7LqaLhoCmiM0cyX2oWgMu+EeGsNuuIcGbvgQDdzwERrxGykzooEbPkQDN3yIBm74EA0BzRGaudwwhbqioe21SfGbI4/tdi7P2ut2Lhva63YuZ9npVvxGw2O7ney+6k63pu6rFr/D79huyVS3it3FvQHFhuHegGIPcG9A8bL+1kAUv50l050mUfxmlteBOX9xWBS/KyEfGbsXHXpkDF9zOL85KTrD1xw6aMRv18iIxvA1hx4aw9ccemgMX3PooSGgOUJj+A6cHhrL96Ofvsonit8+lBGNZTfcQWPZDZ+jEb+ZKiMay264g8ayG+6ggRs+RENAc2D5xG+Hy4gGT2ceosHTmYdoMBs+RIPZ8BEa8RsaM6LBbPgQDWbDh2jghg/RENAcoYEbPkQDy3eIBpbvEA0s3xGayXbrHorm1xfv2JabZTNR6qDxza31tJL6aK57D9/5bXwDdorWCqZzS9aAnYdnJVNB5oBMM0umdwYesP3xtGg80ByhCUBzhMaupemiIaA5QpOA5ghNBpojNHa9cO8miWTXDHfRWHbD52iyZTfcQWPZDXfQWHbDHTSW3XAHDcHXHKGBGz6yfBlu+BCNZTfcQWPZDXfQYDZ8hKZgNnyIBrPhQzSYDR+iwWz4EA0BzREauOFDNHDDh2hg+Q7RwPIdoamwfIdoYPkO0UhfvPPaqwvl4x2O9wakL7HdBqQvhN0GpA9vug1IX2+7DUhfFXsNNOlrV7cB6StMtwHp0b/bgPSA3m1A+0rctK/ETftK3LSvxE37StyUr8TkpK/E33vi6fzdRuSkL9vf6zb45VkzH2LYdit9jR/brXRDMLZbMtWtdKvxzW4pr93mnbOU9FVx5DtSyElfQod26+dab3vdzrXeZreepXL0227nWm973c613va6nWu97XU713rb61b6HGBst9KHBmO7nctL9bqdy0t1ug1zealet6a8VJjMSz0OzyVuu53MS3W6JVPdTualOt1O5qU63U7mpc67jXOtQMPe5ElxrhPawG3jKM519huKZq5T5bfQdK7TxbnOq0PRzBVoh6KZK/2ORENzReWhaOy6mi6auUL4UDRzJfahaAhojtAYdsM9NHDDh2jghg/RwA0fooEbPkIjfidlRjRww4do4IYP0czlhinUFQ1tr02K3xx5bLdzedZet3PZ0F63cznLXreT3Vfd6Xay+6rPuxW/HfDQ+6rF7/A7ttu5jFevW9Lb7b0BxYbh3oBiD3BvQPGy/t6A+O0sue40Eb+Z5XVgzl8cRuJ3JeQjY/eiQ4+M4WsOnZuTiuFrDj00hq859NAYvubQQSN+u0ZGNIavOfTQGL7m0ENj+A6cHhoyjOb0VT4kfvtQRjSW3XAHjWU33EFj2Q130Fh2w+doxG8Ay4gGbvgQDdzwkeUTvx0uIxoCmiM0eDrzEA1mw4doMBs+RIPZ8CEazIYP0KTJNmEeigZu+BAN3PAhGrjhQzSwfIdoYPkO0cDyHaKB5TtCM2L75/W27xxT7aCJddlTkNxTNc3t1X4jvTaa/Iej78UHzcVHzcWT5uKT5OLj4yGKFHaKz5qLL5qLr5qLb4qLH7GLMF/xolfYXvGiV9in4vPOeT6IXmF7xYteYXvFi15ha1iLb7RTvOgVtpRH8WmneNErbK94ySvsDe1SfKK9v3nJK2yv+Ch5he0WL3mF7RYveYXtFi95he0WL3mF7RYveYV9Lj65neIlr7Dd4iWvsN3iRa+wZX3qPtW4U7zoFTbnR/E7rpJEr7C94kWvsL3iRa+wbS0+fzr6XrzoFbZXvOgVtle86BW2V7zoFbZXvOgVtlN8evF5PtDyydHVTvHkfFo7ffrksFdGycux5a3M5dC0c+jNSv88ND1dYrwdeifiDRJJy6Eppy2RACKfiEQQ+USEQOQTkQQin4hkEPlEpIDIJyLVNJFCWyINRD4SyRY9a1o9a90hYtGzUjkjYtGznhOx6FnPiZA9ItmvNwb7siVi0LN2iBj0rB0iBj1rh4hBz5rXRwayr1siBj3rOZFi0LN2iBj0rB0iBj1rh4hBz9ohQiDyiYhFz/ogErZ+pFj0rOdELHpWF9aCd4hYnLM2OiNicc56SqRanLOeE7HoWdcZWs5uS8SiZz0nYtGznhMhEPlExKJnPSdi0bOeE/l1P+LjY2z59OjgAZHQlo8O0e08wzFgh93vFRSjWwuKO8/fDdjXdnBBQVpBUVpB9OqC1v1kbgXt3P86YL/SwQVlaQUVaQVVaQU1WQVl56QV9PIztc9rQcHtFBSkFRSlFUTSCkrSCsrSCirSCqrSCmrCCvJOWkHSztRe2pnav/o85N2SKG8/lp2CXn0e8nEl5Hce9s++SCuoSiuoCSsovPo85EN7FBR2CvLSCgrSCorSCiJpBSVpBWVpBb38TB3CWlDYCYqhSiuoCSsoOmkFeWkFBWkFRWkFkbSCkrSCsrSCpJ2po7Qz9YBNf3x6Kih2Ckrl8WzR40Jf9OFnOeG15Tw++WbEdsqJssohWeUkWeVkWeUUWeVUWeW0V5ezXGL9sKHPUs6ADX2GluNllRNklRNllUOyykmyysmyyimyyqmyypF1Vs6yzspZ1lk5yzorZ1ln5SznrPw/t//5//74t9/++Ke//Pnvt3/y9l//+/d/+8dvf/395//8x///r/t/uR38vw==","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]},{"name":"entrypoint","is_unconstrained":false,"custom_attributes":["aztec(private)"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"},"visibility":"private"},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"},"visibility":"private"},{"name":"cancellable","type":{"kind":"boolean"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"7P3djmNr8t/53Usf62DFe4RuxTAM2aMxBAwkw5KPhL53P9W7Miv7X7mL/cJifjODczLSzAI74mHtH4OL+Yn1v//yf/zX/+f/7//9//hv//3//B//8y//+f/2v//yf/2P/9d/+V//7X/89/N/+99/Mf/b/7f/+f/5L//92//1f/6v//L//V9/+c/Xf/rLf/3v/8f5f//1P/3l//xv/9d//ct/tp6//qefrtPx+H6pTtbr1eL2ztV+dX6/2iXnxtVyadj3y8//OfP1es33ahGb18td9Efl/t7Fcr30KOLz9uL/+3/6i8XzUH4+lHweys+HUs9D+flQ+nkoPx/KPA/lp0Px63koPx+KPA/l50PR56H8fCj2PJSfD8Wfh/LzoTwn2ncO5TnRvnMoz4n2nUN5TrTvHMpzov35UOI50b5zKM+J9p1DeU607xwKeaKd18Ivu/zWoXTUy+Vd+W8dij8P5edDIU+0H3Yoz4n2nUN5TrTvHMpzon3nUJ4T7c+Hks+J9p1DeU607xzKc6J951Ce92jfORR/HsrPh/K8R/vOoTwn2ncO5TnRvnMoz4n2nUN5TrQ/H0o9J9p3DuU50b5zKM+J9p1Ded6jfedQ/HkoPx/K8x7tO4fyyIn2/D8vhxJa4Eyp56H8fCj9PJSfD2Weh/LTofT1PJSfD0XAh/JRnz79yIk2/KVsTzXwvxR7HsrPh+LPQ/n5UOJ5KD8fSj4P5edDqeeh/HwoDT6UD/tI/rcmWht5ORSbkB9tSnx78bl+54v/WxOWqL18YxetNy/u753hWOv3q8dm/q6Ud/6p6PRLHWrXNT+Vrp+39HenFRmTl5Lm7b+x9xuI13lVIn+0W+/+89XrNQC0f/xbr2Cly/jzYN4/mHgezPsHk8+Def9g6nkw7x9MPw/m/YOZ58G8ezDn/+fzZP7kZOR5Mn9yMvo8mT85mef0+2cn48+T+ZOTec6/f3YyzwH4z07mOQH/2ck8R+A/O5nnDPwnJyPPGfjPTuY5A//ZyTxn4D87mecM/Gcn48+T+ZOTec7Af3Yyzxn4z07mOQP/2ck8Z+A/O5nnDPwnJ6P0Gfij/gBClD4Df9zJ3GUGzh8n07dORmJeT8benEzR/muy58n8ycn482T+5GTieTJ/cjL5PJk/OZl6nsyfnEw/T+ZPTmaeJ/P+ydj1PJk/ORl5nsyfnMxzBv6zk3nOwH92Mv48mT85mecM/Gcn85yB/+xk6DPwh92fMfoM/HEnc5cZ+Mf/RPqtk/nAZv3a1KxsavYew2f+qKcu/XWz6vVyscabVv+ERFa/pLy2/ChE+r3Xth+3vU3tx2ufLx9/NGubmvVNzcamZnNTs7Wp2d7U7CxqNq5NzcqmZjdNULFpgopNE1RsmqBi0wQVmyao2DRBxaYJKjdNULlpgspNE1RumqBy0wSVmyao3DRB5aYJKjdNULlpgqpNE1RtmqBq0wRVmyao2jRB1aYJqjZNULVpgqpNE1RtmqB60wTVmyao3jRB9aYJqjdNUL1pgupNE1RvmqB60wTVmyao2TRBzaYJajZNULNpgrrLc0c+TbObJqjZNEHNpglqNk1Qs2iC0mvRBKXXoglKr0UTlF6LJii9fFOziyYovRZNUHotmqD0+lITlOvrg0699O+avVW2/Hw0X2re+ueOpt6UPfrT0ciXms5CXh7sahE3j+b6scVA9Hpztb3/2t8v9npzIHO9c23Uy9No098+jPbdBx3Lj6M+P4e8Xq3zx/vzpQbKL/j+fKkZ+Au+P19qbP+C748/3x/0+/Olvhx9wffnS32f+4Lvz5f6CvoF358v9a35C74/X+qr+9d7f/R5/4D9/jzvH7Dfn+f9A/b787x/wH5//Pn+oN+f5/0D9vvzvH/Afn+e9w/Y78/z/gH7/XneP0C/P/a8f8B+f573D9jvz/P+Afv9ed4/YL8//nx/0O/P8/4B+/153j9gvz/P+wfs9+d5/4D9/jzvH6DfH3/eP2C/P8/7Bx/9/swLFzpF9E/vz/P+Afv9ed4/YL8//nx/Pvb9UbHX90fzp/fnef+A/f487x+w35/n/YMPfn/MXi4Wc//p/XneP/jH3p+Ql4vzihvvj8n1cuYmb+pQ/+PMn/cEfsOZq71cbPrzmX+t5xF/kjN/fnd//Jk/v48//syf37Eff+b+PPOHn/nzu/Djz/z5/fbxZ/78zvr4M39+D338mT+/h/5jZ54yL2ceduPM5ZLX+/2X59sz//lit3k5EPe3N2f+eIO+1iPgv+Ib9PyGC3+Dnl+H4W/Q4u/OPz6dRV3/7g3629H482j+7GgWfxO9dTSLvzBq+0vZ9uanyPcTT+Z1H7ZMvfnDs3z3SC79EaeXvenzT67vH0fY9aMWe69NketHVL99d75n5OLvo1/1Lf1aX3ejX9/SsRtv6Ui+vPZIv5lLJN6rRKdfDvIk3zV/d/3fjvJrfYv9yKOsh3/fjHn5z/uM6vp3L/23gh7+/ars9d2q//DSfytIaQUZrSCnFRS0gpJWUNEKalpBAyuoL1pBtKRuWlI3LambltRNS+qmJXXTkrppSd20pB5aUg8tqYeW1ENL6qEl9dCSemhJPbSkHlpSDyyp7YIltV2wpLYLltR2wZL63ESmFQRLartgSW0XLKntgiW1XbSkFlpSCy2phZbUQktqoSW10JJaaEkttKQWWlILLamVltRKS2qlJbXSklppSa20pFZaUistqZWW1EpLaqMltdGS2mhJbbSkNlpSGy2pjZbURktqoyW10ZLaaUnttKR2WlI7LamdltROS2qnJbXTktppSe20pA5aUgctqYOW1EFL6qAlddCSOmhJHbSkDlpSBy2pk5bUSUvqpCV10pI6aUmdtKROWlInLamTltRJS+qiJTXNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKBrNKDrNKDrNKDrNKDrNKPoFS2qnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGUWnGcWgGcWgGcWgGcWgGcW4YEkdNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKMYNKOYNKOYNKOYNKOYNKOYFyypk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUk2YUi2YUi2YUi2YUi2YU64IlddGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtGMYtOMYtOMYtOMYtOMYl+wpG6aUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWyaUWya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pgmqNk1QtWmCYu8dv3ezmyYo9r7xeze7aYJi7xm/d7ObJqivtpP8181umqC+2k7yXze7aYLatJO8Nu0kr007yWvTTvLatJO8Nu0kr007yWvTTvLatJO8Nu0kr007yWvTTvLatJO8Nu0kr007yWvTTvLatJO8Nu0k7007yXvTTvLetJO8N+0k78s3NbtogupNO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8l7007y3rSTvDftJO9NO8n7i+0kH83XZu0/NjtfbCf5jWYfPkHZ6Ev5bv3rZiXa+uWl84r5u2b/aEA/ewOGbiCvHy+dov5OA/7ZG4jP3kB+9gaK3cDUy9VS12U3P0ztNXI77KfI7U3NzqJmH7+L+yObZU8Od26WPWX8083+atofgU8k923WNzULn3Tu2yx8Krpvs19sgvp1s19sgvp1s19sgvpls/rFJqhfN/vFJqhfN7tpgtJNE9Tjd3F/ZLObJijdNEHppglKN01QummCsk0TlG2aoGzTBGWbJqjH7+L+yGY3TVC2aYKyTROUbZqgbNME5ZsmKN80QfmmCco3TVCP38X9kc1umqB80wTlmyYo3zRB+aYJKjZNULFpgopNE1RsmqAev4v7I5vdNEHFpgkqNk1QsWmCik0TVG6aoHLTBJWbJqjcNEE9fhf3Rza7aYLKTRNUbpqgctMElZsmqNo0QdWmCao2TVC1aYJ6/C7uj2x20wRVmyao2jRB1aYJqjZNUL1pgupNE1RvmqB60wT1+F3cH9nspgmqN01QvWmC6k0TVG+aoGbT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jKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjKLTjGLQjGLQjGLQjGLQjGJcsKQOmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlEMmlFMmlFMmlFMmlFMmlHMC5bUSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKSTOKRTOKRTOKRTOKRTOKdcGSumhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWhGsWlGsWlGsWlGsWlGsS9YUjfNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKDbNKA7NKA7NKA7NKA7NKM4FS+qhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWhGcWBGUW/YEbxFMRK6lMQK6lPQaykPgWxkvoUxErqUxArqU9BrKQ+BbGS+hRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwFwZJaaEZRaEZRaEZRaEZRLlhSC80oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oCs0oKs0oKs0oKs0oKs0o6gVLaqUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaUZRaMZRaMZRaMZRaMZRbtgSW00o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o2g0o+g0o+g0o+g0o+g0o+gXLKmdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSDZhSDZhSDZhSDZhTjgiV10Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0oxi0oxi0oxi0oxiXrCkTppRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRLJpRLJpRLJpRLJpRrAuW1EUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzik0zik0zik0zik0zin3BkrppRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRrFpRnFoRnFoRnFoRnFoRnEuWFIPzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgOzSgO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ZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSdZhSDZhSDZhSDZhSDZhTjgiV10Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0Ixi0oxi0oxi0oxi0oxiXrCkTppRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRTJpRLJpRLJpRLJpRLJpRrAuW1EUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUzikUz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0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0oyi0Yyi0Yyi0Yyi0YyiXbCkNppRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRNJpRdJpRdJpRdJpRdJpR9AuW1E4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zik4zikEzikEzikEzikEzinHBkjpoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFoRjFpRjFpRjFpRjFpRjEvWFInzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgmzSgWzSgWzSgWzSgWzSjWBUvqohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFohnFphnFphnFphnFphnFvmBJ3TSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSj2DSjODSjODSjODSjODSjOBcsqYdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFIdmFAdmFPuCGcVTECupT0GspD4FsZL6FMRK6lMQK6lPQaykPgWxkvoUxErqUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RRES2qYUTwF0ZIaZhRPQbSkhhnFUxAtqWFG8RQES2qhGUWhGUWhGUWhGUW5YEktNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKMoNKOoNKOoNKOoNKOoNKOoFyyplWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUlWYUjWYUjWYUjWYUjWYU7YIltdGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotGMotOMotOMotOMotOMol+wpHaaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUXSaUQyaUQyaUQyaUQyaUYwLltRBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pBM4pJM4pJM4pJM4pJM4p5wZI6aUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUYxaUaxaEax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GUW9YEmtNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKOoNKNoNKNoNKNoNKNoNKNoFyypjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUjWYUnWYUnWYUnWYUnWYU/YIltdOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMotOMYtCMYtCMYtCMYtCMYlywpA6aUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUQyaUUyaUUyaUUyaUUyaUcwLltRJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pJM4pFM4pFM4pFM4pFM4p1wZK6aEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaEaxaUaxaUaxaUaxaUaxL1hSN80oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oNs0oDs0oDs0oDs0oDs0ozgVL6qEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxaEZxXm4UdQrr+8Xq1zxtqD3Lo6Il6uv6B+Xi7x3fZ4D/n55jr3p9nuzvanZWdTsw93mhzYrm5rVTc2CPtHfuTjq9ZVjfryy6fcPE5J8/VfKB00L/0r5Sf4vRSbbXwupS278l6I6/frqdl3zd9f/0TB6dvkdDaPnl9/RMHqG+Q0NO3qOkW+bFF8/7S6Jdxr4WrNJ2+vHdYf9x49r/1qzyY1mbVOzvqnZ2NQsekr655vtev0+cf30fcK/1t2dG81+rbs7N5r9Wnd3ft1sfK27Ozea/WIT1K+b/WIT1K+b/WIT1K+b9U3NfrEJ6tfNbpqgYtMEFZsmqNg0QeWmCSo3TVC5aYLKTRPUwzepfGizmyao3DRB5aYJKjdNULlpgqpNE1RtmqBq0wRVmyaoh284+tBmN01QtWmCqk0TVG2aoGrTBNWbJqjeNEH1pgmqN01QD9889qHNbpqgetME1ZsmqN40QfWmCWo2TVCzaYKaTRPUbJqgHr4R8EOb3TRBzaYJajZNULNpgpo9E5Rc17VnhPrW7Z4Z6lu3e4aob93umaK+deurut0zR33rds8g9a3bPZPUt273jFLful01S8mqWUpWzVKyapaSVbPUwxfqfmy3q2YpWTVLyapZSlbNUrJqltJVs5SumqV01Sylq2aph6+8/thuV81SumqW+mKbwG91u2qW+mK7wG90+8WWgd/qdtUs9cXWgd/qdtUs9fD14R/b7apZir2c/O7drpql2GvJ797tqlmKvZD87t2umqW+2vryG92umqW+2gLzG92umqUWrTD/1u2qWWrREvNv3a6apRatMf/W7apZatEi82/drpqlFq0y/9btqllq0TLzb92umqUWrTP/1u2qWWrRQvNv3a6apRatNP/W7apZatFS82/drpqlFq01/9btqllq0WLzb92umqUWrTb/1u2qWWrRcvNv3a6apRatN//W7apZatGC82/drpqlFq04/9btqllq0ZLzb92umqUWrTn/1u2qWWrRovNv3a6apRatOv/W7apZatGy82/drpqlFq07/9btqllq0cLzb92umqUWrTz/1u2qWWrR0vNv3a6apRatPf/W7aZZSlbtPZdVe89l1d5zWbX3XC5f1e2mWUpW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPZdXec1m191xW7T2XVXvPddXec12191xX7T3XVXvP9fJV3W6apXTV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7z3XV3nNdtfdcV+0911V7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qTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHqTgHaTgHaTgHaTgHaTgHaRctsw3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIA3nIB3nIB3nIB3nIB3nIP2iZbbjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHKTjHGTgHGTgHGTgHGTgHGRctMwOnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnINMnINMnINMnINMnIPMi5bZiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQiXOQhXOQhXOQhXOQhXOQddEyu3AOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnAOsnEOsnEOsnEOsnEOsi9aZjfOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQTbOQQ7OQQ7OQQ7OQQ7OQc5Fy+zBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcjBOcihOUi9aA7yVATL7FMRLLNPRbDMPhXBMvtUBMvsUxEss09FsMw+FcEy+1SEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV4TKb5iBPRbjMpjnIUxEus2kO8lSEy2yagzwV0TJbcA5ScA5ScA5ScA5SLlpmC85BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BCs5BKs5BKs5BKs5BKs5B6kXLbMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMU5SMM5SMM5SMM5SMM5SLtomW04B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B2k4B+k4B+k4B+k4B+k4B+kXLbMd5yD94Q5Sr7y+X6xyxduK3rs4Il6uvqJ/XC7y3vU5mt8vz7E37b50W6u67VXdzqZuH+5OP7ZbWdWtrurWVnXrq7qNVd2iZymZbH8tpC650e23nT2vr27XNX93/feO0fPUb+kYPVP9lo7Rc9Xv6FjRs9Vv6Rg9X/2Wju8yY8lrWfX28+Ddb+KVr9/Eq3+0UC+fHvfx7XetyHEVxaMr6uv68Y+63qkocRUVrqLG/TsaWkX38e13rUhwFeEy23CZbbjMtsBVlLiKcJltjatoaBX5havo0Zmtqq+Ttma+reidV458nfolSvKdudz103dgn74D//Qd4D5zHPeZ44WrqNn/7tr65aXzivfuKvh89g7i+vQd3OMzMOP1XlZdt+5leb1crHH5jZfWanu5uuVNA/3ea1vES78WYz+uNnnn6pF8ee05s8Jf//3bZHdZdfA8zO+Hac/DvN9h+vMw73eY8TzM+x1mPg/zfodZn34e+fRTbXz6qTY//VSb8Ds7/0AH8Ds7/0AHRrvfd5+NLXetCPcLbeJ+oU3c3f7E3e1P3N3+wt3tL8FVpLiKcJlduMwuXGYXLrMLl9mFy+zCZXbjMrtxmd24zG5cZjcusxuX2Y3L7MZlduMyu3GZPbjMHlxmDy6zB5fZg8vswWX24DJ7cJk9uMweWmbHRcvsuGiZHRcts+OiZfb58RJXES2z46Jldly0zI6Lltlx4TJbcJktuMwWXGYLLrMFl9mCy2zBZbbgMltwmS24zFZcZisusxWX2YrLbMVlNk72B072B072h+IyW3GZbbjMNlxmGy6zDZfZhstsw2W24TIbJ/sDJ/sDJ/sDJ/vDcZntuMx2XGY7LrMdl9mOy2zHZbbjMttxmR24zA5cZgcuswOX2YHL7MBlduAyO3CZHbjMDlxmJy6zE5fZictsnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIMMnIOMhz+5/tsDvL9f/G1v94+L332WSr55Imhd15uNXv/KM6+ia1W3varb2dTtXKu6lVXd0p6WHUN7Wnbcx8vetSLa07JjEldR4SpqXEUDqyivC1eR4CqiZXZetMzOi5bZedEyOy9aZudFy+y8aJmdFy6zBZfZgstswWW24DJbcJktuMwWXGYLLrMFl9mCy2zFZbbiMltxma24zFZcZisusxWX2YrLbMVltuIy23CZbbjMNlxmGy6zDZfZhstsw2W24TLbcJltuMx2XGY7LrMdl9mOy2zHZbbjMttxme24zHZcZjsuswOX2YHL7MBlduAyO3CZHbjMDlxmBy6zA5fZgcvsxGV24jI7cZmduMxOXGYnLrMTl9mJy+zEZXbiMrtwmV24zC5cZhcuswuX2YXL7MJlduEyu3CZXbjMblxmNy6zG5fZjcvsxmV24zK7cZnduMxuXGY3LrMHl9mDy2ycg0ycg0ycg0ycg0ycg0ycg0ycg0ycgyycgyycgyycgyycg6yLltmFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CFc5CNc5CNc5CNc5CNc5B90TK7cQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ6ycQ5ycA5ycA5ycA5ycA5yLlpmD85BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs5BDs1B2kVzkKciWGafimCZfSqCZfapCJbZpyJYZp+KYJl9KoJl9qkIltmnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqQiX2TQHeSrCZTbNQZ6KcJlNc5CnIlxm0xzkqYiW2YJzkIJzkIJzkIJzkHLRMltwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJwDlJxDlJxDlJxDlJxDlIvWmYrzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEqzkEazkEazkEazkEazkHaRctswzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIwzlIxzlIxzlIxzlIxzlIv2iZ7TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgH6TgHGTgHGTgHGTgHGTgHGRctswPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIAPnIBPnIBPnIBPnIBPnIPOiZXbiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGTiHGQ+3EHqldf3i1WueFvRexdHxMvV1/np7fVykfeuz9H8fnmOvWn3pVtb1a2v6jZWdZuruq1V3YI+29+5OOr1lc/PoT/q0NfPFNAk8K/UT7K4/1L9Qv6vRSbbXwupS27816I6/frqdl3zd9d/7xg9xfyWjtGTzG/p2Nd1jJ5o5DTw41Pvknivg681pbS9fm532E+f2/61ppRb3faqbmdTtw+X7R/bLXpe+ue77Xr9dnH9/O0ivtYdn1vdfq07Pre69VXdfq07Pre6/WKz1I1uv9gsdaPbLzZL3ej2i81Sv+42v9gsdaPbVbNUrpqlctUs9fANHx/b7apZKlfNUrlqlspVs1SumqVq1SxVq2apWjVL1apZ6uGbdz6221WzVK2apWrVLFWrZqlaNUv1qlmqV81SvWqW6lWz1MM3Yn1st6tmqV41S/WqWapXzVK9apaaVbPUrJqlZtUsNatmqYdvqvvYblfNUrNqlppVs9SsmqVm0yxV16ZZqq5Ns1Rdm2apujbNUnX5qm43zVJ1bZql6to0S9W1aZaqa9UsJatmKVk1S8mqWUpWzVIP3+z6sd2umqVk1Swlq2YpWTVLyapZSlfNUrpqltJVs5SumqUevnH5Y7tdNUvpqllKV81SumqW0lWzlK2apWzVLPXFNorf6nbVLPXFNorf6nbVLPXFNorf6nbVLGWrZilbNUv5qlmKvdv87t2umqXYO83v3q2v6nbVLPXV9p7f6HbVLPXV9p7f6HbVLPXV9p7f6HbVLLVq73mt2nteq/ae16q957Vq73mt2nteq/ae16q957Vq73mt2nteq/ae16q957Vq73mt2nteq/ae16q957Vq73mt2nteq/ae16q957Vq73mt2nteq/ae16q957Vq73mt2nteq/ae16q957Vq73mt2nteq/ae16q957Vq73mt2nteq/ae16q957Vq73mt2nteq/ae16q957Vq73mt2nteq/ae16q957Vq73mt2nteq/ae16q9571q73mv2nveq/ae96q95335qm43zVK9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p73qv2nveqvee9au95r9p7Pqv2ns+qveezau/5rNp7Ppev6nbTLDWr9p7Pqr3ns2rv+azaez6r9p7Pqr3ns2rv+azaez6r9p7Pqr3ns2rv+azaez6r9p7Pqr3ns2rv+azaez6r9p7Pqr3ns2rv+azaez6r9p7Pqr3ns2rv+azaez6r9p7Pqr3ns2rv+azaez6r9p7Pqr3ns2rv+azaez6r9p7Pqr3ns2rv+azaez6r9p7Pqr3ns2rv+azaez6r9p7Pqr3ns2rv+azaez6r9p7Pqr3ns2rv+azaez6r9p7Pqr3ns2rv+f+/vbvbbSzJzjR8S3v9r3U1A9sYDBpo2APbM8Ac+N4nKqskZVnqVIlFhl5V5InhQpOML5iMT6EtPrHnqHPP56hzz+eoc8/nqHPP56hzz+eoc8/nqHPP56hzz+eoc8/nqHPP56hzz+eoc8/nqHPP56hzz+eoc8/nqHPP56hzz+eoc8/nqHPP56hzz+eoc8/nqHPP56hzz+eoc8/nqHPP56hzz+eoc8/nqHPP56hzz+eoc8/nqHPP56hzz+eoc89n/7nnNvqU361/PFuJtn566bxifjfb32YgX34Gip5BXi8vnaL+1gzsy8/Av/wM4svPINkzWBd6n166rsvebV7Lp+btsNfNW0fNto+a7ZwzW78u9h7i3rNl7zc+PNsf7Q/XbOF7kzvPFr6PufNs/ajZwvdHd57tX2wv9c5s/2J7qXdm+xfbS70z27/YXurHs5W/2F7qndketZeSo/ZSctReav95358626P2UnLUXkqO2kvJUXspOWovpUftpfSovZQetZfSo/ZS+8/7/tTZHrWX0qP2UnrUXkqP2kvpUXspO2ovZUftpeyovZQdtZfaf973p872qL2UHbWXsqP2UnbUXsqO2kv5UXspP2ov5UftpfyovdT+874/dbZH7aX8qL2UH7WX8qP2Un7UXiqO2kvFUXupOGovFUftpfaf9/2psz1qLxVH7aXiqL1UHLWXiqP2UnnUXiqP2kvlUXupPGovtf+870+d7VF7qTxqL5VH7aXyqL1UHrWXqqP2UnXUXqqO2kvVUXup/ed9f+psj9pL1VF7qTpqL1VH7aXqqL1UH7WX6qP2Un3UXqqP2kvtP+/7U2d71F6qj9pL9VF7qT5qL9VH7aXg533fe7ZH7aXo54jfebZH7aXo55PfebZH7aX+aueevzPbo/ZSf7Vzz9+Z7Ul7KfmrnXv+zmxP2kvJUeeey1HnnsvlR832pL2UHHXuuRx17rkcde65HHXuuRx17rkcde65HHXuuRx17rkcde65HHXuuRx17rkcde65HHXuuRx17rkcde65HHXuuRx17rkcde65HHXuuRx17rkcde65HHXuuRx17rkcde65HHXuuRx17rkcde65HHXuuRx17rkcde65HHXuuRx17rkcde657D/3/MrrabZyxTuznWx/DlKXvDNb1ennV7fru/n+8vhfZ7z/7PNPn7EcN2M9bsZ23Iz9uBnHcTPO42Zcx824j5vxcXuu7Weky3e75Jn5fsa/JRJcIsUlMlyiu/zMl+ePd9m8k6jy5betflkK9fT7033O1b5rosQlKlyixiUaWqL7nMV810SCS6S4RIZL5LSfIrm9s/u6XuLXG+9R4hIVLlHjEg0tUeH22YXbZ9fuzlbV59+PNPP7f7U3Xjny+Xe1tXGSfOO3qbIvPwP/8jOILz+D/PIzKFy3NC7R0BI17mdU435GNe5a0F3Ojcx4TlTX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OcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjCOcjGOcjGOcjGOcjGOci+aJ3dOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAfZOAc5OAc5OAc5OAc5OAc5F62zB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgB+cgh+Yg46I5yJUI1tkrEayzVyJYZ69EsM5eiWCdvRLBOnslgnX2SgTr7JUI19k0B7kS4Tqb5iBXIlxn0xzkSoTrbJqDXIlwnU1zkCsRrrNpDnIlwnU2zUGuRLjOpjnIlQjX2TQHuRLhOpvmIFciXGfTHORKhOtsmoNciXCdTXOQKxGus2kOciXCdTbNQa5EuM6mOciVCNfZNAe5EuE6m+YgVyJcZ9Mc5EqE62yag1yJcJ1Nc5ArEa6zaQ5yJcJ1Ns1BrkS4zqY5yJUI19k0B7kS4Tqb5iBXIlxn0xzkSoTrbJqDXIlwnU1zkCsRrrNpDnIlwnU2zUGuRLjOpjnIlQjX2TQHuRLhOpvmIFciXGfTHORKhOtsmoNciXCdTXOQKxGus2kOciXCdTbNQa5EuM6mOciVCNfZNAe5EuE6m+YgVyJcZ9Mc5EqE62yag1yJcJ1Nc5ArEa2zBecgBecgBecgBecg5aJ1tuAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOAcpOIcpOIcpOIcpOIcpF60zlacg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1Scg1ScgzScgzScgzScgzScg7SL1tmGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5CGc5COc5COc5COc5COc5B+0TrbcQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ7ScQ4ycA4ycA4ycA4ycA4yLlpnB85BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BBs5BJs5BJs5BJs5BJs5B5kXr7MQ5yMQ5yMQ5yLxonZ04B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B5k4B1k4B1k4B1k4B1k4B1kXrbML5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAL5yAb5yAb5yAb5yAb5yD7onV24xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk4xxk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xzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxzlIxznIwDnIwDnIwDnIwDnIuGidHTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHGTgHmTgHmTgHmTgHmTgHmRetsxPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIBPnIAvnIAvnIAvnIAvnIOuidXbhHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGThHGTjHGTjHGTjHGTjHGRftM5unINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnINsnIMcnIMcnIMcnIMcnIOci9bZg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQg3OQQ3OQddEc5EoE6+yVCNbZKxGss1ciWGevRLDOXolgnb0SwTp7JYJ19kqE62yag1yJcJ1Nc5ArEa6zaQ5yJcJ1Ns1BrkS4zqY5yJUI19k0B7kS4Tqb5iBXIlxn0xzkSoTrbJqDXIlwnU1zkCsRrrNpDnIlwnU2zUGuRLjOpjnIlQjX2TQHuRLhOpvmIFciXGfTHORKhOtsmoNciXCdTXOQKxGus2kOciXCdTbNQa5EuM6mOciVCNfZNAe5EuE6m+YgVyJcZ9Mc5EqE62yag1yJcJ1Nc5ArEa6zaQ5yJcJ1Ns1BrkS4zqY5yJUI19k0B7kS4Tqb5iBXIlxn0xzkSoTrbJqDXIlwnU1zkCsRrrNpDnIlwnU2zUGuRLjOpjnIlQjX2TQHuRLhOpvmIFciXGfTHORKhOtsmoNciXCdTXOQKxGus2kOciXCdTbNQa5EuM6mOciViNbZgnOQgnOQgnOQgnOQctE6W3AOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnAOUnEOUnEOUnEOUnEOUi9aZyvOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQSrOQRrOQRrOQRrOQRrOQdpF62zDOUjDOUi7i4Ps8edHr1f+caJr7RKfHn2tT83zw9d14zdfPF6mW/kS5c0Xl+v5teX73P403T5runPUdO/CQ6fnt0frJfnj6UbVU6KorucHi8Qbj9a1H3l6uK6fu/O7x/82Bfn6U9CvPwX7+lPwrz+F+PpTyK8/hfr6U9j9a6Be+ZxJrvh+2/XWm5P93U/YS+4x4zloxuu//vnf//b3v//tf/2Pv//bv/zTf/7t3/71P3559vXL/3kbIFZcT3OrNnt5PZM3xv/do/33j17v99ui8L5DzMOHeNv83XcIefwQ+vgh7PFD+OOHiMcPkY8f4vGr2x6/uu3xq9sfv7r98avbH7+6/fGr2x+/uv3xq9sfv7r98avbH7+6/fGrOx6/uuPxqzsev7rj8as7Hr+64/GrOx6/uuPxqzsev7rj8as7H7+68/GrOx+/uvPxqzsfv7rz8as7H7+68/GrOx+/uvPxq7sev7rr8au7Hr+66/Grux6/uuvxq7sev7rr8au7Hr+66/Grux+/uvvxq7sfv7r78au777C6zaJ/e7TV94+OefOqeMXTdWvP3z/6l0BBC5S0QEUL1LRAAws0Fy2Q0AIpLZDRAtGaemhNPbSmHlpTD62ph9bUctGqWi5aV8tFK2u5aG0tF62u5aL1tVy0wpaL1thy0SpbLlxnC66zBdfZgutswXW24DpbcJ0tuM4WXGcLrrMF19mK62zFdbbiOltxna24zlZcZyuusxXX2YrrbMV1tuE623CdbbjONlxnG66zDdfZhutsw3W24TrbcJ3tuM52XGc7rrMd19mO62zHdbbjOttxne24znZcZweuswPX2YHr7MB1duA6O3CdHbjODlxnB66zA9fZievsxHV2Prizv41hG8bwDWPcoykr4nmM9Ndj5IYxasMYfecxSl6PMY8f4x7s6d0x7tEKrc9jtL3+97gHfHp3DNswxj3WR4c9j9HXqzHu4R089ekMI0+P12P8gXnk78b49qy66Vl907Pmlmf9ka/Vv/EsuelZetOz7KZn+U3PipueddNnY276bMxNn4255bOh13XTs+SmZ+lNz7KbnuU3PStuelbe9Ky66Vl907Nu+mzITZ8NuemzITd9NuSmz4bc9NmQmz4bctNnQ276bMhNnw256bOhN3029KbPht702dCbPht6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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","enqueue_public_function_call_internal","call_private_function_internal","debug_log_format","notify_set_min_revertible_side_effect_counter","directive_invert","directive_integer_quotient"]},{"name":"verify_private_authwit","is_unconstrained":false,"custom_attributes":["aztec(private)","aztec(noinitcheck)","aztec(view)"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"inner_hash","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"item","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"revert_code","type":{"kind":"integer","sign":"unsigned","width":8}},{"name":"start_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"end_gas_left","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_stack_item_compressed::PublicCallStackItemCompressed"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","pack_returns","directive_invert","directive_integer_quotient"]}],"outputs":{"globals":{"notes":[{"fields":[{"kind":"integer","sign":false,"value":"00000000000000000000000000000000000000000000000000000000906cb9c3"},{"kind":"string","value":"EcdsaPublicKeyNote"}],"kind":"tuple"}],"storage":[{"fields":[{"name":"public_key","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"0000000000000000000000000000000000000000000000000000000000000001"}}],"kind":"struct"}}],"kind":"struct"}]},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}}],"kind":"struct","path":"EcdsaKAccount::constructor_parameters"}}],"kind":"struct","path":"EcdsaKAccount::constructor_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"}},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"}},{"name":"cancellable","type":{"kind":"boolean"}}],"kind":"struct","path":"EcdsaKAccount::entrypoint_parameters"}}],"kind":"struct","path":"EcdsaKAccount::entrypoint_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"inner_hash","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaKAccount::verify_private_authwit_parameters"}},{"name":"return_type","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaKAccount::verify_private_authwit_abi"}]}},"file_map":{"101":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/history/public_storage.nr","source":"use dep::protocol_types::{\n constants::GENERATOR_INDEX__PUBLIC_LEAF_INDEX, hash::poseidon2_hash_with_separator,\n address::AztecAddress, header::Header, utils::field::full_field_less_than\n};\nuse dep::protocol_types::merkle_tree::root::root_from_sibling_path;\n\nuse crate::{oracle::get_public_data_witness::get_public_data_witness};\n\ntrait PublicStorageHistoricalRead {\n fn public_storage_historical_read(header: Header, storage_slot: Field, contract_address: AztecAddress) -> Field;\n}\n\nimpl PublicStorageHistoricalRead for Header {\n fn public_storage_historical_read(self, storage_slot: Field, contract_address: AztecAddress) -> Field {\n // 1) Compute the leaf index by siloing the storage slot with the contract address\n let public_data_tree_index = poseidon2_hash_with_separator(\n [contract_address.to_field(), storage_slot],\n GENERATOR_INDEX__PUBLIC_LEAF_INDEX\n );\n\n // 2) Get the membership witness for the tree index.\n let witness = unsafe {\n get_public_data_witness(\n self.global_variables.block_number as u32,\n public_data_tree_index\n )\n };\n\n // 3) The witness is made up of two parts: the preimage of the leaf and the proof that it exists in the tree.\n // We first prove that the witness is indeed valid for the public data tree, i.e. that the preimage is of a\n // value present in the tree. Note that `hash` returns not just the hash of the value but also the metadata\n // (slot, next index and next slot).\n assert(\n self.state.partial.public_data_tree.root\n == root_from_sibling_path(witness.leaf_preimage.hash(), witness.index, witness.path), \"Proving public value inclusion failed\"\n );\n\n // 4) Now that we know the preimage is valid, we determine the value that's represented by this tree entry. Here\n // we have two scenarios:\n // 1. The tree entry is initialized, and the value is the same as the one in the witness\n // 2. The entry was never initialized, and the value is default zero (the default)\n // The code below is based on the same checks in `validate_public_data_reads` in `base_rollup_inputs`.\n let preimage = witness.leaf_preimage;\n\n let is_less_than_slot = full_field_less_than(preimage.slot, public_data_tree_index);\n let is_next_greater_than = full_field_less_than(public_data_tree_index, preimage.next_slot);\n let is_max = ((preimage.next_index == 0) & (preimage.next_slot == 0));\n let is_in_range = is_less_than_slot & (is_next_greater_than | is_max);\n\n let value = if is_in_range {\n 0\n } else {\n assert_eq(preimage.slot, public_data_tree_index, \"Public data tree index doesn't match witness\");\n preimage.value\n };\n\n value\n }\n}\n"},"109":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/unconstrained_context.nr","source":"use dep::protocol_types::{address::AztecAddress, traits::Deserialize};\nuse crate::oracle::{execution::{get_chain_id, get_version, get_contract_address, get_block_number}, storage::storage_read};\n\nstruct UnconstrainedContext {\n block_number: u32,\n contract_address: AztecAddress,\n version: Field,\n chain_id: Field,\n}\n\nimpl UnconstrainedContext {\n unconstrained fn new() -> Self {\n // We could call these oracles on the getters instead of at creation, which makes sense given that they might\n // not even be accessed. However any performance gains are minimal, and we'd rather fail early if a user\n // incorrectly attempts to create an UnconstrainedContext in an environment in which these oracles are not\n // available.\n let block_number = get_block_number();\n let contract_address = get_contract_address();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n unconstrained fn at(contract_address: AztecAddress) -> Self {\n let block_number = get_block_number();\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n unconstrained fn at_historical(contract_address: AztecAddress, block_number: u32) -> Self {\n let chain_id = get_chain_id();\n let version = get_version();\n Self { block_number, contract_address, version, chain_id }\n }\n\n fn block_number(self) -> u32 {\n self.block_number\n }\n\n fn this_address(self) -> AztecAddress {\n self.contract_address\n }\n\n fn version(self) -> Field {\n self.version\n }\n\n fn chain_id(self) -> Field {\n self.chain_id\n }\n\n unconstrained fn raw_storage_read<let N: u32>(self: Self, storage_slot: Field) -> [Field; N] {\n storage_read(self.this_address(), storage_slot, self.block_number())\n }\n\n unconstrained fn storage_read<T, let N: u32>(\n self,\n storage_slot: Field\n ) -> T where T: Deserialize<N> {\n T::deserialize(self.raw_storage_read(storage_slot))\n }\n}\n"},"115":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr","source":"use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n messaging::process_l1_to_l2_message, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\n oracle::{\n key_validation_request::get_key_validation_request, arguments, returns::pack_returns,\n call_private_function::call_private_function_internal, header::get_header_at,\n logs::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, gas::Gas,\n max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest,\n public_call_stack_item_compressed::PublicCallStackItemCompressed, read_request::ReadRequest,\n note_hash::NoteHash, nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL\n},\n header::Header, messaging::l2_to_l1_message::L2ToL1Message, utils::reader::Reader, traits::Empty\n};\n\n// When finished, one can call .finish() to convert back to the abi\nstruct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n let (end_side_effect_counter, returns_hash) = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = end_side_effect_counter + 1;\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.private_call_requests.push(\n PrivateCallRequest {\n contract_address,\n call_context,\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter\n }\n );\n\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n let call_request = PublicCallRequest { item, counter };\n self.public_call_requests.push(call_request);\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.set_public_teardown_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let item = PublicCallStackItemCompressed {\n contract_address,\n call_context,\n args_hash,\n returns_hash: 0,\n revert_code: 0,\n start_gas_left: Gas::empty(),\n end_gas_left: Gas::empty()\n };\n\n self.public_teardown_call_request = PublicCallRequest {\n item,\n counter,\n };\n }\n\n fn generate_call_context(\n self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> CallContext {\n let msg_sender = if is_delegate_call {\n self.msg_sender()\n } else {\n self.this_address()\n };\n let storage_contract_address = if is_delegate_call {\n self.this_address()\n } else {\n contract_address\n };\n CallContext { msg_sender, storage_contract_address, function_selector, is_static_call, is_delegate_call }\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n}\n"},"123":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\nuse std::{\n embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n hash::from_field_unsafe as fr_to_fq_unsafe, field::bn254::decompose\n};\n\nuse crate::{\n event::event_interface::EventInterface, oracle::unsafe_rand::unsafe_rand,\n utils::point::point_to_bytes, note::note_interface::NoteInterface,\n encrypted_logs::{\n header::EncryptedLogHeader, incoming_body::EncryptedLogIncomingBody,\n outgoing_body::EncryptedLogOutgoingBody\n},\n keys::public_keys::{OvpkM, IvpkM}\n};\n\npub fn compute_encrypted_event_log<Event, let NB: u32, let MB: u32, let OB: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n event: Event\n) -> [u8; OB] where Event: EventInterface<NB, MB> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_event(event, randomness).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; OB] = [0; OB];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = OB - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\npub fn compute_encrypted_note_log<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> [u8; M] where Note: NoteInterface<N, NB> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_note(note, storage_slot).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; M] = [0; M];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\n/// Converts a base field element to scalar field element.\n/// This is fine because modulus of the base field is smaller than the modulus of the scalar field.\nfn fr_to_fq(r: Field) -> Scalar {\n let (lo, hi) = decompose(r);\n\n Scalar { lo, hi }\n}\n\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(unsafe_rand());\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\nmod test {\n use crate::{\n encrypted_logs::payload::compute_encrypted_note_log, keys::public_keys::{OvpkM, IvpkM},\n test::mocks::mock_note::MockNoteBuilder\n };\n use dep::protocol_types::{address::AztecAddress, point::Point};\n use std::test::OracleMock;\n\n #[test]\n fn test_encrypted_note_log_matches_typescript() {\n // All the values in this test were copied over from `tagged_log.test.ts`\n let contract_address = AztecAddress::from_field(0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04);\n let storage_slot = 0x0fe46be583b71f4ab5b70c2657ff1d05cccf1d292a9369628d1a194f944e6599;\n let ovsk_app = 0x03a6513d6def49f41d20373d2cec894c23e7492794b08fc50c0e8a1bd2512612;\n let ovpk_m = OvpkM {\n inner: Point {\n x: 0x1961448682803198631f299340e4206bb12809d4bebbf012b30f59af73ba1a15,\n y: 0x133674060c3925142aceb4f1dcd9f9137d0217d37ff8729ee5ceaa6e2790353d,\n is_infinite: false\n }\n };\n let ivpk_m = IvpkM {\n inner: Point {\n x: 0x260cd3904f6df16e974c29944fdc839e40fb5cf293f03df2eb370851d3a527bc,\n y: 0x0eef2964fe6640e84c82b5d2915892409b38e9e25d39f68dd79edb725c55387f,\n is_infinite: false\n }\n };\n\n let note_value = 0x301640ceea758391b2e161c92c0513f129020f4125256afdae2646ce31099f5c;\n let note = MockNoteBuilder::new(note_value).contract_address(contract_address).storage_slot(storage_slot).build();\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk);\n\n let recipient = AztecAddress::from_field(0x10ee41ee4b62703b16f61e03cb0d88c4b306a9eb4a6ceeb2aff13428541689a2);\n\n let log: [u8; 448] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n note\n );\n\n // The following value was generated by `tagged_log.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let encrypted_note_log_from_typescript = [\n 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, 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, 141, 70, 12, 14, 67, 77, 132, 110, 193, 234, 40, 110, 64, 144, 235, 86, 55, 111, 242, 123, 221, 193, 170, 202, 225, 216, 86, 84, 159, 112, 31, 167, 126, 79, 51, 186, 47, 71, 253, 172, 99, 112, 241, 59, 197, 241, 107, 186, 232, 87, 187, 230, 171, 62, 228, 234, 42, 51, 145, 146, 238, 242, 42, 71, 206, 13, 244, 66, 111, 195, 20, 203, 98, 148, 204, 242, 145, 183, 156, 29, 141, 54, 44, 220, 194, 35, 229, 16, 32, 204, 211, 49, 142, 112, 82, 202, 116, 241, 254, 146, 42, 217, 20, 189, 70, 228, 182, 171, 205, 104, 27, 99, 171, 28, 91, 244, 21, 30, 130, 240, 5, 72, 174, 124, 97, 197, 157, 248, 193, 23, 193, 76, 46, 141, 144, 70, 211, 45, 67, 167, 218, 129, 140, 104, 190, 41, 110, 249, 209, 68, 106, 135, 164, 80, 235, 63, 101, 80, 32, 13, 38, 99, 145, 91, 11, 173, 151, 231, 247, 65, 153, 117, 229, 167, 64, 239, 182, 126, 235, 83, 4, 169, 8, 8, 160, 4, 235, 252, 21, 96, 84, 161, 69, 145, 145, 215, 254, 161, 117, 246, 198, 65, 89, 179, 194, 90, 19, 121, 12, 202, 114, 80, 195, 14, 60, 128, 105, 142, 100, 86, 90, 108, 157, 219, 22, 172, 20, 121, 195, 25, 159, 236, 2, 70, 75, 42, 37, 34, 2, 17, 149, 20, 176, 32, 18, 204, 56, 117, 121, 34, 15, 3, 88, 123, 64, 68, 74, 233, 63, 59, 131, 222, 194, 192, 167, 110, 217, 10, 128, 73, 129, 172, 205, 103, 212, 60, 151, 141, 10, 151, 222, 151, 180, 43, 91, 148, 201, 110, 165, 10, 238, 32, 134, 235, 99, 216, 200, 182, 31, 22, 156, 18, 209, 222, 172, 239, 193, 212, 86, 99, 62, 70, 182, 45, 175, 241, 91, 202, 179, 225, 236, 95, 71, 66, 151, 225, 203, 53, 216, 85, 102, 130, 6, 8, 25, 180, 86, 58, 140, 198, 105, 102, 177, 42, 94, 115, 247, 145, 147, 24, 231, 39, 73, 27, 10, 219, 130, 115, 188, 74, 114, 5, 177, 199, 83, 183, 106, 87, 204, 238, 231, 72, 45, 240, 39, 174, 25, 98, 53, 187, 156, 159, 244, 38\n ];\n for i in 0..encrypted_note_log_from_typescript.len() {\n assert_eq(log[i], encrypted_note_log_from_typescript[i]);\n }\n assert_eq(encrypted_note_log_from_typescript.len(), log.len());\n }\n}\n"},"124":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr","source":"use crate::{\n context::PrivateContext, note::{note_emission::NoteEmission, note_interface::NoteInterface},\n keys::{getters::get_current_public_keys, public_keys::{OvpkM, IvpkM}},\n encrypted_logs::payload::compute_encrypted_note_log, oracle::logs_traits::LensForEncryptedLog\n};\nuse dep::protocol_types::{hash::sha256_to_field, address::AztecAddress, abis::note_hash::NoteHash};\n\nunconstrained fn compute_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> ([u8; M], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n compute(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n )\n}\n\nfn compute<Note, let N: u32, let NB: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note\n) -> ([u8; M], Field) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n let encrypted_log: [u8; M] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n );\n let log_hash = sha256_to_field(encrypted_log);\n (encrypted_log, log_hash)\n}\n\nfn emit_with_keys<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n note: Note,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n inner_compute: fn(AztecAddress, Field, Field, OvpkM, IvpkM, AztecAddress, Note) -> ([u8; M], Field)\n) where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n let note_header = note.get_header();\n let note_hash_counter = note_header.note_hash_counter;\n let storage_slot = note_header.storage_slot;\n\n let note_exists = context.note_hashes.storage.any(|n: NoteHash| n.counter == note_hash_counter);\n assert(note_exists, \"Can only emit a note log for an existing note.\");\n\n let contract_address: AztecAddress = context.this_address();\n let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n let (encrypted_log, log_hash) = inner_compute(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note\n );\n\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n}\n\npub fn encode_and_encrypt_note<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n emit_with_keys(context, e.note, ovpk, ivpk, iv, compute);\n }\n}\n\npub fn encode_and_encrypt_note_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(&mut PrivateContext, AztecAddress, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovpk = get_current_public_keys(context, ov).ovpk_m;\n let ivpk = get_current_public_keys(context, iv).ivpk_m;\n emit_with_keys(context, e.note, ovpk, ivpk, iv, compute_unconstrained);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys_unconstrained<Note, let N: u32, let NB: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N, NB>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n emit_with_keys(context, e.note, ovpk, ivpk, recipient, compute_unconstrained);\n }\n}\n"},"125":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/outgoing_body.nr","source":"use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, constants::GENERATOR_INDEX__SYMMETRIC_KEY,\n hash::poseidon2_hash_with_separator\n};\nuse std::aes128::aes128_encrypt;\n\nuse crate::{keys::public_keys::IvpkM, utils::point::point_to_bytes};\n\nstruct EncryptedLogOutgoingBody {\n eph_sk: Scalar,\n recipient: AztecAddress,\n recipient_ivpk: IvpkM,\n}\n\nimpl EncryptedLogOutgoingBody {\n pub fn new(eph_sk: Scalar, recipient: AztecAddress, recipient_ivpk: IvpkM) -> Self {\n Self { eph_sk, recipient, recipient_ivpk }\n }\n\n /// Encrypts ephemeral secret key and recipient's ivpk --> with this information the recipient of outgoing will\n /// be able to derive the key with which the incoming log can be decrypted.\n pub fn compute_ciphertext(self, ovsk_app: Scalar, eph_pk: Point) -> [u8; 144] {\n // Again, we could compute `eph_pk` here, but we keep the interface more similar\n // and also make it easier to optimise it later as we just pass it along\n\n let mut buffer = [0 as u8; 128];\n\n let serialized_eph_sk_high: [u8; 32] = self.eph_sk.hi.to_be_bytes();\n let serialized_eph_sk_low: [u8; 32] = self.eph_sk.lo.to_be_bytes();\n\n let address_bytes: [u8; 32] = self.recipient.to_field().to_be_bytes();\n let serialized_recipient_ivpk = point_to_bytes(self.recipient_ivpk.to_point());\n\n for i in 0..32 {\n buffer[i] = serialized_eph_sk_high[i];\n buffer[i + 32] = serialized_eph_sk_low[i];\n buffer[i + 64] = address_bytes[i];\n }\n for i in 0..32 {\n buffer[i + 96] = serialized_recipient_ivpk[i];\n }\n\n // We compute the symmetric key using poseidon.\n let full_key: [u8; 32] = poseidon2_hash_with_separator(\n [ovsk_app.hi, ovsk_app.lo, eph_pk.x, eph_pk.y],\n GENERATOR_INDEX__SYMMETRIC_KEY as Field\n ).to_be_bytes();\n\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(buffer, iv, sym_key).as_array()\n }\n}\n\nmod test {\n use crate::{encrypted_logs::outgoing_body::EncryptedLogOutgoingBody, keys::public_keys::IvpkM};\n use dep::protocol_types::{address::AztecAddress, scalar::Scalar};\n use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key;\n\n #[test]\n fn test_encrypted_log_outgoing_body_matches_typescript() {\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000d0d302ee245dfaf2807e604eec4715fe,\n hi: 0x000000000000000000000000000000000f096b423017226a18461115fa8d34bb\n };\n let recipient_ivsk = Scalar {\n lo: 0x000000000000000000000000000000004828f8f95676ebb481df163f87fd4022,\n hi: 0x000000000000000000000000000000000f4d97c25d578f9348251a71ca17ae31\n };\n let sender_ovsk_app = Scalar {\n lo: 0x0000000000000000000000000000000074d2e28c6bc5176ac02cf7c7d36a444e,\n hi: 0x00000000000000000000000000000000089c6887cb1446d86c64e81afc78048b\n };\n\n let eph_pk = derive_public_key(eph_sk);\n let recipient_ivpk = IvpkM { inner: derive_public_key(recipient_ivsk) };\n\n let recipient = AztecAddress::from_field(0xdeadbeef);\n\n let body = EncryptedLogOutgoingBody::new(eph_sk, recipient, recipient_ivpk);\n\n let ciphertext = body.compute_ciphertext(sender_ovsk_app, eph_pk);\n\n // The following value was generated by `encrypted_log_outgoing_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let outgoing_body_ciphertext_from_typescript = [\n 127, 182, 227, 75, 192, 197, 54, 47, 168, 134, 233, 148, 251, 46, 86, 12, 73, 50, 238, 50, 31, 174, 27, 202, 110, 77, 161, 197, 244, 124, 17, 100, 143, 150, 232, 14, 156, 248, 43, 177, 16, 82, 244, 103, 88, 74, 84, 200, 15, 65, 187, 14, 163, 60, 91, 22, 104, 31, 211, 190, 124, 121, 79, 92, 239, 65, 185, 106, 51, 178, 168, 137, 84, 43, 79, 158, 151, 152, 83, 42, 170, 13, 106, 209, 254, 74, 39, 145, 73, 215, 17, 234, 196, 89, 30, 58, 120, 127, 88, 69, 121, 61, 18, 206, 89, 118, 243, 238, 177, 71, 73, 47, 147, 4, 155, 25, 173, 248, 206, 52, 17, 180, 122, 186, 106, 191, 252, 102, 197, 91, 16, 39, 94, 91, 224, 30, 168, 177, 26, 144, 5, 124, 128, 6\n ];\n\n for i in 0..outgoing_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], outgoing_body_ciphertext_from_typescript[i]);\n }\n assert_eq(outgoing_body_ciphertext_from_typescript.len(), ciphertext.len());\n }\n}\n"},"126":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\n\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::ToPoint};\n\nuse std::aes128::aes128_encrypt;\n\nstruct EncryptedLogHeader {\n address: AztecAddress,\n}\n\nimpl EncryptedLogHeader {\n fn new(address: AztecAddress) -> Self {\n EncryptedLogHeader { address }\n }\n\n fn compute_ciphertext<T>(self, secret: Scalar, pk: T) -> [u8; 48] where T: ToPoint {\n let full_key = point_to_symmetric_key(secret, pk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n\n let input: [u8; 32] = self.address.to_field().to_be_bytes();\n aes128_encrypt(input, iv, sym_key).as_array()\n }\n}\n\n#[test]\nfn test_encrypted_log_header_matches_noir() {\n let address = AztecAddress::from_field(0xdeadbeef);\n let header = EncryptedLogHeader::new(address);\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = crate::keys::public_keys::IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let ciphertext = header.compute_ciphertext(secret, point);\n\n // The following value was generated by `encrypted_log_header.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_header_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 194, 44, 7, 131, 160, 83, 64, 181, 98, 38, 153, 214, 62, 171, 253, 161, 111, 191, 28, 247, 216, 26, 222, 171, 176, 218, 48, 209, 73, 89, 200, 209\n ];\n\n assert_eq(ciphertext, expected_header_ciphertext_from_typescript);\n}\n"},"127":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/incoming_body.nr","source":"use crate::note::note_interface::NoteInterface;\nuse crate::event::event_interface::EventInterface;\nuse dep::protocol_types::{scalar::Scalar};\n\nuse std::aes128::aes128_encrypt;\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::IvpkM};\n\nstruct EncryptedLogIncomingBody<let M: u32> {\n plaintext: [u8; M]\n}\n\nimpl<let M: u32> EncryptedLogIncomingBody<M> {\n pub fn from_note<T, let N: u32>(note: T, storage_slot: Field) -> Self where T: NoteInterface<N, M> {\n let mut plaintext = note.to_be_bytes(storage_slot);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn from_event<T, let MR: u32>(\n event: T,\n randomness: Field\n ) -> Self where T: EventInterface<M, MR> {\n let mut plaintext = event.private_to_be_bytes(randomness);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn compute_ciphertext(self, eph_sk: Scalar, ivpk: IvpkM) -> [u8] {\n let full_key = point_to_symmetric_key(eph_sk, ivpk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(self.plaintext, iv, sym_key)\n }\n}\n\nmod test {\n use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, traits::Serialize,\n abis::event_selector::EventSelector\n };\n\n use crate::{\n note::{note_header::NoteHeader, note_interface::NoteInterface},\n encrypted_logs::incoming_body::EncryptedLogIncomingBody, event::event_interface::EventInterface,\n context::PrivateContext, keys::public_keys::IvpkM\n };\n\n struct AddressNote {\n address: AztecAddress,\n owner: AztecAddress,\n randomness: Field,\n header: NoteHeader,\n }\n\n global ADDRESS_NOTE_LEN: Field = 3;\n global ADDRESS_NOTE_BYTES_LEN = 32 * 3 + 64;\n\n impl NoteInterface<ADDRESS_NOTE_LEN, ADDRESS_NOTE_BYTES_LEN> for AddressNote {\n fn compute_note_hiding_point(_self: Self) -> Point {\n crate::generators::Ga1\n }\n\n fn get_note_type_id() -> Field {\n 1\n }\n\n fn get_header(self) -> NoteHeader {\n self.header\n }\n\n fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n fn compute_nullifier(\n _self: Self,\n _context: &mut PrivateContext,\n _note_hash_for_nullify: Field\n ) -> Field {\n 1\n }\n\n fn compute_nullifier_without_context(_self: Self) -> Field {\n 1\n }\n\n fn serialize_content(self) -> [Field; ADDRESS_NOTE_LEN] {\n [self.address.to_field(), self.owner.to_field(), self.randomness]\n }\n\n fn deserialize_content(fields: [Field; ADDRESS_NOTE_LEN]) -> Self {\n AddressNote {\n address: AztecAddress::from_field(fields[0]),\n owner: AztecAddress::from_field(fields[1]),\n randomness: fields[2],\n header: NoteHeader::empty()\n }\n }\n\n fn to_be_bytes(self, storage_slot: Field) -> [u8; ADDRESS_NOTE_BYTES_LEN] {\n let serialized_note = self.serialize_content();\n\n let mut buffer: [u8; ADDRESS_NOTE_BYTES_LEN] = [0; ADDRESS_NOTE_BYTES_LEN];\n\n let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes();\n let note_type_id_bytes: [u8; 32] = AddressNote::get_note_type_id().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = storage_slot_bytes[i];\n buffer[32 + i] = note_type_id_bytes[i];\n }\n\n for i in 0..serialized_note.len() {\n let bytes: [u8; 32] = serialized_note[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n buffer\n }\n }\n\n impl AddressNote {\n pub fn new(address: AztecAddress, owner: AztecAddress, randomness: Field) -> Self {\n AddressNote { address, owner, randomness, header: NoteHeader::empty() }\n }\n }\n\n #[test]\n fn test_encrypted_note_log_incoming_body_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let note = AddressNote::new(\n AztecAddress::from_field(0x1),\n AztecAddress::from_field(0x2),\n 3\n );\n\n let storage_slot = 2;\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n // 1. `EncryptedLogIncomingBody::from_note` calls `note.to_be_bytes(storage_slot)` function which serializes\n // the note to bytes - note that in the case of `AddressNote` the `to_be_bytes` function was automatically\n // implemented by Aztec macros.\n let body = EncryptedLogIncomingBody::from_note(note, storage_slot);\n\n // 2. `body.compute_ciphertext(...)` function then derives symmetric key from `eph_sk` and `ivpk` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93, 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130, 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95, 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234, 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162, 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185, 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236, 23, 206, 229, 108\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n\n struct TestEvent {\n value0: Field,\n value1: Field,\n value2: Field,\n }\n\n impl Serialize<3> for TestEvent {\n fn serialize(self) -> [Field; 3] {\n [self.value0, self.value1, self.value2]\n }\n }\n\n global TEST_EVENT_LEN: Field = 3;\n global TEST_EVENT_BYTES_LEN = 32 * 3 + 64;\n global TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS = 32 * 3 + 32;\n\n impl EventInterface<TEST_EVENT_BYTES_LEN, TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS> for TestEvent {\n fn get_event_type_id() -> EventSelector {\n comptime\n {\n EventSelector::from_signature(\"TestEvent(Field,Field,Field)\")\n }\n }\n\n fn private_to_be_bytes(self, randomness: Field) -> [u8; TEST_EVENT_BYTES_LEN] {\n let mut buffer: [u8; TEST_EVENT_BYTES_LEN] = [0; TEST_EVENT_BYTES_LEN];\n\n let randomness_bytes: [u8; 32] = randomness.to_be_bytes();\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = randomness_bytes[i];\n buffer[32 + i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn to_be_bytes(self) -> [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] {\n let mut buffer: [u8; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS] = [0; TEST_EVENT_BYTES_LEN_WITHOUT_RANDOMNESS];\n\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[32 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n }\n\n #[test]\n fn test_encrypted_log_event_incoming_body() {\n let test_event = TestEvent { value0: 1, value1: 2, value2: 3 };\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let randomness = 2;\n\n let body = EncryptedLogIncomingBody::from_event(test_event, randomness);\n\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_event_log_incoming_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let event_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 185, 29, 14, 152, 216, 130, 219, 151, 80, 185, 43, 223, 167, 8, 89, 189, 88, 188, 101, 137, 255, 136, 84, 252, 79, 18, 52, 3, 110, 54, 54, 206, 244, 209, 246, 226, 207, 247, 143, 253, 211, 75, 160, 224, 172, 41, 45, 7, 208, 137, 90, 56, 59, 4, 234, 48, 53, 23, 130, 230, 49, 249, 142, 243, 170, 72, 183, 242, 49, 124, 46, 52, 198, 75, 55, 102, 56, 89, 254, 67, 59, 157, 249, 120, 184, 67, 154, 16, 148, 227, 93, 37, 120, 199, 93, 166, 80, 127, 173, 52, 80, 135, 87, 1, 168, 164, 51, 48, 126, 120, 47, 102, 211, 227, 234, 170, 208, 99, 111, 198, 170, 226, 156, 244, 241, 174, 206, 30\n ];\n\n assert_eq(event_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..event_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], event_body_ciphertext_from_typescript[i]);\n }\n }\n}\n"},"131":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr","source":"use dep::protocol_types::{constants::{MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, GET_NOTES_ORACLE_RETURN_LENGTH}};\nuse crate::context::PrivateContext;\nuse crate::note::{\n constants::{GET_NOTE_ORACLE_RETURN_LENGTH, VIEW_NOTE_ORACLE_RETURN_LENGTH},\n note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder, NoteStatus, PropertySelector},\n note_interface::NoteInterface, note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_request\n};\nuse crate::oracle;\nuse crate::utils::comparison::compare;\n\npub use crate::note::constants::MAX_NOTES_PER_PAGE;\n\nmod test;\n\nfn extract_property_value_from_selector<let N: u32>(\n serialized_note: [Field; N],\n selector: PropertySelector\n) -> Field {\n // Selectors use PropertySelectors in order to locate note properties inside the serialized note.\n // This allows easier packing and custom (de)serialization schemas. A note property is located\n // inside the serialized note using the index inside the array, a byte offset and a length.\n let value: [u8; 32] = serialized_note[selector.index].to_be_bytes();\n let offset = selector.offset;\n let length = selector.length;\n let mut value_field = 0 as Field;\n let mut acc: Field = 1;\n for i in 0..32 {\n if i < length {\n value_field += value[31 + offset - i] as Field * acc;\n acc = acc * 256;\n }\n }\n value_field\n}\n\nfn check_note_header<Note, let N: u32, let M: u32>(\n context: PrivateContext,\n storage_slot: Field,\n note: Note\n) where Note: NoteInterface<N, M> {\n let header = note.get_header();\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address), \"Mismatch note header contract address.\");\n assert(header.storage_slot == storage_slot, \"Mismatch note header storage slot.\");\n}\n\nfn check_note_fields<let N: u32>(\n serialized_note: [Field; N],\n selects: BoundedVec<Option<Select>, N>\n) {\n for i in 0..selects.len {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n let value_field = extract_property_value_from_selector(serialized_note, select.property_selector);\n\n assert(\n compare(value_field, select.comparator, select.value.to_field()), \"Mismatch return note field.\"\n );\n }\n}\n\nfn check_notes_order<let N: u32>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>\n) {\n for i in 0..sorts.len {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let field_0 = extract_property_value_from_selector(fields_0, sort.property_selector);\n let field_1 = extract_property_value_from_selector(fields_1, sort.property_selector);\n let eq = field_0 == field_1;\n let lt = field_0.lt(field_1);\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n storage_slot: Field\n) -> (Note, Field) where Note: NoteInterface<N, M> {\n let note = unsafe {\n get_note_internal(storage_slot)\n };\n\n // Constraining that we got a valid note from the oracle is fairly straightforward: all we need to do is check that\n // the metadata is correct, and that the note exists.\n check_note_header(*context, storage_slot, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n context.push_note_hash_read_request(note_hash_for_read_request);\n\n (note, note_hash_for_read_request)\n}\n\npub fn get_notes<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N, M> + Eq {\n let opt_notes = unsafe {\n get_notes_internal(storage_slot, options)\n };\n\n // We apply the constraints in a separate function instead of inlining them here to make it easier to test that\n // these checks correctly reject bad notes.\n constrain_get_notes_internal(context, storage_slot, opt_notes, options)\n}\n\nunconstrained fn apply_preprocessor<Note, PREPROCESSOR_ARGS>(\n notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor: fn([Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], PREPROCESSOR_ARGS) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor_args: PREPROCESSOR_ARGS\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] {\n preprocessor(notes, preprocessor_args)\n}\n\nfn constrain_get_notes_internal<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n opt_notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N, M> + Eq {\n // The filter is applied first to avoid pushing note read requests for notes we're not interested in. Note that\n // while the filter function can technically mutate the contents of the notes (as opposed to simply removing some),\n // the private kernel will later validate that these note actually exist, so transformations would cause for that\n // check to fail.\n let filter_fn = options.filter;\n let filter_args = options.filter_args;\n let filtered_notes = filter_fn(opt_notes, filter_args);\n\n let notes = crate::utils::collapse_array(filtered_notes);\n let mut note_hashes: BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL> = BoundedVec::new();\n\n // We have now collapsed the sparse array of Options into a BoundedVec. This is a more ergonomic type and also\n // results in reduced gate counts when setting a limit value, since we guarantee that the limit is an upper bound\n // for the runtime length, and can therefore have fewer loop iterations.\n assert(notes.len() <= options.limit, \"Got more notes than limit.\");\n\n let mut prev_fields = [0; N];\n for i in 0..options.limit {\n if i < notes.len() {\n let note = notes.get_unchecked(i);\n let fields = note.serialize_content();\n check_note_header(*context, storage_slot, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_note_hash_read_request(note_hash_for_read_request);\n note_hashes.push(note_hash_for_read_request);\n };\n }\n\n (notes, note_hashes)\n}\n\nunconstrained fn get_note_internal<Note, let N: u32, let M: u32>(storage_slot: Field) -> Note where Note: NoteInterface<N, M> {\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n oracle::notes::get_notes(\n storage_slot,\n 0,\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n NoteStatus.ACTIVE,\n placeholder_note,\n placeholder_fields,\n placeholder_note_length\n )[0].unwrap() // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, let N: u32, let M: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, M, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where Note: NoteInterface<N, M> {\n // This function simply performs some transformations from NoteGetterOptions into the types required by the oracle.\n\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n apply_preprocessor(opt_notes, options.preprocessor, options.preprocessor_args)\n}\n\nunconstrained pub fn view_notes<Note, let N: u32, let M: u32>(\n storage_slot: Field,\n options: NoteViewerOptions<Note, N, M>\n) -> BoundedVec<Note, MAX_NOTES_PER_PAGE> where Note: NoteInterface<N, M> {\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let notes_array = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n let mut notes = BoundedVec::new();\n for i in 0..notes_array.len() {\n if notes_array[i].is_some() {\n notes.push(notes_array[i].unwrap_unchecked());\n }\n }\n\n notes\n}\n\nunconstrained fn flatten_options<let N: u32>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>\n) -> (u8, [u8; N], [u8; N], [u8; N], [Field; N], [u8; N], [u8; N], [u8; N], [u8; N], [u8; N]) {\n let mut num_selects = 0;\n let mut select_by_indexes = [0; N];\n let mut select_by_offsets = [0; N];\n let mut select_by_lengths = [0; N];\n let mut select_values = [0; N];\n let mut select_comparators = [0; N];\n\n for i in 0..selects.len {\n let select = selects.get(i);\n if select.is_some() {\n select_by_indexes[num_selects] = select.unwrap_unchecked().property_selector.index;\n select_by_offsets[num_selects] = select.unwrap_unchecked().property_selector.offset;\n select_by_lengths[num_selects] = select.unwrap_unchecked().property_selector.length;\n select_values[num_selects] = select.unwrap_unchecked().value;\n select_comparators[num_selects] = select.unwrap_unchecked().comparator;\n num_selects += 1;\n };\n }\n\n let mut sort_by_indexes = [0; N];\n let mut sort_by_offsets = [0; N];\n let mut sort_by_lengths = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by_indexes[i] = sort.unwrap_unchecked().property_selector.index;\n sort_by_offsets[i] = sort.unwrap_unchecked().property_selector.offset;\n sort_by_lengths[i] = sort.unwrap_unchecked().property_selector.length;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (\n num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order\n )\n}\n"},"133":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/utils.nr","source":"use crate::{context::PrivateContext, note::{note_header::NoteHeader, note_interface::NoteInterface}};\n\nuse dep::protocol_types::{\n hash::{\n compute_unique_note_hash, compute_siloed_note_hash as compute_siloed_note_hash,\n compute_siloed_nullifier as compute_siloed_nullifier_from_preimage\n},\n utils::arr_copy_slice\n};\n\npub fn compute_siloed_nullifier<Note, let N: u32, let M: u32>(\n note_with_header: Note,\n context: &mut PrivateContext\n) -> Field where Note: NoteInterface<N, M> {\n let header = note_with_header.get_header();\n let note_hash_for_nullify = compute_note_hash_for_nullify(note_with_header);\n let inner_nullifier = note_with_header.compute_nullifier(context, note_hash_for_nullify);\n\n compute_siloed_nullifier_from_preimage(header.contract_address, inner_nullifier)\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_read_request<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n let nonce = note.get_header().nonce;\n let counter = note.get_header().note_hash_counter;\n\n if counter != 0 {\n note_hash\n } else {\n compute_unique_note_hash(nonce, note_hash)\n }\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_nullify_internal<Note, let N: u32, let M: u32>(\n note: Note,\n note_hash_for_read_request: Field\n) -> Field where Note: NoteInterface<N, M> {\n let header = note.get_header();\n\n if header.note_hash_counter != 0 {\n if header.nonce == 0 {\n // Case 1: Transient note\n note_hash_for_read_request\n } else {\n // Case 2: Non-revertible note, nullified by a revertible nullifier\n let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash_for_read_request);\n compute_siloed_note_hash(header.contract_address, unique_note_hash)\n }\n } else {\n // Case 3: Note from a previous transaction\n // note_hash_for_read_request is already the unique_note_hash in this case\n compute_siloed_note_hash(header.contract_address, note_hash_for_read_request)\n }\n}\n\n// TODO(#7775): nuke this commented out code - kept it around as it contains comments which might be helpful when tackling #7775\n// pub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n// let header = note.get_header();\n// // There are 3 cases for reading a note intended for consumption:\n// // 1. The note was inserted in this transaction, is revertible, or is not nullified by a revertible nullifier in \n// // the same transaction: (note_hash_counter != 0) & (nonce == 0)\n// // 2. The note was inserted in this transaction, is non-revertible, and is nullified by a revertible nullifier in \n// // the same transaction: (note_hash_counter != 0) & (nonce != 0)\n// // 3. The note was inserted in a previous transaction: (note_hash_counter == 0) & (nonce != 0)\n\n// // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n// let note_hash = note.compute_note_hiding_point().x;\n\n// if header.nonce == 0 {\n// // Case 1.\n// // If a note is transient, we just read the note_hash (kernel will hash it with nonce and silo by contract address).\n// note_hash\n// } else {\n// // Case 2: If a note is non-revertible, and is nullified by a revertible nullifier, we cannot squash them in the \n// // private reset circuit. Because if the tx reverts, we will have to keep the note hash and throw away the \n// // nullifier.\n// // And if the tx does not revert, both will be emitted. In which case, the nullifier must be created in the app\n// // from the siloed note hash.\n// // The kernel circuit will check that a nullifier with non-zero note_nonce is linked to a note hash, whose\n// // siloed note hash matches the note hash specified in the nullifier.\n\n// // Case 3: If a note is not from the current transaction, that means we are reading a settled note (from \n// // tree) created in a previous TX. So we need the siloed_note_hash which has already been hashed with\n// // nonce and then contract address. This hash will match the existing leaf in the note hash\n// // tree, so the kernel can just perform a membership check directly on this hash/leaf.\n// let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash);\n// compute_siloed_note_hash(header.contract_address, unique_note_hash)\n// // IMPORTANT NOTE ON REDUNDANT SILOING BY CONTRACT ADDRESS: The note hash computed above is\n// // \"siloed\" by contract address. When a note hash is computed solely for the purpose of\n// // nullification, it is not strictly necessary to silo the note hash before computing\n// // its nullifier. In other words, it is NOT NECESSARY for protocol security that a nullifier\n// // be computed from a siloed note hash. After all, persistable note hashes and nullifiers are\n// // siloed by the kernel circuit. That being said, the siloed note hash computed above CAN be\n// // used for nullifier computation, and this achieves the (arguably unnecessary) property that\n// // nullifiers are computed from a note hash's fully-computed note hash tree leaf.\n// }\n// }\n\npub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N, M> {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request)\n}\n\npub fn compute_note_hash_and_optionally_a_nullifier<T, let N: u32, let M: u32, let S: u32>(\n deserialize_content: fn([Field; N]) -> T,\n note_header: NoteHeader,\n compute_nullifier: bool,\n serialized_note: [Field; S]\n) -> [Field; 4] where T: NoteInterface<N, M> {\n let mut note = deserialize_content(arr_copy_slice(serialized_note, [0; N], 0));\n note.set_header(note_header);\n\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n let unique_note_hash = compute_unique_note_hash(note_header.nonce, note_hash);\n let siloed_note_hash = compute_siloed_note_hash(note_header.contract_address, unique_note_hash);\n\n let inner_nullifier = if compute_nullifier {\n note.compute_nullifier_without_context()\n } else {\n 0\n };\n // docs:start:compute_note_hash_and_optionally_a_nullifier_returns\n [note_hash, unique_note_hash, siloed_note_hash, inner_nullifier]\n // docs:end:compute_note_hash_and_optionally_a_nullifier_returns\n}\n"},"134":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr","source":"use crate::context::{PrivateContext, PublicContext};\nuse crate::note::{\n note_header::NoteHeader, note_interface::NoteInterface,\n utils::{compute_note_hash_for_read_request, compute_note_hash_for_nullify_internal},\n note_emission::NoteEmission\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, N, M>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note\n) -> NoteEmission<Note> where Note: NoteInterface<N, M> {\n let contract_address = (*context).this_address();\n let note_hash_counter = context.side_effect_counter;\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter };\n note.set_header(header);\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n\n let serialized_note = Note::serialize_content(*note);\n assert(\n notify_created_note(\n storage_slot,\n Note::get_note_type_id(),\n serialized_note,\n note_hash,\n note_hash_counter\n )\n == 0\n );\n\n context.push_note_hash(note_hash);\n\n NoteEmission::new(*note)\n}\n\npub fn create_note_hash_from_public<Note, N, M>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note\n) where Note: NoteInterface<N, M> {\n let contract_address = (*context).this_address();\n // Public note hashes are transient, but have no side effect counters, so we just need note_hash_counter != 0\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter: 1 };\n note.set_header(header);\n // TODO(#7771): inject compute_note_hash(...) func to notes with macros.\n let note_hash = note.compute_note_hiding_point().x;\n\n context.push_note_hash(note_hash);\n}\n\n// Note: This function is currently totally unused.\npub fn destroy_note<Note, N, M>(\n context: &mut PrivateContext,\n note: Note\n) where Note: NoteInterface<N, M> {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n\n destroy_note_unsafe(context, note, note_hash_for_read_request)\n}\n\npub fn destroy_note_unsafe<Note, N, M>(\n context: &mut PrivateContext,\n note: Note,\n note_hash_for_read_request: Field\n) where Note: NoteInterface<N, M> {\n let note_hash_for_nullify = compute_note_hash_for_nullify_internal(note, note_hash_for_read_request);\n let nullifier = note.compute_nullifier(context, note_hash_for_nullify);\n\n let note_hash_counter = note.get_header().note_hash_counter;\n let notification_note_hash = if (note_hash_counter == 0) {\n // Counter is zero, so we're nullifying a settled note and we don't populate the note_hash with real value.\n 0\n } else {\n // A non-zero note hash counter implies that we're nullifying a pending note (i.e. one that has not yet been\n // persisted in the trees and is instead in the pending new note hashes array). In such a case we populate its\n // hash with real value to inform the kernel which note we're nullifyng so that it can either squash both\n // the note and the nullifier if it's an inner note hash, or check that the it matches a pending note if it's\n // a siloed note hash.\n note_hash_for_nullify\n };\n\n let nullifier_counter = context.side_effect_counter;\n assert(notify_nullified_note(nullifier, notification_note_hash, nullifier_counter) == 0);\n\n context.push_nullifier_for_note_hash(nullifier, notification_note_hash)\n}\n\n"},"135":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_emission.nr","source":"/**\n * A note emission struct containing the information required for emitting a note.\n * The exact `emit` logic is passed in by the application code\n */\nstruct NoteEmission<Note> {\n note: Note\n}\n\nimpl<Note> NoteEmission<Note> {\n pub fn new(note: Note) -> Self {\n Self { note }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n\n pub fn discard(_self: Self) {}\n}\n\n/**\n * A struct wrapping note emission in `Option<T>`.\n * This is the struct provided to application codes, which can be used to emit\n * only when a note was actually inserted.\n * It is fairly common to have cases where a function conditionally inserts,\n * and this allows us to keep the same API for emission in both cases (e.g. inserting \n * a change note in a token's transfer function only when there is \"change\" left).\n */\nstruct OuterNoteEmission<Note> {\n emission: Option<NoteEmission<Note>>,\n}\n\nimpl<Note> OuterNoteEmission<Note> {\n pub fn new(emission: Option<NoteEmission<Note>>) -> Self {\n Self { emission }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](NoteEmission<Note>) -> ()) {\n if self.emission.is_some() {\n _emit(self.emission.unwrap());\n }\n }\n\n pub fn discard(_self: Self) {}\n}\n"},"143":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{\n GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, ARGS_HASH_CHUNK_COUNT,\n GENERATOR_INDEX__FUNCTION_ARGS, ARGS_HASH_CHUNK_LENGTH, MAX_ARGS_LENGTH\n},\n point::Point, traits::Hash, hash::{sha256_to_field, poseidon2_hash_with_separator}\n};\nuse crate::oracle::logs_traits::ToBytesForUnencryptedLog;\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, let N: u32, let M: u32>(\n contract_address: AztecAddress,\n log: T\n) -> Field where T: ToBytesForUnencryptedLog<N, M> {\n let message_bytes: [u8; N] = log.to_be_bytes_arr();\n // can't use N - not in scope error\n let n = message_bytes.len();\n let mut hash_bytes = [0; M];\n // Address is converted to 32 bytes in ts\n let address_bytes = contract_address.to_be_bytes_arr();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (n as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[36 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\nstruct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n hash_args(args.as_slice())\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n assert(args.len() <= MAX_ARGS_LENGTH, \"Args length exceeds maximum\");\n let mut chunks_hashes = [0; ARGS_HASH_CHUNK_COUNT];\n let mut current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n\n let mut current_chunk_index = 0;\n let mut index_inside_current_chunk = 0;\n for i in 0..args.len() {\n current_chunk_values[index_inside_current_chunk] = args[i];\n index_inside_current_chunk+=1;\n if index_inside_current_chunk == ARGS_HASH_CHUNK_LENGTH {\n chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n current_chunk_values = [0; ARGS_HASH_CHUNK_LENGTH];\n current_chunk_index+=1;\n index_inside_current_chunk = 0;\n }\n }\n if index_inside_current_chunk > 0 {\n chunks_hashes[current_chunk_index] = poseidon2_hash_with_separator(current_chunk_values, GENERATOR_INDEX__FUNCTION_ARGS);\n }\n poseidon2_hash_with_separator(chunks_hashes, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nfn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..MAX_ARGS_LENGTH {\n input.add(i as Field);\n }\n let hash = input.hash();\n assert(hash == 0x1cce4dbf69f14c44865919991ee1057922e34d7310ba237d71759aa422621ca9);\n}\n\n#[test]\nfn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nfn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nfn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nfn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"144":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/initializer.nr","source":"use dep::protocol_types::{\n address::AztecAddress, hash::poseidon2_hash_with_separator, constants::GENERATOR_INDEX__CONSTRUCTOR,\n abis::function_selector::FunctionSelector\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext}, oracle::get_contract_instance::get_contract_instance,\n oracle::get_contract_instance::get_contract_instance_avm\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn assert_is_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\n}\n\nfn compute_unsiloed_contract_initialization_nullifier(address: AztecAddress) -> Field {\n address.to_field()\n}\n\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n let address = context.this_address();\n let instance = get_contract_instance_avm(address).unwrap();\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n let address = context.this_address();\n let instance = get_contract_instance(address);\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn compute_initialization_hash(init_selector: FunctionSelector, init_args_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n"},"146":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/logs.nr","source":"use dep::protocol_types::{address::AztecAddress, point::Point};\n\n// = 480 + 32 * N bytes\n#[oracle(emitEncryptedNoteLog)]\nunconstrained fn emit_encrypted_note_log_oracle<let M: u32>(_note_hash_counter: u32, _encrypted_note: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_note_log<let M: u32>(\n note_hash_counter: u32,\n encrypted_note: [u8; M],\n counter: u32\n) {\n emit_encrypted_note_log_oracle(note_hash_counter, encrypted_note, counter)\n}\n\n#[oracle(emitEncryptedEventLog)]\nunconstrained fn emit_encrypted_event_log_oracle<let M: u32>(_contract_address: AztecAddress, _randomness: Field, _encrypted_event: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_event_log<let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n encrypted_event: [u8; M],\n counter: u32\n) {\n emit_encrypted_event_log_oracle(contract_address, randomness, encrypted_event, counter)\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedNoteLog)]\nunconstrained fn compute_encrypted_note_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _note_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_note_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_note_log_oracle(\n contract_address,\n storage_slot,\n note_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedEventLog)]\nunconstrained fn compute_encrypted_event_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _randomness: Field,\n _event_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_event_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n event_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_event_log_oracle(\n contract_address,\n randomness,\n event_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n#[oracle(emitUnencryptedLog)]\nunconstrained fn emit_unencrypted_log_oracle_private<T>(_contract_address: AztecAddress, _message: T, _counter: u32) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log_private_internal<T>(\n contract_address: AztecAddress,\n message: T,\n counter: u32\n) -> Field {\n emit_unencrypted_log_oracle_private(contract_address, message, counter)\n}\n\n#[oracle(emitContractClassUnencryptedLog)]\nunconstrained fn emit_contract_class_unencrypted_log_private<let N: u32>(\n contract_address: AztecAddress,\n message: [Field; N],\n counter: u32\n) -> Field {}\n\nunconstrained pub fn emit_contract_class_unencrypted_log_private_internal<let N: u32>(contract_address: AztecAddress, message: [Field; N], counter: u32) -> Field {\n emit_contract_class_unencrypted_log_private(contract_address, message, counter)\n}\n"},"148":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/returns.nr","source":"#[oracle(packReturns)]\nunconstrained fn pack_returns_oracle(_returns: [Field]) -> Field {}\n\nunconstrained pub fn pack_returns(returns: [Field]) {\n let _unused = pack_returns_oracle(returns);\n}\n\n#[oracle(unpackReturns)]\nunconstrained fn unpack_returns_oracle<let N: u32>(_return_hash: Field) -> [Field; N] {}\n\nunconstrained pub fn unpack_returns<let N: u32>(return_hash: Field) -> [Field; N] {\n unpack_returns_oracle(return_hash)\n}\n"},"149":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_public_data_witness.nr","source":"use dep::protocol_types::{constants::PUBLIC_DATA_TREE_HEIGHT, data::PublicDataTreeLeafPreimage, utils::arr_copy_slice};\n\nglobal LEAF_PREIMAGE_LENGTH: u32 = 4;\nglobal PUBLIC_DATA_WITNESS: Field = 45;\n\nstruct PublicDataWitness {\n index: Field,\n leaf_preimage: PublicDataTreeLeafPreimage,\n path: [Field; PUBLIC_DATA_TREE_HEIGHT],\n}\n\n#[oracle(getPublicDataTreeWitness)]\nunconstrained fn get_public_data_witness_oracle(\n _block_number: u32,\n _public_data_tree_index: Field\n) -> [Field; PUBLIC_DATA_WITNESS] {}\n\nunconstrained pub fn get_public_data_witness(\n block_number: u32,\n public_data_tree_index: Field\n) -> PublicDataWitness {\n let fields = get_public_data_witness_oracle(block_number, public_data_tree_index);\n PublicDataWitness {\n index: fields[0],\n leaf_preimage: PublicDataTreeLeafPreimage { slot: fields[1], value: fields[2], next_index: fields[3] as u32, next_slot: fields[4] },\n path: arr_copy_slice(fields, [0; PUBLIC_DATA_TREE_HEIGHT], 1 + LEAF_PREIMAGE_LENGTH)\n }\n}\n"},"150":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/key_validation_request.nr","source":"use dep::protocol_types::abis::validation_requests::{KeyValidationRequest, key_validation_request::KEY_VALIDATION_REQUEST_LENGTH};\n\n#[oracle(getKeyValidationRequest)]\nunconstrained fn get_key_validation_request_oracle(\n _pk_m_hash: Field,\n _key_index: Field\n) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {}\n\nunconstrained fn get_key_validation_request_internal(\n npk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n let result = get_key_validation_request_oracle(npk_m_hash, key_index);\n KeyValidationRequest::deserialize(result)\n}\n\nunconstrained pub fn get_key_validation_request(\n pk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n get_key_validation_request_internal(pk_m_hash, key_index)\n}\n"},"153":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/storage.nr","source":"use dep::protocol_types::{address::AztecAddress, traits::Deserialize};\n\n#[oracle(storageRead)]\nunconstrained fn storage_read_oracle<let N: u32>(address: Field, storage_slot: Field, block_number: Field, length: Field) -> [Field; N] {}\n\nunconstrained pub fn raw_storage_read<let N: u32>(\n address: AztecAddress,\n storage_slot: Field,\n block_number: u32\n) -> [Field; N] {\n storage_read_oracle(\n address.to_field(),\n storage_slot,\n block_number as Field,\n N as Field\n )\n}\n\nunconstrained pub fn storage_read<T, let N: u32>(\n address: AztecAddress,\n storage_slot: Field,\n block_number: u32\n) -> T where T: Deserialize<N> {\n T::deserialize(raw_storage_read(address, storage_slot, block_number))\n}\n\nmod tests {\n use crate::oracle::storage::{raw_storage_read, storage_read};\n use dep::protocol_types::address::AztecAddress;\n\n use std::test::OracleMock;\n use crate::test::mocks::mock_struct::MockStruct;\n\n global address = AztecAddress::from_field(29);\n global slot = 7;\n global block_number = 17;\n\n #[test]\n fn test_raw_storage_read() {\n let written = MockStruct { a: 13, b: 42 };\n\n let _ = OracleMock::mock(\"storageRead\").returns(written.serialize());\n\n let read: [Field; 2] = raw_storage_read(address, slot, block_number);\n assert_eq(read[0], 13);\n assert_eq(read[1], 42);\n }\n\n #[test]\n fn test_storage_read() {\n let written = MockStruct { a: 13, b: 42 };\n\n let _ = OracleMock::mock(\"storageRead\").returns(written.serialize());\n\n let read: MockStruct = storage_read(address, slot, block_number);\n assert_eq(read.a, 13);\n assert_eq(read.b, 42);\n }\n}\n"},"154":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/unsafe_rand.nr","source":"#[oracle(getRandomField)]\nunconstrained fn rand_oracle() -> Field {}\n\n// Called `unsafe_rand` because we do not constrain in circuit that we are dealing with an actual random value.\n// Instead we just trust our PXE.\nunconstrained pub fn unsafe_rand() -> Field {\n rand_oracle()\n}\n"},"156":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr","source":"use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) -> [Field; 2] {}\n\nunconstrained pub fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"},"157":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/keys.nr","source":"use crate::keys::{PublicKeys, public_keys::{NpkM, IvpkM, OvpkM, TpkM}};\nuse dep::protocol_types::{address::{AztecAddress, PartialAddress}, point::Point};\n\n#[oracle(getPublicKeysAndPartialAddress)]\nunconstrained fn get_public_keys_and_partial_address_oracle(_address: AztecAddress) -> [Field; 13] {}\n\nunconstrained pub fn get_public_keys_and_partial_address(address: AztecAddress) -> (PublicKeys, PartialAddress) {\n let result = get_public_keys_and_partial_address_oracle(address);\n\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: result[0], y: result[1], is_infinite: result[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: result[3], y: result[4], is_infinite: result[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: result[6], y: result[7], is_infinite: result[8] as bool } },\n tpk_m: TpkM { inner: Point { x: result[9], y: result[10], is_infinite: result[11] as bool } }\n };\n\n let partial_address = PartialAddress::from_field(result[12]);\n\n (keys, partial_address)\n}\n"},"159":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/notes.nr","source":"use crate::note::{note_header::NoteHeader, note_interface::NoteInterface};\n\nuse dep::protocol_types::{address::AztecAddress, utils::arr_copy_slice};\n\n#[oracle(notifyCreatedNote)]\nunconstrained fn notify_created_note_oracle<let N: u32>(\n _storage_slot: Field,\n _note_type_id: Field,\n _serialized_note: [Field; N],\n _note_hash: Field,\n _counter: u32\n) -> Field {}\n\nunconstrained pub fn notify_created_note<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32\n) -> Field {\n notify_created_note_oracle(storage_slot, note_type_id, serialized_note, note_hash, counter)\n}\n\n#[oracle(notifyNullifiedNote)]\nunconstrained fn notify_nullified_note_oracle(_nullifier: Field, _note_hash: Field, _counter: u32) -> Field {}\n\nunconstrained pub fn notify_nullified_note(nullifier: Field, note_hash: Field, counter: u32) -> Field {\n notify_nullified_note_oracle(nullifier, note_hash, counter)\n}\n\n#[oracle(getNotes)]\nunconstrained fn get_notes_oracle<let N: u32, let S: u32>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by_indexes: [u8; N],\n _select_by_offsets: [u8; N],\n _select_by_lengths: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u8; N],\n _sort_by_indexes: [u8; N],\n _sort_by_offsets: [u8; N],\n _sort_by_lengths: [u8; N],\n _sort_order: [u8; N],\n _limit: u32,\n _offset: u32,\n _status: u8,\n _return_size: u32,\n _placeholder_fields: [Field; S]\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<let N: u32, let S: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; N],\n select_by_offsets: [u8; N],\n select_by_lengths: [u8; N],\n select_values: [Field; N],\n select_comparators: [u8; N],\n sort_by_indexes: [u8; N],\n sort_by_offsets: [u8; N],\n sort_by_lengths: [u8; N],\n sort_order: [u8; N],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_fields: [Field; S]\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n return_size,\n placeholder_fields\n )\n}\n\nunconstrained pub fn get_notes<Note, let N: u32, let NB: u32, let M: u32, let S: u32, let NS: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; M],\n select_by_offsets: [u8; M],\n select_by_lengths: [u8; M],\n select_values: [Field; M],\n select_comparators: [u8; M],\n sort_by_indexes: [u8; M],\n sort_by_offsets: [u8; M],\n sort_by_lengths: [u8; M],\n sort_order: [u8; M],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array.\n _placeholder_note_length: [Field; N] // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter\n) -> [Option<Note>; S] where Note: NoteInterface<N, NB> {\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n placeholder_fields\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n for i in 0..placeholder_opt_notes.len() {\n if i < num_notes {\n // lengths named as per typescript.\n let return_header_length: u32 = 2; // num_notes & contract_address.\n let extra_preimage_length: u32 = 2; // nonce & note_hash_counter.\n let read_offset: u32 = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let note_hash_counter = fields[read_offset + 1] as u32;\n let header = NoteHeader { contract_address, nonce, storage_slot, note_hash_counter };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = Note::deserialize_content(serialized_note);\n note.set_header(header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n// Only ever use this in private!\n#[oracle(checkNullifierExists)]\nunconstrained fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\n// Only ever use this in private!\nunconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n"},"160":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_contract_instance.nr","source":"use dep::protocol_types::{\n address::AztecAddress, contract_instance::ContractInstance, constants::CONTRACT_INSTANCE_LENGTH,\n utils::reader::Reader\n};\n\n#[oracle(getContractInstance)]\nunconstrained fn get_contract_instance_oracle(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {}\n\n// Returns a ContractInstance plus a boolean indicating whether the instance was found.\n#[oracle(avmOpcodeGetContractInstance)]\nunconstrained fn get_contract_instance_oracle_avm(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {}\n\nunconstrained fn get_contract_instance_internal(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n get_contract_instance_oracle(address)\n}\n\nunconstrained pub fn get_contract_instance_internal_avm(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {\n get_contract_instance_oracle_avm(address)\n}\n\npub fn get_contract_instance(address: AztecAddress) -> ContractInstance {\n let instance = unsafe {\n ContractInstance::deserialize(get_contract_instance_internal(address))\n };\n // The to_address function combines all values in the instance object to produce an address, so by checking that we\n // get the expected address we validate the entire struct.\n assert_eq(instance.to_address(), address);\n\n instance\n}\n\npub fn get_contract_instance_avm(address: AztecAddress) -> Option<ContractInstance> {\n let mut reader = Reader::new(get_contract_instance_internal_avm(address));\n let found = reader.read();\n if found == 0 {\n Option::none()\n } else {\n Option::some(reader.read_struct(ContractInstance::deserialize))\n }\n}\n"},"161":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr","source":"use dep::protocol_types::{abis::{function_selector::FunctionSelector}, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nunconstrained fn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n\nunconstrained pub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n"},"163":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/execution.nr","source":"use dep::protocol_types::address::AztecAddress;\n\n#[oracle(getContractAddress)]\nunconstrained fn get_contract_address_oracle() -> AztecAddress {}\n\n#[oracle(getBlockNumber)]\nunconstrained fn get_block_number_oracle() -> u32 {}\n\n#[oracle(getChainId)]\nunconstrained fn get_chain_id_oracle() -> Field {}\n\n#[oracle(getVersion)]\nunconstrained fn get_version_oracle() -> Field {}\n\nunconstrained pub fn get_contract_address() -> AztecAddress {\n get_contract_address_oracle()\n}\n\nunconstrained pub fn get_block_number() -> u32 {\n get_block_number_oracle()\n}\n\nunconstrained pub fn get_chain_id() -> Field {\n get_chain_id_oracle()\n}\n\nunconstrained pub fn get_version() -> Field {\n get_version_oracle()\n}\n"},"166":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/map.nr","source":"use dep::protocol_types::{storage::map::derive_storage_slot_in_map, traits::ToField};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:map\nstruct Map<K, V, Context> {\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V,\n}\n// docs:end:map\n\nimpl<K, T, Context> Storage<T> for Map<K, T, Context> {}\n\nimpl<K, V, Context> Map<K, V, Context> {\n // docs:start:new\n pub fn new(\n context: Context,\n storage_slot: Field,\n state_var_constructor: fn(Context, Field) -> V\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Map { context, storage_slot, state_var_constructor }\n }\n // docs:end:new\n\n // docs:start:at\n pub fn at(self, key: K) -> V where K: ToField {\n // TODO(#1204): use a generator index for the storage slot\n let derived_storage_slot = derive_storage_slot_in_map(self.storage_slot, key);\n\n let state_var_constructor = self.state_var_constructor;\n state_var_constructor(self.context, derived_storage_slot)\n }\n // docs:end:at\n}\n\n"},"168":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/public_mutable.nr","source":"use crate::context::{PublicContext, UnconstrainedContext};\nuse dep::protocol_types::traits::{Deserialize, Serialize};\nuse crate::state_vars::storage::Storage;\n\n// docs:start:public_mutable_struct\nstruct PublicMutable<T, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:public_mutable_struct\n\nimpl<T, Context> Storage<T> for PublicMutable<T, Context> {}\n\nimpl<T, Context> PublicMutable<T, Context> {\n // docs:start:public_mutable_struct_new\n pub fn new(\n // Note: Passing the contexts to new(...) just to have an interface compatible with a Map.\n context: Context,\n storage_slot: Field\n ) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n PublicMutable { context, storage_slot }\n }\n // docs:end:public_mutable_struct_new\n}\n\nimpl<T, T_SERIALIZED_LEN> PublicMutable<T, &mut PublicContext> where T: Serialize<T_SERIALIZED_LEN> + Deserialize<T_SERIALIZED_LEN> {\n // docs:start:public_mutable_struct_read\n pub fn read(self) -> T {\n self.context.storage_read(self.storage_slot)\n }\n // docs:end:public_mutable_struct_read\n\n // docs:start:public_mutable_struct_write\n pub fn write(self, value: T) {\n self.context.storage_write(self.storage_slot, value);\n }\n // docs:end:public_mutable_struct_write\n}\n\nimpl<T, T_SERIALIZED_LEN> PublicMutable<T, UnconstrainedContext> where T: Deserialize<T_SERIALIZED_LEN> {\n unconstrained pub fn read(self) -> T {\n self.context.storage_read(self.storage_slot)\n }\n}\n"},"184":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER, hash::poseidon2_hash_with_separator};\n\nuse crate::context::{PrivateContext, UnconstrainedContext};\nuse crate::note::{\n lifecycle::create_note, note_getter::{get_note, view_notes}, note_interface::NoteInterface,\n note_viewer_options::NoteViewerOptions, note_emission::NoteEmission\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::storage::Storage;\n\n// docs:start:struct\nstruct PrivateImmutable<Note, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:struct\n\nimpl<T, Context> Storage<T> for PrivateImmutable<T, Context> {}\n\nimpl<Note, Context> PrivateImmutable<Note, Context> {\n // docs:start:new\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n // docs:end:new\n\n // The following computation is leaky, in that it doesn't hide the storage slot that has been initialized, nor does it hide the contract address of this contract.\n // When this initialization nullifier is emitted, an observer could do a dictionary or rainbow attack to learn the preimage of this nullifier to deduce the storage slot and contract address.\n // For some applications, leaking the details that a particular state variable of a particular contract has been initialized will be unacceptable.\n // Under such circumstances, such application developers might wish to _not_ use this state variable type.\n // This is especially dangerous for initial assignment to elements of a `Map<AztecAddress, PrivateImmutable>` type (for example), because the storage slot often also identifies an actor.\n // e.g. the initial assignment to `my_map.at(msg.sender)` will leak: `msg.sender`, the fact that an element of `my_map` was assigned-to for the first time, and the contract_address.\n pub fn compute_initialization_nullifier(self) -> Field {\n poseidon2_hash_with_separator(\n [self.storage_slot],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER\n )\n }\n}\n\nimpl<Note> PrivateImmutable<Note, &mut PrivateContext> {\n // docs:start:initialize\n pub fn initialize<N, M>(\n self,\n note: &mut Note\n ) -> NoteEmission<Note> where Note: NoteInterface<N, M> {\n // Nullify the storage slot.\n let nullifier = self.compute_initialization_nullifier();\n self.context.push_nullifier(nullifier);\n\n create_note(self.context, self.storage_slot, note)\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note<N, M>(self) -> Note where Note: NoteInterface<N, M> {\n let storage_slot = self.storage_slot;\n get_note(self.context, storage_slot).0\n }\n // docs:end:get_note\n}\n\nimpl<Note> PrivateImmutable<Note, UnconstrainedContext> {\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self) -> bool {\n let nullifier = self.compute_initialization_nullifier();\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // view_note does not actually use the context, but it calls oracles that are only available in private\n // docs:start:view_note\n unconstrained pub fn view_note<N, M>(self) -> Note where Note: NoteInterface<N, M> {\n let mut options = NoteViewerOptions::new();\n view_notes(self.storage_slot, options.set_limit(1)).get(0)\n }\n // docs:end:view_note\n}\n"},"188":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/utils/point.nr","source":"use dep::protocol_types::point::Point;\n\n// I am storing the modulus divided by 2 plus 1 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field = 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Converts a public key to a byte array.\n///\n/// We don't serialize the point at infinity flag because this function is used in situations where we do not want\n/// to waste the extra byte (encrypted log).\npub fn point_to_bytes(pk: Point) -> [u8; 32] {\n // Note that there is 1 more free bit in the 32 bytes (254 bits currently occupied by the x coordinate, 1 bit for\n // the \"sign\") so it's possible to use that last bit as an \"is_infinite\" flag if desired in the future.\n assert(!pk.is_infinite, \"Cannot serialize point at infinity as bytes.\");\n\n let mut result: [u8; 32] = pk.x.to_be_bytes();\n\n // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get\n // the sign we check if the y coordinate is less or equal than the curve's order minus 1 divided by 2.\n // Ideally we'd do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is\n // equivalent, and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n if !BN254_FR_MODULUS_DIV_2.lt(pk.y) {\n // y is <= (modulus - 1) / 2 so we set the sign bit to 1\n // Here we leverage that field fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32\n // bytes and we use big-endian the 2 most significant bits are never populated. Hence we can use one of\n // the bits as a sign bit.\n result[0] += 128;\n }\n\n result\n}\n\nmod test {\n use dep::protocol_types::point::Point;\n use crate::utils::point::point_to_bytes;\n\n #[test]\n fn test_point_to_bytes_positive_sign() {\n let p = Point {\n x: 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73,\n y: 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_positive_sign = [\n 154, 244, 31, 93, 233, 100, 70, 220, 55, 118, 161, 235, 45, 152, 187, 149, 107, 122, 205, 153, 121, 166, 120, 84, 190, 198, 250, 124, 41, 115, 189, 115\n ];\n\n assert_eq(expected_compressed_point_positive_sign.len(), compressed_point.len());\n for i in 0..expected_compressed_point_positive_sign.len() {\n assert_eq(compressed_point[i], expected_compressed_point_positive_sign[i]);\n }\n }\n\n #[test]\n fn test_point_to_bytes_negative_sign() {\n let p = Point {\n x: 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5,\n y: 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_negative_sign = [\n 36, 115, 113, 101, 46, 85, 221, 116, 201, 175, 141, 190, 159, 180, 73, 49, 186, 41, 169, 34, 153, 148, 56, 75, 215, 7, 119, 150, 193, 78, 226, 181\n ];\n\n assert_eq(expected_compressed_point_negative_sign.len(), compressed_point.len());\n for i in 0..expected_compressed_point_negative_sign.len() {\n assert_eq(compressed_point[i], expected_compressed_point_negative_sign[i]);\n }\n }\n}\n"},"205":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr","source":"use crate::{traits::{Empty, Serialize, Deserialize}, point::Point};\npub use crate::constants::KEY_VALIDATION_REQUEST_LENGTH;\n\nstruct KeyValidationRequest {\n pk_m: Point,\n sk_app: Field, // not a grumpkin scalar because it's output of poseidon2\n}\n\nimpl Eq for KeyValidationRequest {\n fn eq(self, request: KeyValidationRequest) -> bool {\n (request.pk_m.eq(self.pk_m)) & (request.sk_app.eq(self.sk_app))\n }\n}\n\nimpl Empty for KeyValidationRequest {\n fn empty() -> Self {\n KeyValidationRequest { pk_m: Point::empty(), sk_app: 0 }\n }\n}\n\nimpl Serialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn serialize(self) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {\n [\n self.pk_m.x,\n self.pk_m.y,\n self.pk_m.is_infinite as Field,\n self.sk_app\n ]\n }\n}\n\nimpl Deserialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn deserialize(fields: [Field; KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n Self { pk_m: Point { x: fields[0], y: fields[1], is_infinite: fields[2] as bool }, sk_app: fields[3] }\n }\n}\n\n"},"24":{"path":"std/embedded_curve_ops.nr","source":"use crate::ops::arith::{Add, Sub, Neg};\nuse crate::cmp::Eq;\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\nstruct EmbeddedCurvePoint {\n x: Field,\n y: Field,\n is_infinite: bool\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\nstruct EmbeddedCurveScalar {\n lo: Field,\n hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a,b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the \n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul<let N: u32>(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N]\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n let point_array = multi_scalar_mul_array_return(points, scalars);\n EmbeddedCurvePoint { x: point_array[0], y: point_array[1], is_infinite: point_array[2] as bool }\n}\n\n#[foreign(multi_scalar_mul)]\nfn multi_scalar_mul_array_return<let N: u32>(points: [EmbeddedCurvePoint; N], scalars: [EmbeddedCurveScalar; N]) -> [Field; 3] {}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_slice(points: [EmbeddedCurvePoint], scalars: [EmbeddedCurveScalar]) -> [Field; 3] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n let g1 = EmbeddedCurvePoint { x: 1, y: 17631683881184975370165255887551781615748388533673675138860, is_infinite: false };\n multi_scalar_mul([g1], [scalar])\n}\n\n// This is a hack as returning an `EmbeddedCurvePoint` from a foreign function in brillig returns a [BrilligVariable::SingleAddr; 2] rather than BrilligVariable::BrilligArray\n// as is defined in the brillig bytecode format. This is a workaround which allows us to fix this without modifying the serialization format.\n// docs:start:embedded_curve_add\nfn embedded_curve_add(\n point1: EmbeddedCurvePoint,\n point2: EmbeddedCurvePoint\n) -> EmbeddedCurvePoint\n// docs:end:embedded_curve_add\n{\n let point_array = embedded_curve_add_array_return(point1, point2);\n let x = point_array[0];\n let y = point_array[1];\n EmbeddedCurvePoint { x, y, is_infinite: point_array[2] == 1 }\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(_point1: EmbeddedCurvePoint, _point2: EmbeddedCurvePoint) -> [Field; 3] {}\n"},"25":{"path":"std/field/bn254.nr","source":"use crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\nglobal TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n\n let mut low: Field = 0;\n let mut high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n low += (x_bytes[i] as Field) * offset;\n high += (x_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n\n (low, high)\n}\n\nunconstrained pub(crate) fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nfn compute_lt(x: Field, y: Field, num_bytes: u32) -> bool {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i];\n let y_byte = y_bytes[num_bytes - 1 - i];\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nfn compute_lte(x: Field, y: Field, num_bytes: u32) -> bool {\n if x == y {\n true\n } else {\n compute_lt(x, y, num_bytes)\n }\n}\n\nunconstrained fn lt_32_hint(x: Field, y: Field) -> bool {\n compute_lt(x, y, 32)\n}\n\nunconstrained fn lte_16_hint(x: Field, y: Field) -> bool {\n compute_lte(x, y, 16)\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n unsafe {\n let borrow = lte_16_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size(128);\n rhi.assert_max_bit_size(128);\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size(128);\n xhi.assert_max_bit_size(128);\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(compute_lt(b, a, 32));\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n compute_lt(b, a, 32)\n } else if a == b {\n false\n } else {\n // Take a hint of the comparison and verify it\n unsafe {\n if lt_32_hint(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{decompose, compute_lt, assert_gt, gt, TWO_POW_128, compute_lte, PLO, PHI};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n fn check_compute_lt() {\n assert(compute_lt(0, 1, 16));\n assert(compute_lt(0, 0x100, 16));\n assert(compute_lt(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lt(0, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_compute_lte() {\n assert(compute_lte(0, 1, 16));\n assert(compute_lte(0, 0x100, 16));\n assert(compute_lte(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lte(0, TWO_POW_128, 16));\n\n assert(compute_lte(0, 0, 16));\n assert(compute_lte(0x100, 0x100, 16));\n assert(compute_lte(TWO_POW_128 - 1, TWO_POW_128 - 1, 16));\n assert(compute_lte(TWO_POW_128, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n"},"251":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/data/public_data_tree_leaf_preimage.nr","source":"use crate::{merkle_tree::leaf_preimage::IndexedTreeLeafPreimage, traits::{Empty, Hash}};\n\nstruct PublicDataTreeLeafPreimage {\n slot : Field,\n value: Field,\n next_slot :Field,\n next_index : u32,\n}\n\nimpl Empty for PublicDataTreeLeafPreimage {\n fn empty() -> Self {\n Self { slot: 0, value: 0, next_slot: 0, next_index: 0 }\n }\n}\n\nimpl Hash for PublicDataTreeLeafPreimage {\n fn hash(self) -> Field {\n if self.is_empty() {\n 0\n } else {\n crate::hash::poseidon2_hash([self.slot, self.value, (self.next_index as Field), self.next_slot])\n }\n }\n}\n\nimpl IndexedTreeLeafPreimage for PublicDataTreeLeafPreimage {\n fn get_key(self) -> Field {\n self.slot\n }\n\n fn get_next_key(self) -> Field {\n self.next_slot\n }\n\n fn as_leaf(self) -> Field {\n self.hash()\n }\n}\n\nimpl PublicDataTreeLeafPreimage {\n pub fn is_empty(self) -> bool {\n (self.slot == 0) & (self.value == 0) & (self.next_slot == 0) & (self.next_index == 0)\n }\n}\n"},"258":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/storage/map.nr","source":"use crate::{hash::pedersen_hash, traits::ToField};\n\npub fn derive_storage_slot_in_map<K>(storage_slot: Field, key: K) -> Field where K: ToField {\n pedersen_hash([storage_slot, key.to_field()], 0)\n}\n\nmod test {\n use crate::{address::AztecAddress, storage::map::derive_storage_slot_in_map};\n\n #[test]\n fn test_derive_storage_slot_in_map_matches_typescript() {\n let map_slot = 0x132258fb6962c4387ba659d9556521102d227549a386d39f0b22d1890d59c2b5;\n let key = AztecAddress::from_field(0x302dbc2f9b50a73283d5fb2f35bc01eae8935615817a0b4219a057b2ba8a5a3f);\n\n let slot = derive_storage_slot_in_map(map_slot, key);\n\n // The following value was generated by `map_slot.test.ts`\n let slot_from_typescript = 0x2499880e2b1b831785c17286f99a0d5122fee784ce7b1c04e380c4a991da819a;\n\n assert_eq(slot, slot_from_typescript);\n }\n}\n"},"26":{"path":"std/field/mod.nr","source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self, bit_size: u32) {\n // docs:end:assert_max_bit_size\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n // docs:start:to_le_bits\n pub fn to_le_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_le_bits\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n // docs:start:to_be_bits\n pub fn to_be_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_be_bits\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_le_bytes\n pub fn to_le_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_le_radix(256)\n }\n // docs:end:to_le_bytes\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_be_bytes\n pub fn to_be_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_be_radix(256)\n }\n // docs:end:to_be_bytes\n\n // docs:start:to_le_radix\n pub fn to_le_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x ∈ {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nmod tests {\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_bytes();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_bytes();\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_radix(256);\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_radix(256);\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_radix_example\n}\n"},"264":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr","source":"use crate::utils::field::field_from_bytes;\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic \n// if a value can actually be zero. In a future refactor, we can \n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\ntrait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field {\n fn empty() -> Self {\n 0\n }\n}\n\nimpl Empty for u1 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u8 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u32 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u64 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for U128 {\n fn empty() -> Self {\n U128::from_integer(0)\n }\n}\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, let N: u32>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\ntrait Hash {\n fn hash(self) -> Field;\n}\n\ntrait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for bool {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u1 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u8 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u32 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u64 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\nimpl<let N: u32> ToField for str<N> {\n fn to_field(self) -> Field {\n assert(N < 32, \"String doesn't fit in a field, consider using Serialize instead\");\n field_from_bytes(self.as_bytes(), true)\n }\n}\n\ntrait FromField {\n fn from_field(value: Field) -> Self;\n}\n\nimpl FromField for Field {\n fn from_field(value: Field) -> Self {\n value\n }\n}\n\nimpl FromField for bool {\n fn from_field(value: Field) -> Self {\n value as bool\n }\n}\nimpl FromField for u1 {\n fn from_field(value: Field) -> Self {\n value as u1\n }\n}\nimpl FromField for u8 {\n fn from_field(value: Field) -> Self {\n value as u8\n }\n}\nimpl FromField for u32 {\n fn from_field(value: Field) -> Self {\n value as u32\n }\n}\nimpl FromField for u64 {\n fn from_field(value: Field) -> Self {\n value as u64\n }\n}\nimpl FromField for U128 {\n fn from_field(value: Field) -> Self {\n U128::from_integer(value)\n }\n}\n\n// docs:start:serialize\ntrait Serialize<let N: u32> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<let N: u32> Serialize<N> for [Field; N] {\n fn serialize(self) -> [Field; N] {\n self\n }\n}\nimpl<let N: u32> Serialize<N> for str<N> {\n fn serialize(self) -> [Field; N] {\n let mut result = [0; N];\n let bytes: [u8; N] = self.as_bytes();\n for i in 0..N {\n result[i] = field_from_bytes([bytes[i];1], true);\n }\n result\n }\n}\n\n// docs:start:deserialize\ntrait Deserialize<let N: u32> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n\nimpl<let N: u32> Deserialize<N> for [Field; N] {\n fn deserialize(fields: [Field; N]) -> Self {\n fields\n }\n}\n"},"265":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr","source":"// Utility function to console.log data in the acir simulator\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n\n/// NOTE: call this with a str<N> msg of form\n/// \"some string with {0} and {1} ... {N}\"\n/// and an array of N field which will be formatted\n/// into the string in the simulator.\n/// Example:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\nunconstrained pub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n/// NOTE: call this with a str<N> msg of length > 1\n/// Example:\n/// `debug_log(\"blah blah this is a debug string\");`\nunconstrained pub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n"},"269":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly.\npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"275":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/point.nr","source":"pub use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{traits::{Empty, Hash, Serialize}, hash::poseidon2_hash};\n\nglobal POINT_LENGTH: Field = 3;\n\nimpl Serialize<POINT_LENGTH> for Point {\n fn serialize(self: Self) -> [Field; POINT_LENGTH] {\n [self.x, self.y, self.is_infinite as Field]\n }\n}\n\nimpl Hash for Point {\n fn hash(self) -> Field {\n poseidon2_hash(self.serialize())\n }\n}\n\nimpl Empty for Point {\n /// Note: Does not return a valid point on curve - instead represents an empty/\"unpopulated\" point struct (e.g.\n /// empty/unpopulated value in an array of points).\n fn empty() -> Self {\n Point { x: 0, y: 0, is_infinite: false }\n }\n}\n"},"276":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr","source":"use crate::{\n address::{aztec_address::AztecAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n contract_class_id::ContractClassId, constants::CONTRACT_INSTANCE_LENGTH,\n traits::{Deserialize, Hash, Serialize}\n};\n\nstruct ContractInstance {\n salt : Field,\n deployer: AztecAddress,\n contract_class_id : ContractClassId,\n initialization_hash : Field,\n public_keys_hash : PublicKeysHash,\n}\n\nimpl Eq for ContractInstance {\n fn eq(self, other: Self) -> bool {\n self.public_keys_hash.eq(other.public_keys_hash)\n & self.initialization_hash.eq(other.initialization_hash)\n & self.contract_class_id.eq(other.contract_class_id)\n & self.salt.eq(other.salt)\n }\n}\n\nimpl Serialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn serialize(self) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n [\n self.salt,\n self.deployer.to_field(),\n self.contract_class_id.to_field(),\n self.initialization_hash,\n self.public_keys_hash.to_field()\n ]\n }\n}\n\nimpl Deserialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn deserialize(serialized: [Field; CONTRACT_INSTANCE_LENGTH]) -> Self {\n Self {\n salt: serialized[0],\n deployer: AztecAddress::from_field(serialized[1]),\n contract_class_id: ContractClassId::from_field(serialized[2]),\n initialization_hash: serialized[3],\n public_keys_hash: PublicKeysHash::from_field(serialized[4])\n }\n }\n}\n\nimpl Hash for ContractInstance {\n fn hash(self) -> Field {\n self.to_address().to_field()\n }\n}\n\nimpl ContractInstance {\n fn to_address(self) -> AztecAddress {\n AztecAddress::compute(\n self.public_keys_hash,\n PartialAddress::compute(\n self.contract_class_id,\n self.salt,\n self.initialization_hash,\n self.deployer\n )\n )\n }\n}\n"},"288":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/merkle_tree/root.nr","source":"use crate::{hash::merkle_hash, merkle_tree::merkle_tree::MerkleTree};\n\n// Calculate the Merkle tree root from the sibling path and leaf.\n//\n// The leaf is hashed with its sibling, and then the result is hashed\n// with the next sibling etc in the path. The last hash is the root.\n//\n// TODO(David/Someone): The cpp code is using a uint256, whereas its\n// TODO a bit simpler in Noir to just have a bit array.\n// TODO: I'd generally like to avoid u256 for algorithms like\n// this because it means we never even need to consider cases where\n// the index is greater than p.\npub fn root_from_sibling_path<let N: u32>(\n leaf: Field,\n leaf_index: Field,\n sibling_path: [Field; N]\n) -> Field {\n let mut node = leaf;\n let indices: [u1; N] = leaf_index.to_le_bits();\n\n for i in 0..N {\n let (hash_left, hash_right) = if indices[i] == 1 {\n (sibling_path[i], node)\n } else {\n (node, sibling_path[i])\n };\n node = merkle_hash(hash_left, hash_right);\n }\n node\n}\n\npub fn calculate_subtree_root<let N: u32>(leaves: [Field; N]) -> Field {\n MerkleTree::new(leaves).get_root()\n}\n\n// These values are precomputed and we run tests to ensure that they\n// are correct. The values themselves were computed from the cpp code.\n//\n// Would be good if we could use width since the compute_subtree\n// algorithm uses depth.\npub fn calculate_empty_tree_root(depth: u32) -> Field {\n if depth == 0 {\n 0\n } else if depth == 1 {\n 0x0b63a53787021a4a962a452c2921b3663aff1ffd8d5510540f8e659e782956f1\n } else if depth == 2 {\n 0x0e34ac2c09f45a503d2908bcb12f1cbae5fa4065759c88d501c097506a8b2290\n } else if depth == 3 {\n 0x21f9172d72fdcdafc312eee05cf5092980dda821da5b760a9fb8dbdf607c8a20\n } else if depth == 4 {\n 0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e\n } else if depth == 5 {\n 0x120157cfaaa49ce3da30f8b47879114977c24b266d58b0ac18b325d878aafddf\n } else if depth == 6 {\n 0x01c28fe1059ae0237b72334700697bdf465e03df03986fe05200cadeda66bd76\n } else if depth == 7 {\n 0x2d78ed82f93b61ba718b17c2dfe5b52375b4d37cbbed6f1fc98b47614b0cf21b\n } else if depth == 8 {\n 0x067243231eddf4222f3911defbba7705aff06ed45960b27f6f91319196ef97e1\n } else if depth == 9 {\n 0x1849b85f3c693693e732dfc4577217acc18295193bede09ce8b97ad910310972\n } else if depth == 10 {\n 0x2a775ea761d20435b31fa2c33ff07663e24542ffb9e7b293dfce3042eb104686\n } else {\n assert(false, \"depth should be between 0 and 10\");\n 0\n }\n}\n\n#[test]\nfn test_merkle_root_interop_test() {\n // This is a test to ensure that we match the cpp implementation.\n // You can grep for `TEST_F(root_rollup_tests, noir_interop_test)`\n // to find the test that matches this.\n let root = calculate_subtree_root([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]);\n assert(0x1a09d935ae110b4c861fcec8f9099ec30b4485022aeb3d3cf9d7168e38fdc231 == root);\n\n let empty_root = calculate_subtree_root([0; 16]);\n assert(0x2373ea368857ec7af97e7b470d705848e2bf93ed7bef142a490f2119bcf82d8e == empty_root);\n}\n\n#[test]\nfn test_empty_subroot() {\n assert(calculate_empty_tree_root(0) == 0);\n\n let expected_empty_root_2 = calculate_subtree_root([0; 2]);\n assert(calculate_empty_tree_root(1) == expected_empty_root_2);\n\n let expected_empty_root_4 = calculate_subtree_root([0; 4]);\n assert(calculate_empty_tree_root(2) == expected_empty_root_4);\n\n let expected_empty_root_8 = calculate_subtree_root([0; 8]);\n assert(calculate_empty_tree_root(3) == expected_empty_root_8);\n\n let expected_empty_root_16 = calculate_subtree_root([0; 16]);\n assert(calculate_empty_tree_root(4) == expected_empty_root_16);\n\n let expected_empty_root_32 = calculate_subtree_root([0; 32]);\n assert(calculate_empty_tree_root(5) == expected_empty_root_32);\n\n let expected_empty_root_64 = calculate_subtree_root([0; 64]);\n assert(calculate_empty_tree_root(6) == expected_empty_root_64);\n\n let expected_empty_root_128 = calculate_subtree_root([0; 128]);\n assert(calculate_empty_tree_root(7) == expected_empty_root_128);\n\n let expected_empty_root_256 = calculate_subtree_root([0; 256]);\n assert(calculate_empty_tree_root(8) == expected_empty_root_256);\n\n let expected_empty_root_512 = calculate_subtree_root([0; 512]);\n assert(calculate_empty_tree_root(9) == expected_empty_root_512);\n\n let expected_empty_root_1024 = calculate_subtree_root([0; 1024]);\n assert(calculate_empty_tree_root(10) == expected_empty_root_1024);\n}\n"},"29":{"path":"std/hash/mod.nr","source":"mod poseidon;\nmod mimc;\nmod poseidon2;\nmod keccak;\nmod sha256;\nmod sha512;\n\nuse crate::default::Default;\nuse crate::uint128::U128;\nuse crate::collections::vec::Vec;\nuse crate::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_slice};\nuse crate::meta::derive_via;\n\n// Kept for backwards compatibility\npub use sha256::{digest, sha256, sha256_compression, sha256_var};\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n#[foreign(blake3)]\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n __pedersen_hash_with_separator(input, separator)\n}\n\nfn pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let value = __pedersen_commitment_with_separator(input, separator);\n if (value[0] == 0) & (value[1] == 0) {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n } else {\n EmbeddedCurvePoint { x: value[0], y: value[1], is_infinite: false }\n }\n}\n\n#[no_predicates]\nfn pedersen_commitment_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\n#[no_predicates]\nfn pedersen_hash_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: Vec<EmbeddedCurveScalar> = Vec::from_slice([EmbeddedCurveScalar { lo: 0, hi: 0 }; N].as_slice()); //Vec::new();\n\n for i in 0..N {\n scalars.set(i, from_field_unsafe(input[i]));\n }\n scalars.push(EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field });\n let domain_generators :[EmbeddedCurvePoint; N]= derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n let mut vec_generators = Vec::new();\n for i in 0..N {\n vec_generators.push(domain_generators[i]);\n }\n let length_generator : [EmbeddedCurvePoint; 1] = derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n vec_generators.push(length_generator[0]);\n multi_scalar_mul_slice(vec_generators.slice, scalars.slice)[0]\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n __pedersen_hash_with_separator(input, 0)\n}\n\n#[foreign(pedersen_hash)]\nfn __pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {}\n\n#[foreign(pedersen_commitment)]\nfn __pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> [Field; 2] {}\n\n#[field(bn254)]\nfn derive_generators<let N: u32, let M: u32>(domain_separator_bytes: [u8; M], starting_index: u32) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n // Same as from_field but:\n // does not assert the limbs are 128 bits\n // does not assert the decomposition does not overflow the EmbeddedCurveScalar\n fn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n let (xlo, xhi) = unsafe {\n crate::field::bn254::decompose_hint(scalar)\n };\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn hash_to_field(inputs: [Field]) -> Field {\n let mut sum = 0;\n\n for input in inputs {\n let input_bytes: [u8; 32] = input.to_le_bytes();\n sum += crate::field::bytes32_to_field(blake2s(input_bytes));\n }\n\n sum\n}\n\n// docs:start:keccak256\npub fn keccak256<let N: u32>(input: [u8; N], message_size: u32) -> [u8; 32]\n// docs:end:keccak256\n{\n crate::hash::keccak::keccak256(input, message_size)\n}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation<let N: u32>(_input: [Field; N], _state_length: u32) -> [Field; N] {}\n\n// Generic hashing support. \n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\ntrait Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: StructDefinition) -> Quoted {\n let name = quote { Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: std::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(s, name, signature, for_each_field, quote {}, |fields| fields)\n}\n// docs:end:derive_hash\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\ntrait Hasher{\n fn finish(self) -> Field;\n \n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\ntrait BuildHasher<H> where H: Hasher{\n fn build_hasher(self) -> H;\n}\n\nstruct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher<H> for BuildHasherDefault<H>\nwhere \n H: Hasher + Default {\n fn build_hasher(_self: Self) -> H {\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere \n H: Hasher + Default {\n fn default() -> Self {\n BuildHasherDefault {}\n }\n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self);\n }\n}\n\nimpl Hash for u1 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u16 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i16 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H) where H: Hasher {}\n}\n\nimpl Hash for U128 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self.lo as Field);\n H::write(state, self.hi as Field);\n }\n}\n\nimpl<T, let N: u32> Hash for [T; N] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B) where A: Hash, B: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C) where A: Hash, B: Hash, C: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D) where A: Hash, B: Hash, C: Hash, D: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1), 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1), EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false\n }\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2), 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2), EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3), 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3), EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4), 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4), EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5), 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5), EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6), 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6), EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7), 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7), EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false\n }\n );\n}\n\n"},"292":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr","source":"struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self, mut result: [Field; K]) -> [Field; K] {\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n // TODO(#4394)\n pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array([0; K]));\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(&mut self, deserialise: fn([Field; K]) -> T, mut result: [T; C]) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n }\n}\n"},"3":{"path":"std/array/mod.nr","source":"use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of the slice.\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n // Apply a function to each element of an array, returning a new array\n // containing the mapped elements.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let first_elem = f(self[0]);\n let mut ret = [first_elem; N];\n\n for i in 1..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n // Apply a function to each element of the array and an accumulator value,\n // returning the final accumulated value. This function is also sometimes\n // called `foldl`, `fold_left`, `reduce`, or `inject`.\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n // Apply a function to each element of the array and an accumulator value,\n // returning the final accumulated value. Unlike fold, reduce uses the first\n // element of the given array as its starting accumulator value.\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n // Returns true if all elements in the array satisfy the predicate\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n // Returns true if any element in the array satisfies the predicate\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n}\n\nimpl<T, let N: u32> [T; N] where T: Ord + Eq {\n pub fn sort(self) -> Self {\n self.sort_via(|a: T, b: T| a <= b)\n }\n}\n\nimpl<T, let N: u32> [T; N] where T: Eq {\n\n /// Sorts the array using a custom predicate function `ordering`.\n ///\n /// The `ordering` function must be designed to return `true` for equal valued inputs\n /// If this is not done, `sort_via` will fail to sort inputs with duplicated elements.\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n unsafe {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = quicksort::quicksort(self, ordering);\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]), \"Array has not been sorted correctly according to `ordering`.\"\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Convert a sequence of bytes as-is into a string.\n /// This function performs no UTF-8 validation or similar.\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n"},"310":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/field.nr","source":"pub fn field_from_bytes<let N: u32>(bytes: [u8; N], big_endian: bool) -> Field {\n assert(bytes.len() < 32, \"field_from_bytes: N must be less than 32\");\n let mut as_field = 0;\n let mut offset = 1;\n for i in 0..N {\n let mut index = i;\n if big_endian {\n index = N - i - 1;\n }\n as_field += (bytes[index] as Field) * offset;\n offset *= 256;\n }\n\n as_field\n}\n\n// Convert a 32 byte array to a field element by truncating the final byte\npub fn field_from_bytes_32_trunc(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..15 {\n // covers bytes 16..30 (31 is truncated and ignored)\n low = low + (bytes32[15 + 15 - i] as Field) * v;\n v = v * 256;\n // covers bytes 0..14\n high = high + (bytes32[14 - i] as Field) * v;\n }\n // covers byte 15\n low = low + (bytes32[15] as Field) * v;\n\n low + high * v\n}\n\n// TODO to radix returns u8, so we cannot use bigger radixes. It'd be ideal to use a radix of the maximum range-constrained integer noir supports\npub fn full_field_less_than(lhs: Field, rhs: Field) -> bool {\n lhs.lt(rhs)\n}\n\npub fn full_field_greater_than(lhs: Field, rhs: Field) -> bool {\n rhs.lt(lhs)\n}\n\n#[test]\nunconstrained fn bytes_field_test() {\n // Tests correctness of field_from_bytes_32_trunc against existing methods\n // Bytes representing 0x543e0a6642ffeb8039296861765a53407bba62bd1c97ca43374de950bbe0a7\n let inputs = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167\n ];\n let field = field_from_bytes(inputs, true);\n let return_bytes: [u8; 31] = field.to_be_bytes();\n for i in 0..31 {\n assert_eq(inputs[i], return_bytes[i]);\n }\n // 32 bytes - we remove the final byte, and check it matches the field\n let inputs2 = [\n 84, 62, 10, 102, 66, 255, 235, 128, 57, 41, 104, 97, 118, 90, 83, 64, 123, 186, 98, 189, 28, 151, 202, 67, 55, 77, 233, 80, 187, 224, 167, 158\n ];\n let field2 = field_from_bytes_32_trunc(inputs2);\n let return_bytes2: [u8; 31] = field.to_be_bytes();\n\n for i in 0..31 {\n assert_eq(return_bytes2[i], return_bytes[i]);\n }\n assert_eq(field2, field);\n}\n\n#[test]\nunconstrained fn max_field_test() {\n // Tests the hardcoded value in constants.nr vs underlying modulus\n // NB: We can't use 0-1 in constants.nr as it will be transpiled incorrectly to ts and sol constants files\n let max_value = crate::constants::MAX_FIELD_VALUE;\n assert_eq(max_value, 0 - 1);\n // modulus == 0 is tested elsewhere, so below is more of a sanity check\n let max_bytes: [u8; 32] = max_value.to_be_bytes();\n let mod_bytes = std::field::modulus_be_bytes();\n for i in 0..31 {\n assert_eq(max_bytes[i], mod_bytes[i]);\n }\n assert_eq(max_bytes[31], mod_bytes[31] - 1);\n}\n"},"312":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/mod.nr","source":"// general util packages/modules are usually bad practice\n// because there is no criteria for what we should not put in here.\n// Reducing the size of this package would be welcome.\n\nmod arrays;\nmod field;\nmod reader;\nmod uint256;\n\n// if predicate == true then return lhs, else return rhs\npub fn conditional_assign(predicate: bool, lhs: Field, rhs: Field) -> Field {\n if predicate { lhs } else { rhs }\n}\n\npub fn arr_copy_slice<T, let N: u32, let M: u32>(src: [T; N], mut dst: [T; M], offset: u32) -> [T; M] {\n let iterator_len = if N > M { M } else { N };\n for i in 0..iterator_len {\n dst[i] = src[i + offset];\n }\n dst\n}\n"},"325":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n hash::poseidon2_hash_with_separator, traits::{Empty, FromField, ToField, Serialize, Deserialize},\n utils\n};\n\n// Aztec address\nstruct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"327":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr","source":"use crate::{\n address::{salted_initialization_hash::SaltedInitializationHash, aztec_address::AztecAddress},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator, traits::{ToField, Serialize, Deserialize}\n};\n\nglobal PARTIAL_ADDRESS_LENGTH = 1;\n\n// Partial address\nstruct PartialAddress {\n inner : Field\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer)\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash\n ) -> Self {\n PartialAddress::from_field(\n poseidon2_hash_with_separator(\n [\n contract_class_id.to_field(),\n salted_initialization_hash.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"328":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr","source":"use crate::{\n address::{aztec_address::AztecAddress}, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, traits::ToField\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\nstruct SaltedInitializationHash {\n inner: Field\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n SaltedInitializationHash::from_field(\n poseidon2_hash_with_separator(\n [\n salt,\n initialization_hash,\n deployer.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"34":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\ncomptime global RATE: u32 = 3;\n\nstruct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\nstruct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"},"389":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_k_account_contract/src/main.nr","source":"// Account contract that uses ECDSA signatures for authentication on the same curve as Ethereum.\n// The signing key is stored in an immutable private note and should be different from the signing key.\ncontract EcdsaKAccount {\n use dep::aztec::prelude::{PrivateContext, PrivateImmutable};\n use dep::aztec::{\n encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys,\n keys::getters::get_current_public_keys\n };\n\n use dep::authwit::{\n entrypoint::{app::AppPayload, fee::FeePayload}, account::AccountActions,\n auth_witness::get_auth_witness\n };\n\n use dep::ecdsa_public_key_note::EcdsaPublicKeyNote;\n\n #[aztec(storage)]\n struct Storage {\n public_key: PrivateImmutable<EcdsaPublicKeyNote>,\n }\n\n // Creates a new account out of an ECDSA public key to use for signature verification\n #[aztec(private)]\n #[aztec(initializer)]\n fn constructor(signing_pub_key_x: [u8; 32], signing_pub_key_y: [u8; 32]) {\n let this = context.this_address();\n let this_keys = get_current_public_keys(&mut context, this);\n // Not emitting outgoing for msg_sender here to not have to register keys for the contract through which we\n // deploy this (typically MultiCallEntrypoint). I think it's ok here as I feel the outgoing here is not that\n // important.\n\n let mut pub_key_note = EcdsaPublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this_keys.npk_m.hash());\n storage.public_key.initialize(&mut pub_key_note).emit(encode_and_encrypt_note_with_keys(&mut context, this_keys.ovpk_m, this_keys.ivpk_m, this));\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts\n #[aztec(private)]\n fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.entrypoint(app_payload, fee_payload, cancellable);\n }\n\n #[aztec(private)]\n #[aztec(noinitcheck)]\n #[aztec(view)]\n fn verify_private_authwit(inner_hash: Field) -> Field {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.verify_private_authwit(inner_hash)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, outer_hash: Field) -> bool {\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.public_key.get_note();\n\n // Load auth witness\n let witness: [Field; 64] = unsafe {\n get_auth_witness(outer_hash)\n };\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify payload signature using Ethereum's signing scheme\n // Note that noir expects the hash of the message/challenge as input to the ECDSA verification.\n let outer_hash_bytes: [u8; 32] = outer_hash.to_be_bytes();\n let hashed_message: [u8; 32] = std::hash::sha256(outer_hash_bytes);\n std::ecdsa_secp256k1::verify_signature(public_key.x, public_key.y, signature, hashed_message)\n }\n}\n"},"390":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr","source":"use dep::aztec::prelude::{AztecAddress, FunctionSelector, NoteHeader, NoteInterface, NoteGetterOptions, PrivateContext};\n\nuse dep::aztec::{\n note::utils::compute_note_hash_for_nullify, keys::getters::get_nsk_app,\n protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator}\n};\n\nglobal ECDSA_PUBLIC_KEY_NOTE_LEN: Field = 5;\n// ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 32(storage_slot as bytes) + 32(note_type_id as bytes)\nglobal ECDSA_PUBLIC_KEY_NOTE_BYTES_LEN: Field = 5 * 32 + 64;\n\n// Stores an ECDSA public key composed of two 32-byte elements\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\n#[aztec(note)]\nstruct EcdsaPublicKeyNote {\n x: [u8; 32],\n y: [u8; 32],\n // We store the npk_m_hash only to get the secret key to compute the nullifier\n npk_m_hash: Field,\n}\n\nimpl NoteInterface<ECDSA_PUBLIC_KEY_NOTE_LEN, ECDSA_PUBLIC_KEY_NOTE_BYTES_LEN> for EcdsaPublicKeyNote {\n // Cannot use the automatic serialization since x and y don't fit. Serialize the note as 5 fields where:\n // [0] = x[0..31] (upper bound excluded)\n // [1] = x[31]\n // [2] = y[0..31]\n // [3] = y[31]\n // [4] = npk_m_hash\n fn serialize_content(self) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] {\n let mut x: Field = 0;\n let mut y: Field = 0;\n let mut mul: Field = 1;\n\n for i in 1..32 {\n let byte_x: Field = self.x[31 - i] as Field;\n x = x + (byte_x * mul);\n let byte_y: Field = self.y[31 - i] as Field;\n y = y + (byte_y * mul);\n mul *= 256;\n }\n\n let last_x = self.x[31] as Field;\n let last_y = self.y[31] as Field;\n\n [x, last_x, y, last_y, self.npk_m_hash]\n }\n\n // Cannot use the automatic deserialization for the aforementioned reasons\n fn deserialize_content(serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> EcdsaPublicKeyNote {\n let mut x: [u8; 32] = [0; 32];\n let mut y: [u8; 32] = [0; 32];\n\n let part_x:[u8; 32] = serialized_note[0].to_be_bytes();\n for i in 0..31 {\n x[i] = part_x[i + 1];\n }\n x[31] = serialized_note[1].to_be_bytes::<32>()[31];\n\n let part_y:[u8; 32] = serialized_note[2].to_be_bytes();\n for i in 0..31 {\n y[i] = part_y[i + 1];\n }\n y[31] = serialized_note[3].to_be_bytes::<32>()[31];\n\n EcdsaPublicKeyNote { x, y, npk_m_hash: serialized_note[4], header: NoteHeader::empty() }\n }\n\n fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field {\n let secret = context.request_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator([\n note_hash_for_nullify,\n secret\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n\n fn compute_nullifier_without_context(self) -> Field {\n let note_hash_for_nullify = compute_note_hash_for_nullify(self);\n let secret = get_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator([\n note_hash_for_nullify,\n secret,\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field,\n )\n }\n}\n\nimpl EcdsaPublicKeyNote {\n pub fn new(x: [u8; 32], y: [u8; 32], npk_m_hash: Field) -> Self {\n EcdsaPublicKeyNote { x, y, npk_m_hash, header: NoteHeader::empty() }\n }\n}\n"},"57":{"path":"std/option.nr","source":"use crate::hash::{Hash, Hasher};\nuse crate::cmp::{Ordering, Ord, Eq};\nuse crate::default::Default;\n\nstruct Option<T> {\n _is_some: bool,\n _value: T,\n}\n\nimpl<T> Option<T> {\n /// Constructs a None value\n pub fn none() -> Self {\n Self { _is_some: false, _value: crate::mem::zeroed() }\n }\n\n /// Constructs a Some wrapper around the given value\n pub fn some(_value: T) -> Self {\n Self { _is_some: true, _value }\n }\n\n /// True if this Option is None\n pub fn is_none(self) -> bool {\n !self._is_some\n }\n\n /// True if this Option is Some\n pub fn is_some(self) -> bool {\n self._is_some\n }\n\n /// Asserts `self.is_some()` and returns the wrapped value.\n pub fn unwrap(self) -> T {\n assert(self._is_some);\n self._value\n }\n\n /// Returns the inner value without asserting `self.is_some()`\n /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n /// only that it will be of type `T`.\n pub fn unwrap_unchecked(self) -> T {\n self._value\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n pub fn unwrap_or(self, default: T) -> T {\n if self._is_some { self._value } else { default }\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n /// a default value.\n pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n if self._is_some {\n self._value\n } else {\n default()\n }\n }\n\n /// Asserts `self.is_some()` with a provided custom message and returns the contained `Some` value\n fn expect<let N: u32, MessageTypes>(self, message: fmtstr<N, MessageTypes>) -> T {\n assert(self.is_some(), message);\n self._value\n }\n\n /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n if self._is_some {\n Option::some(f(self._value))\n } else {\n Option::none()\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default()\n }\n }\n\n /// Returns None if self is None. Otherwise, this returns `other`.\n pub fn and(self, other: Self) -> Self {\n if self.is_none() {\n Option::none()\n } else {\n other\n }\n }\n\n /// If self is None, this returns None. Otherwise, this calls the given function\n /// with the Some value contained within self, and returns the result of that call.\n ///\n /// In some languages this function is called `flat_map` or `bind`.\n pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n if self._is_some {\n f(self._value)\n } else {\n Option::none()\n }\n }\n\n /// If self is Some, return self. Otherwise, return `other`.\n pub fn or(self, other: Self) -> Self {\n if self._is_some { self } else { other }\n }\n\n /// If self is Some, return self. Otherwise, return `default()`.\n pub fn or_else<Env>(self, default: fn[Env]() -> Self) -> Self {\n if self._is_some { self } else { default() }\n }\n\n // If only one of the two Options is Some, return that option.\n // Otherwise, if both options are Some or both are None, None is returned.\n pub fn xor(self, other: Self) -> Self {\n if self._is_some {\n if other._is_some { Option::none() } else { self }\n } else if other._is_some {\n other\n } else {\n Option::none()\n }\n }\n\n /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n /// Otherwise, this returns `None`\n pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n if self._is_some {\n if predicate(self._value) {\n self\n } else {\n Option::none()\n }\n } else {\n Option::none()\n }\n }\n\n /// Flattens an Option<Option<T>> into a Option<T>.\n /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n if option._is_some {\n option._value\n } else {\n Option::none()\n }\n }\n}\n\nimpl<T> Default for Option<T> {\n fn default() -> Self {\n Option::none()\n }\n}\n\nimpl<T> Eq for Option<T> where T: Eq {\n fn eq(self, other: Self) -> bool {\n if self._is_some == other._is_some {\n if self._is_some {\n self._value == other._value\n } else {\n true\n }\n } else {\n false\n }\n }\n}\n\nimpl<T> Hash for Option<T> where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self._is_some.hash(state);\n if self._is_some {\n self._value.hash(state);\n }\n }\n}\n\n// For this impl we're declaring Option::none < Option::some\nimpl<T> Ord for Option<T> where T: Ord {\n fn cmp(self, other: Self) -> Ordering {\n if self._is_some {\n if other._is_some {\n self._value.cmp(other._value)\n } else {\n Ordering::greater()\n }\n } else if other._is_some {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n"},"7":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n/// \n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n/// \n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n/// \n/// Example:\n/// \n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\nstruct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiller can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a \n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n /// \n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n /// \n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n /// \n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure. \n /// vec.set_unchecked(2, 42);\n /// println(vec);\n /// \n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n /// \n /// Panics if the new length of the vector will be greater than the max length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// \n /// v.push(1);\n /// v.push(2);\n /// \n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n /// \n /// v.push(100);\n /// assert(v.len() == 1);\n /// \n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n /// \n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n /// \n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n /// \n /// Note that uninitialized elements may be zeroed out!\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n /// \n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n /// \n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n /// \n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input. \n /// The maximum length of the vector is determined based on the type signature.\n /// \n /// Example:\n /// \n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n /// \n /// Panics if the vector is empty.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n /// \n /// let two = v.pop();\n /// let one = v.pop();\n /// \n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n /// \n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector. \n /// \n /// Example:\n /// \n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n /// \n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n ret\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen> where T: Eq {\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n\n (self.len == other.len) & (self.storage == other.storage)\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.storage()[2], 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n assert_eq(bounded_vec.storage()[2], 3);\n }\n\n #[test(should_fail_with=\"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n}\n"},"72":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth_witness.nr","source":"#[oracle(getAuthWitness)]\nunconstrained fn get_auth_witness_oracle<let N: u32>(_message_hash: Field) -> [Field; N] {}\n\n/**\n * Oracle wrapper to fetch an `auth_witness` for a given `message_hash` from the PXE.\n * \n * @param message_hash The hash of the message for which the `auth_witness` is to be fetched.\n * @return The `auth_witness` for the given `message_hash` as Field array.\n */\nunconstrained pub fn get_auth_witness<let N: u32>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n"},"73":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth.nr","source":"use dep::aztec::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::{\n GENERATOR_INDEX__AUTHWIT_INNER, GENERATOR_INDEX__AUTHWIT_OUTER, GENERATOR_INDEX__AUTHWIT_NULLIFIER,\n CANONICAL_AUTH_REGISTRY_ADDRESS\n},\n hash::poseidon2_hash_with_separator\n};\nuse dep::aztec::{prelude::Deserialize, context::{PrivateContext, PublicContext, gas::GasOpts}, hash::hash_args_array};\n\n/**\n * Authenticaion witness helper library\n *\n * Authentication Witness is a scheme for authenticating actions on Aztec, so users can allow third-parties\n * (e.g. protocols or other users) to execute an action on their behalf.\n *\n * This library provides helper functions to manage such witnesses.\n * The authentication witness, is some \"witness\" (data) that authenticates a `message_hash`.\n * The simplest example of an authentication witness, is a signature. The signature is the \"evidence\",\n * that the signer has seen the message, agrees with it, and has allowed it.\n * It does not need to be a signature. It could be any kind of \"proof\" that the message is allowed.\n * Another proof could be knowing some kind of secret, or having some kind of \"token\" that allows the message.\n *\n * The `message_hash` is a hash of the following structure:\n * hash(consumer, chain_id, version, inner_hash)\n * - consumer: the address of the contract that is \"consuming\" the message,\n * - chain_id: the chain id of the chain that the message is being consumed on,\n * - version: the version of the chain that the message is being consumed on,\n * - inner_hash: the hash of the \"inner\" message that is being consumed, this is the \"actual\" message or action.\n *\n * While the `inner_hash` could be anything, such as showing you signed a specific message, it will often be\n * a hash of the \"action\" to approve, along with who made the call. As part of this library, we provide a few\n * helper functions to deal with such messages.\n *\n * For example, we provide helper function that is used for checking that the message is an encoding of the current call.\n * This can be used to let some contract \"allow\" another contract to act on its behalf, as long as it can\n * show that it is acting on behalf of the contract.\n *\n * If we take a case of allowing a contract to transfer tokens on behalf of an account, the `inner_hash` can be\n * derived as:\n * inner_hash = hash(caller, \"transfer\", hash(to, amount))\n *\n * Where the `caller` would be the address of the contract that is trying to transfer the tokens, and `to` and `amount`\n * the arguments for the transfer.\n *\n * Note that we have both a `caller` and a `consumer`, the `consumer` will be the contract that is consuming the message,\n * in the case of the transfer, it would be the `Token` contract itself, while the caller, will be the actor that is\n * allowed to transfer the tokens.\n *\n *\n * The authentication mechanism works differently in public and private contexts. In private, we recall that everything\n * is executed on the user's device, so we can use `oracles` to \"ask\" the user (not contract) for information. In public\n * we cannot do this, since it is executed by the sequencer (someone else). Therefore we can instead use a \"registry\"\n * to store the messages that we have approved.\n *\n * A simple example would be a \"token\" that is being \"pulled\" from one account into another. We will first outline\n * how this would look in private, and then in public later.\n *\n * Say that a user `Alice` wants to deposit some tokens into a DeFi protocol (say a DEX).\n * `Alice` would make a `deposit` transaction, that she is executing using her account contract.\n * The account would call the `DeFi` contract to execute `deposit`, which would try to pull funds from the `Token`\n * contract. Since the `DeFi` contract is trying to pull funds from an account that is not its own, it needs to\n * convince the `Token` contract that it is allowed to do so.\n *\n * This is where the authentication witness comes in The `Token` contract computes a `message_hash` from the\n * `transfer` call, and then asks `Alice Account` contract to verify that the `DeFi` contract is allowed to\n * execute that call.\n *\n * `Alice Account` contract can then ask `Alice` if she wants to allow the `DeFi` contract to pull funds from her\n * account. If she does, she will sign the `message_hash` and return the signature to the `Alice Account` which\n * will validate it and return success to the `Token` contract which will then allow the `DeFi` contract to pull\n * funds from `Alice`.\n *\n * To ensure that the same \"approval\" cannot be used multiple times, we also compute a `nullifier` for the\n * authentication witness, and emit it from the `Token` contract (consumer).\n *\n * Note that we can do this flow as we are in private were we can do oracle calls out from contracts.\n *\n *\n * Person Contract Contract Contract\n * Alice Alice Account Token DeFi\n * | | | |\n * | Defi.deposit(Token, 1000) | |\n * |----------------->| | |\n * | | deposit(Token, 1000) |\n * | |---------------------------------------->|\n * | | | |\n * | | | transfer(Alice, Defi, 1000)\n * | | |<---------------------|\n * | | | |\n * | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | |<-----------------| |\n * | | | |\n * | Please give me AuthWit for DeFi | |\n * | calling transfer(Alice, Defi, 1000) | |\n * |<-----------------| | |\n * | | | |\n * | | | |\n * | AuthWit for transfer(Alice, Defi, 1000) |\n * |----------------->| | |\n * | | AuthWit validity | |\n * | |----------------->| |\n * | | | |\n * | | throw if invalid AuthWit |\n * | | | |\n * | | emit AuthWit nullifier |\n * | | | |\n * | | transfer(Alice, Defi, 1000) |\n * | | | |\n * | | | |\n * | | | success |\n * | | |--------------------->|\n * | | | |\n * | | | |\n * | | | deposit(Token, 1000)\n * | | | |\n * | | | |\n *\n *\n * If we instead were in public, we cannot do the same flow. Instead we would use an authentication registry to store\n * the messages that we have approved.\n *\n * To approve a message, `Alice Account` can make a `set_authorized` call to the registry, to set a `message_hash`\n * as authorized. This is essentially a mapping from `message_hash` to `true` for `Alice Contract`. Every account\n * has its own map in the registry, so `Alice` cannot approve a message for `Bob`.\n *\n * The `Token` contract can then try to \"spend\" the approval by calling `consume` on the registry. If the message\n * was approved, the value is updated to `false`, and we return the success flag. For more information on the\n * registry, see `main.nr` in `auth_registry_contract`.\n *\n * Person Contract Contract Contract Contract\n * Alice Alice Account Registry Token DeFi\n * | | | | |\n * | Registry.set_authorized(..., true) | | |\n * |----------------->| | | |\n * | | set_authorized(..., true) | |\n * | |------------------->| | |\n * | | | | |\n * | | set authorized to true | |\n * | | | | |\n * | | | | |\n * | Defi.deposit(Token, 1000) | | |\n * |----------------->| | | |\n * | | deposit(Token, 1000) | |\n * | |-------------------------------------------------------------->|\n * | | | | |\n * | | | transfer(Alice, Defi, 1000) |\n * | | | |<---------------------|\n * | | | | |\n * | | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | | |<------------------| |\n * | | | | |\n * | | throw if invalid AuthWit | |\n * | | | | |\n * | | | | |\n * | | set authorized to false | |\n * | | | | |\n * | | | | |\n * | | | AuthWit validity | |\n * | | |------------------>| |\n * | | | | |\n * | | | | transfer(Alice, Defi, 1000)\n * | | | |<-------------------->|\n * | | | | |\n * | | | | success |\n * | | | |--------------------->|\n * | | | | |\n * | | | | deposit(Token, 1000)\n * | | | | |\n *\n *\n * --- FAQ ---\n * Q: Why are we using a success flag of `keccak256(\"IS_VALID()\")` instead of just returning a boolean?\n * A: We want to make sure that we don't accidentally return `true` if there is a collision in the function selector.\n * By returning a hash of `IS_VALID()`, it becomes very unlikely that there is both a collision and we return\n * a success flag.\n *\n * Q: Why are we using static calls?\n * A: We are using static calls to ensure that the account contract cannot re-enter. If it was a normal call, it\n * could make a new call and do a re-entry attack. Using a static ensures that it cannot update any state.\n *\n * Q: Would it not be cheaper to use a nullifier instead of updating state in public?\n * A: At a quick glance, a public state update + nullifier is 96 bytes, but two state updates are 128, so it would be\n * cheaper to use a nullifier, if this is the way it would always be done. However, if both the approval and the\n * consumption is done in the same transaction, then we will be able to squash the updates (only final tx state diff is posted to DA), and now it is cheaper.\n *\n * Q: Why is the chain id and the version part of the message hash?\n * A: The chain id and the version is part of the message hash to ensure that the message is only valid on a specific\n * chain to avoid a case where the same message could be used across multiple chains.\n */\n\nglobal IS_VALID_SELECTOR = 0xabf64ad4; // 4 first bytes of keccak256(\"IS_VALID()\")\n\n/**\n * Assert that `on_behalf_of` have authorized the current call with a valid authentication witness\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit\npub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash([context.msg_sender().to_field(), context.selector().to_field(), context.args_hash]);\n assert_inner_hash_valid_authwit(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit\n\n/**\n * Assert that a specific `inner_hash` is valid for the `on_behalf_of` address\n *\n * Used as an internal function for `assert_current_call_valid_authwit` and can be used as a standalone function when\n * the `inner_hash` is from a different source, e.g., say a block of text etc.\n *\n * @param on_behalf_of The address that have authorized the current call\n * @param inner_hash The hash of the message to authorize\n */\npub fn assert_inner_hash_valid_authwit(\n context: &mut PrivateContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field\n) {\n // We perform a static call here and not a standard one to ensure that the account contract cannot re-enter.\n let result: Field = context.static_call_private_function(\n on_behalf_of,\n comptime {\n FunctionSelector::from_signature(\"verify_private_authwit(Field)\")\n },\n [inner_hash]\n ).unpack_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n // Compute the nullifier, similar computation to the outer hash, but without the chain_id and version.\n // Those should already be handled in the verification, so we just need something to nullify, that allow same inner_hash for multiple actors.\n let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash);\n context.push_nullifier(nullifier);\n}\n\n/**\n * Assert that `on_behalf_of` have authorized the current call in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit_public\npub fn assert_current_call_valid_authwit_public(context: &mut PublicContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash(\n [(*context).msg_sender().to_field(), (*context).selector().to_field(), (*context).get_args_hash()]\n );\n assert_inner_hash_valid_authwit_public(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit_public\n\n/**\n * Assert that `on_behalf_of` have authorized a speicifc `inner_hash` in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n */\npub fn assert_inner_hash_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress,\n inner_hash: Field\n) {\n let result: Field = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"consume((Field),Field)\")\n },\n [on_behalf_of.to_field(), inner_hash].as_slice(),\n GasOpts::default()\n ).deserialize_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n\n/**\n * Compute the `message_hash` from a function call to be used by an authentication witness\n *\n * Useful for when you need a non-account contract to approve during execution. For example if you need a contract\n * to make a call to nested contract, e.g., contract A wants to exit token T to L1 using bridge B, so it needs to allow\n * B to transfer T on its behalf.\n *\n * @param caller The address of the contract that is calling the function, in the example above, this would be B\n * @param consumer The address of the contract that is consuming the message, in the example above, this would be T\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param selector The function selector of the function that is being called\n * @param args The arguments of the function that is being called\n */\n// docs:start:compute_authwit_message_hash_from_call\npub fn compute_authwit_message_hash_from_call<let N: u32>(\n caller: AztecAddress,\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n selector: FunctionSelector,\n args: [Field; N]\n) -> Field {\n let args_hash = hash_args_array(args);\n let inner_hash = compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n compute_authwit_message_hash(consumer, chain_id, version, inner_hash)\n}\n// docs:end:compute_authwit_message_hash_from_call\n\n/**\n * Computes the `inner_hash` of the authentication witness\n *\n * This is used internally, but also useful in cases where you want to compute the `inner_hash` for a specific message\n * that is not necessarily a call, but just some \"bytes\" or text.\n *\n * @param args The arguments to hash\n */\npub fn compute_inner_authwit_hash<let N: u32>(args: [Field; N]) -> Field {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__AUTHWIT_INNER)\n}\n\n/**\n * Computs the `authwit_nullifier` for a specific `on_behalf_of` and `inner_hash`\n *\n * Using the `on_behalf_of` and the `inner_hash` to ensure that the nullifier is siloed for a specific `on_behalf_of`.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n * @param inner_hash The hash of the message to authorize\n */\npub fn compute_authwit_nullifier(on_behalf_of: AztecAddress, inner_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [on_behalf_of.to_field(), inner_hash],\n GENERATOR_INDEX__AUTHWIT_NULLIFIER\n )\n}\n\n/**\n * Computes the `message_hash` for the authentication witness\n *\n * @param consumer The address of the contract that is consuming the message\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param inner_hash The hash of the \"inner\" message that is being consumed\n */\npub fn compute_authwit_message_hash(\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n inner_hash: Field\n) -> Field {\n poseidon2_hash_with_separator(\n [\n consumer.to_field(),\n chain_id,\n version,\n inner_hash\n ],\n GENERATOR_INDEX__AUTHWIT_OUTER\n )\n}\n\n/**\n * Helper function to set the authorization status of a message hash\n *\n * Wraps a public call to the authentication registry to set the authorization status of a `message_hash`\n *\n * @param message_hash The hash of the message to authorize\n * @param authorize True if the message should be authorized, false if it should be revoked\n */\npub fn set_authorized(context: &mut PublicContext, message_hash: Field, authorize: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_authorized(Field,bool)\")\n },\n [message_hash, authorize as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n\n/**\n * Helper function to reject all authwits\n *\n * Wraps a public call to the authentication registry to set the `reject_all` flag\n *\n * @param reject True if all authwits should be rejected, false otherwise\n */\npub fn set_reject_all(context: &mut PublicContext, reject: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_reject_all(bool)\")\n },\n [context.this_address().to_field(), reject as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n"},"74":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/account.nr","source":"use dep::aztec::{\n context::PrivateContext,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n hash::poseidon2_hash_with_separator\n};\n\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\nuse crate::auth::{IS_VALID_SELECTOR, compute_authwit_message_hash};\n\nstruct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier = poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"},"75":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\n\nuse crate::entrypoint::function_call::{FunctionCall, FUNCTION_CALL_SIZE_IN_BYTES};\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u64 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u64 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u64 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\nstruct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD)\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage\n }\n\n // Executes all private and public calls\n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"},"77":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__FEE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\nuse crate::entrypoint::function_call::FunctionCall;\n\n// 2 * 5 (FUNCTION_CALL_SIZE) + 2\nglobal FEE_PAYLOAD_SIZE: Field = 12;\n\n// 2 * 98 (FUNCTION_CALL_SIZE_IN_BYTES) + 32\nglobal FEE_PAYLOAD_SIZE_IN_BYTES: Field = 228;\n\nglobal MAX_FEE_FUNCTION_CALLS = 2;\n\n// docs:start:fee-payload-struct\nstruct FeePayload {\n function_calls: [FunctionCall; MAX_FEE_FUNCTION_CALLS],\n nonce: Field,\n is_fee_payer: bool,\n}\n// docs:end:fee-payload-struct\n\nimpl Serialize<FEE_PAYLOAD_SIZE> for FeePayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; FEE_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, FEE_PAYLOAD_SIZE> = BoundedVec::new();\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n fields.extend_from_array(self.function_calls[i].serialize());\n }\n fields.push(self.nonce);\n fields.push(self.is_fee_payer as Field);\n fields.storage\n }\n}\n\nimpl Hash for FeePayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__FEE_PAYLOAD)\n }\n}\n\nimpl FeePayload {\n fn to_be_bytes(self) -> [u8; FEE_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, FEE_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n bytes.push(self.is_fee_payer as u8);\n\n bytes.storage\n }\n\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n if self.is_fee_payer {\n context.set_as_fee_payer();\n }\n }\n}\n"},"83":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/point_to_symmetric_key.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__SYMMETRIC_KEY, scalar::Scalar, point::Point, utils::arr_copy_slice};\nuse crate::utils::point::point_to_bytes;\nuse std::{hash::sha256, embedded_curve_ops::multi_scalar_mul};\n\n// TODO(#5726): This function is called deriveAESSecret in TS. I don't like point_to_symmetric_key name much since\n// point is not the only input of the function. Unify naming with TS once we have a better name.\npub fn point_to_symmetric_key(secret: Scalar, point: Point) -> [u8; 32] {\n let shared_secret: Point = multi_scalar_mul([point], [secret]);\n let shared_secret = point_to_bytes(shared_secret);\n let mut shared_secret_bytes_with_separator = [0 as u8; 33];\n shared_secret_bytes_with_separator = arr_copy_slice(shared_secret, shared_secret_bytes_with_separator, 0);\n shared_secret_bytes_with_separator[32] = GENERATOR_INDEX__SYMMETRIC_KEY;\n sha256(shared_secret_bytes_with_separator)\n}\n\n#[test]\nfn test_point_to_symmetric_key_matches_noir() {\n // Value taken from \"derive shared secret\" test in encrypt_buffer.test.ts\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n };\n\n let key = point_to_symmetric_key(secret, point);\n\n // The following value was generated by `encrypt_buffer.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let key_from_typescript = [\n 251, 232, 177, 34, 2, 174, 35, 92, 165, 118, 168, 3, 153, 140, 46, 210, 203, 154, 184, 158, 236, 33, 95, 77, 93, 120, 72, 88, 190, 209, 64, 159\n ];\n assert_eq(key, key_from_typescript);\n}\n"},"84":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/stored_keys.nr","source":"use crate::keys::public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH};\nuse dep::protocol_types::traits::{Serialize, Deserialize};\n\n// This struct represents how public keys are stored in the key registry. We store not just the keys themselves but also\n// their hash, so that when reading in private we can perform a historical read for the hash and then show that it\n// corresponds to a preimage obtained from an unconstrained hint. We do store the keys keys regardless as they might be\n// needed during public execution, and since we need to broadcast and produce hints in some standardized way.\n// While it might seem odd to create a struct for what is effectively some data and a pure function called on it, state\n// variables rely on serializable structs in order to persist data to storage, so we must use this abstraction.\nstruct StoredKeys {\n public_keys: PublicKeys,\n hash: Field,\n}\n\nimpl StoredKeys {\n // Instances of StoredKeys are expected to only be created by calling this function so that we guarantee that the\n // hash field does indeed correspond to the hash of the keys. Ideally we'd forbid direct access to the struct, but \n // Noir doesn't yet support private members.\n fn new(public_keys: PublicKeys) -> Self {\n Self { public_keys, hash: public_keys.hash().inner }\n }\n}\n\n// Our serialization is the concatenation of the public keys serialization plush the hash, so we need one extra field.\nglobal STORED_KEYS_LENGTH: u32 = PUBLIC_KEYS_LENGTH + 1;\n\nimpl Serialize<STORED_KEYS_LENGTH> for StoredKeys {\n fn serialize(self) -> [Field; STORED_KEYS_LENGTH] {\n // The code below is equivalent to:\n // [ ...self.public_keys.serialize(), self.hash ]\n\n let mut array = [0; STORED_KEYS_LENGTH];\n\n let serialized_keys = self.public_keys.serialize();\n for i in 0..serialized_keys.len() {\n array[i] = serialized_keys[i];\n }\n\n array[PUBLIC_KEYS_LENGTH] = self.hash;\n\n array\n }\n}\n\nimpl Deserialize<STORED_KEYS_LENGTH> for StoredKeys {\n fn deserialize(array: [Field; STORED_KEYS_LENGTH]) -> Self {\n // The code below is equivalent to:\n // Self { public_keys: PublicKeys::deserialize(array[0 : PUBLIC_KEYS_LENGTH]), hash: array[PUBLIC_KEYS_LENGTH] }\n\n let mut serialized_keys = [0; PUBLIC_KEYS_LENGTH];\n for i in 0..serialized_keys.len() {\n serialized_keys[i] = array[i];\n }\n\n let hash = array[PUBLIC_KEYS_LENGTH];\n\n Self { public_keys: PublicKeys::deserialize(serialized_keys), hash }\n }\n}\n"},"85":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr","source":"use dep::protocol_types::{\n address::PublicKeysHash, constants::GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n hash::poseidon2_hash_with_separator, point::{Point, POINT_LENGTH},\n traits::{Deserialize, Serialize, Empty, is_empty, Hash}\n};\n\nglobal PUBLIC_KEYS_LENGTH: u32 = 12;\n\nstruct PublicKeys {\n npk_m: NpkM,\n ivpk_m: IvpkM,\n ovpk_m: OvpkM,\n tpk_m: TpkM,\n}\n\ntrait ToPoint {\n fn to_point(self) -> Point;\n}\n\nstruct NpkM {\n inner: Point\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nstruct IvpkM {\n inner: Point\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nstruct OvpkM {\n inner: Point\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\nstruct TpkM {\n inner: Point\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Empty for PublicKeys {\n fn empty() -> Self {\n PublicKeys {\n npk_m: NpkM { inner: Point::empty() },\n ivpk_m: IvpkM { inner: Point::empty() },\n ovpk_m: OvpkM { inner: Point::empty() },\n tpk_m: TpkM { inner: Point::empty() }\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n (self.npk_m.inner == other.npk_m.inner)\n & (self.ivpk_m.inner == other.ivpk_m.inner)\n & (self.ovpk_m.inner == other.ovpk_m.inner)\n & (self.tpk_m.inner == other.tpk_m.inner)\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(\n if is_empty(self) {\n 0\n } else {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field)\n }\n )\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM { inner: Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: serialized[3], y: serialized[4], is_infinite: serialized[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: serialized[6], y: serialized[7], is_infinite: serialized[8] as bool } },\n tpk_m: TpkM { inner: Point { x: serialized[9], y: serialized[10], is_infinite: serialized[11] as bool } }\n }\n }\n}\n\n#[test]\nfn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash = 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nfn compute_empty_hash() {\n let keys = PublicKeys::empty();\n\n let actual = keys.hash();\n let test_data_empty_hash = 0x0000000000000000000000000000000000000000000000000000000000000000;\n\n assert(actual.to_field() == test_data_empty_hash);\n}\n\n#[test]\nfn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"},"87":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr","source":"use dep::protocol_types::{\n header::Header, address::AztecAddress, constants::CANONICAL_KEY_REGISTRY_ADDRESS,\n storage::map::derive_storage_slot_in_map\n};\nuse crate::{\n context::{PrivateContext, UnconstrainedContext},\n oracle::{keys::get_public_keys_and_partial_address, key_validation_request::get_key_validation_request},\n keys::{public_keys::{PublicKeys, PUBLIC_KEYS_LENGTH}, stored_keys::StoredKeys, constants::NULLIFIER_INDEX},\n state_vars::{public_mutable::PublicMutable, map::Map}\n};\n\nmod test;\n\n// This is the number of blocks that must pass after a key rotation event until the old keys are fully phased out and\n// become invalid.\nglobal KEY_REGISTRY_UPDATE_BLOCKS = 5;\n\nglobal KEY_REGISTRY_STORAGE_SLOT = 1;\n\nunconstrained pub fn get_nsk_app(npk_m_hash: Field) -> Field {\n get_key_validation_request(npk_m_hash, NULLIFIER_INDEX).sk_app\n}\n\n// Returns all current public keys for a given account, applying proper constraints to the context. We read all\n// keys at once since the constraints for reading them all are actually fewer than if we read them one at a time - any\n// read keys that are not required by the caller can simply be discarded.\npub fn get_current_public_keys(context: &mut PrivateContext, account: AztecAddress) -> PublicKeys {\n // We're going to perform historical reads from public storage, and so need to constrain the caller so that they\n // cannot use very old blocks when constructing proofs, and hence e.g. read very old keys. We are lax and allow\n // _any_ recent block number to be used, regardless of whether there may have been a recent key rotation. This means\n // that multiple sets of keys are valid for a while immediately after rotation, until the old keys become phased\n // out. We *must* be lax to prevent denial of service and transaction fingerprinting attacks by accounts that rotate\n // their keys frequently.\n // Note that we constrain the max block number even if the registry ends up being empty: this ensures that proof of\n // an empty registry is also fresh.\n let current_header = context.get_header();\n context.set_tx_max_block_number(current_header.global_variables.block_number as u32 + KEY_REGISTRY_UPDATE_BLOCKS);\n\n get_historical_public_keys(current_header, account)\n}\n\n// Returns historical public keys for a given account at some block determined by a block header. We read all keys at\n// once since the constraints for reading them all are actually fewer than if we read them one at a time - any read keys\n// that are not required by the caller can simply be discarded.\n// WARNING: if called with a historical header created from a fixed block this function will explicitly ignore key\n// rotation! This means that callers of this may force a user to use old keys, potentially leaking privacy (e.g. if the\n// old keys were leaked). Only call this function with a header from a fixed block if you understand the implications of\n// breaking key rotation very well.\npub fn get_historical_public_keys(historical_header: Header, account: AztecAddress) -> PublicKeys {\n // TODO: improve this so that we always hint the correct set of keys (either registry or canonical) and hash them\n // once instead of having two different hints and twice as many constraints due to the double hashing.\n\n // The key registry is the primary source of information for keys, as that's where accounts store their new keys\n // when they perform rotation. The key registry conveniently stores a hash of each user's keys, so we can read that\n // single field and then prove that we know its preimage (i.e. the current set of keys).\n let key_registry_hash = key_registry_hash_public_historical_read(historical_header, account);\n if key_registry_hash != 0 {\n let hinted_registry_public_keys = key_registry_get_stored_keys_hint(\n account,\n historical_header.global_variables.block_number as u32\n );\n assert_eq(hinted_registry_public_keys.hash().to_field(), key_registry_hash);\n\n hinted_registry_public_keys\n } else {\n // If nothing was written to the registry, we may still be able to produce the correct keys if we happen to know\n // the canonical set (i.e. the ones that are part of the account's preimage).\n let (hinted_canonical_public_keys, partial_address) = get_public_keys_and_partial_address(account);\n assert_eq(\n account, AztecAddress::compute(hinted_canonical_public_keys.hash(), partial_address), \"Invalid public keys hint for address\"\n );\n\n hinted_canonical_public_keys\n }\n}\n\nfn key_registry_hash_public_historical_read(historical_header: Header, account: AztecAddress) -> Field {\n // The keys are stored in a Map that is keyed with the address of each account, so we first derive the corresponding\n // slot for this account.\n let keys_storage_slot = derive_storage_slot_in_map(KEY_REGISTRY_STORAGE_SLOT, account);\n\n // The keys are stored as [ ...serialized_keys, hash ], and since arrays get allocated sequential storage slots\n // (prior to siloing!), we simply add the length to the base slot to get the last element.\n let hash_storage_slot = keys_storage_slot + PUBLIC_KEYS_LENGTH as Field;\n\n historical_header.public_storage_historical_read(hash_storage_slot, CANONICAL_KEY_REGISTRY_ADDRESS)\n}\n\nunconstrained fn key_registry_get_stored_keys_hint(account: AztecAddress, block_number: u32) -> PublicKeys {\n // This is equivalent to the key registry contract having an unconstrained getter that we call from an oracle, but\n // PXE does not yet support that functionality so we do this manually instad. Note that this would be a *historical*\n // call!\n\n // TODO (#7524): call the unconstrained KeyRegistry.get_current_keys() function instead\n\n let context = UnconstrainedContext::at_historical(CANONICAL_KEY_REGISTRY_ADDRESS, block_number);\n let keys_storage = Map::new(\n context,\n KEY_REGISTRY_STORAGE_SLOT,\n |context, slot| { PublicMutable::new(context, slot) }\n );\n\n let stored_keys: StoredKeys = keys_storage.at(account).read();\n stored_keys.public_keys\n}\n"}}}
|
|
1
|
+
{"transpiled":true,"noir_version":"0.34.0+02fea6abe8637b9fb8f9535d1709b367d5e1da5c","name":"EcdsaKAccount","functions":[{"name":"constructor","is_unconstrained":false,"custom_attributes":["private","initializer"],"abi":{"error_types":{},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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Y70dbKW0Y70dRjtox2o72Eppx3o72Eppx3o72Eppx3o72Eppx3o72Eppx1o7asdWSjvW28FWSjvW28FWSjvW28FWSjvW22G0g3astoOtlHast4OtlHast4OtlHast4OtlHast4OtlHastqNnK6Ud6+1gK6Ud6+1gK6Ud6+1gK6Ud6+0w2kE7VtvBVko71tvBVko71tvBVko71tvBVko71tvBVko7VtsxsJXSjvV2sJXSjvV2sJXSjvV2sJXSjvV2GO2gHavtYCulHevtYCulHevtYCulHevtYCulHevtYCulHavtSGyltGO9HWyltGO9HWyltGO9HWyltGO9HUY7aMdqO9hKacd6O9hKacd6O9hKacd6O9hKacd6O9hKacdqO4ytlHast4OtlHast4OtlHast4OtlHast8NoB+1YbQdbKe1YbwdbKe1YbwdbKe1YbwdbKe1YbwdbKe1YbcfIVko71tvBVko71tvBVko71tvBVko71tthtIN2rLaDrZR2rLeDrZR2rLeDrZR2rLeDrZR2rLeDrZR2rLYjs5XSjvV2sJXSjvV2sJXSjvV2sJXSjvV2GO2gHavtYCulHevtYCulHevtYCulHevtYCulHevtYCulHavtmNhKacd6O9hKacd6O9hKacd6O9hKacd6O4x20I7VdrCV0o71drCV0o71drCV0o71drCV0o71drCVBmxHGpd2lPxH5IUB9HTIWTVPh5yp8nTI2R9Ph9xAfjbkLIWnQ878dzrkbHqnQ85QdzrkrG/xkKdpfnCx3rYf/BZaWkIrH8885FuZ9eP86qyf0uWDf5SpsutRpmZlYjGkTM3KxBZJmZqViZWTMjUrk1EmytSqTCyzlKlZmdh8KVOzMrEmU6ZmZWKnpkzNysQCTpkalanvOiZw2tSuTWzgtKldmxjBaVO7NrGC06Z2bTLaRJuatYkdnDa1axNDOG1q1yaWcNrUrk1M4bSpXZvYwmlTszb1bOG0qV2b2MJpU7s2sYXTpnZtYgunTe3aZLSJNjVrE1s4bWrXJrZw2tSuTWzhtKldm9jCaVO7NrGF06ZmbRrYwmlTuzaxhdOmdm1iC6dN7drEFk6b2rXJaBNtatYmtnDa1K5NbOG0qV2b2MJpU7s2sYXTpnZtYgunTc3alNjCaVO7NrGF06Z2bWILp03t2sQWTpvatcloE21q1ia2cNrU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","brillig_names":["get_contract_instance_internal","get_public_keys_and_partial_address","decompose_hint","notify_created_note","get_key_validation_request","unsafe_rand","lt_32_hint","lte_16_hint","build_msg_block_iter","pad_msg_block","attach_len_to_msg_block","build_msg_block_iter","emit_encrypted_note_log","directive_invert","directive_integer_quotient"]},{"name":"verify_private_authwit","is_unconstrained":false,"custom_attributes":["private","noinitcheck","view"],"abi":{"error_types":{"12265343917440897559":{"error_kind":"fmtstring","item_types":[],"length":20}},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"inner_hash","type":{"kind":"field"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","build_msg_block_iter","pad_msg_block","attach_len_to_msg_block","pack_returns","directive_invert","directive_integer_quotient"]},{"name":"entrypoint","is_unconstrained":false,"custom_attributes":["private"],"abi":{"error_types":{"12265343917440897559":{"error_kind":"fmtstring","item_types":[],"length":20}},"parameters":[{"name":"inputs","type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"aztec::context::inputs::private_context_inputs::PrivateContextInputs"},"visibility":"private"},{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"},"visibility":"private"},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"},"visibility":"private"},{"name":"cancellable","type":{"kind":"boolean"},"visibility":"private"}],"return_type":{"abi_type":{"fields":[{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"min_revertible_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"is_fee_payer","type":{"kind":"boolean"}},{"name":"max_block_number","type":{"fields":[{"name":"_opt","type":{"fields":[{"name":"_is_some","type":{"kind":"boolean"}},{"name":"_value","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"std::option::Option"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::max_block_number::MaxBlockNumber"}},{"name":"note_hash_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"nullifier_read_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::read_request::ReadRequest"}}},{"name":"key_validation_requests_and_generators","type":{"kind":"array","length":16,"type":{"fields":[{"name":"request","type":{"fields":[{"name":"pk_m","type":{"fields":[{"name":"x","type":{"kind":"field"}},{"name":"y","type":{"kind":"field"}},{"name":"is_infinite","type":{"kind":"boolean"}}],"kind":"struct","path":"std::embedded_curve_ops::EmbeddedCurvePoint"}},{"name":"sk_app","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request::KeyValidationRequest"}},{"name":"sk_app_generator","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::validation_requests::key_validation_request_and_generator::KeyValidationRequestAndGenerator"}}},{"name":"note_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::note_hash::NoteHash"}}},{"name":"nullifiers","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::nullifier::Nullifier"}}},{"name":"private_call_requests","type":{"kind":"array","length":4,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"returns_hash","type":{"kind":"field"}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_call_request::PrivateCallRequest"}}},{"name":"public_call_requests","type":{"kind":"array","length":16,"type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}}},{"name":"public_teardown_call_request","type":{"fields":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"call_context","type":{"fields":[{"name":"msg_sender","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"storage_contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"is_delegate_call","type":{"kind":"boolean"}},{"name":"is_static_call","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::call_context::CallContext"}},{"name":"args_hash","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::public_call_request::PublicCallRequest"}},{"name":"l2_to_l1_msgs","type":{"kind":"array","length":2,"type":{"fields":[{"name":"recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"content","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::messaging::l2_to_l1_message::L2ToL1Message"}}},{"name":"start_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"end_side_effect_counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"note_encrypted_logs_hashes","type":{"kind":"array","length":16,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"note_hash_counter","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::NoteLogHash"}}},{"name":"encrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}},{"name":"randomness","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::EncryptedLogHash"}}},{"name":"unencrypted_logs_hashes","type":{"kind":"array","length":4,"type":{"fields":[{"name":"value","type":{"kind":"field"}},{"name":"counter","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"length","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::log_hash::LogHash"}}},{"name":"historical_header","type":{"fields":[{"name":"last_archive","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"content_commitment","type":{"fields":[{"name":"num_txs","type":{"kind":"field"}},{"name":"txs_effects_hash","type":{"kind":"field"}},{"name":"in_hash","type":{"kind":"field"}},{"name":"out_hash","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::content_commitment::ContentCommitment"}},{"name":"state","type":{"fields":[{"name":"l1_to_l2_message_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"partial","type":{"fields":[{"name":"note_hash_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"nullifier_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}},{"name":"public_data_tree","type":{"fields":[{"name":"root","type":{"kind":"field"}},{"name":"next_available_leaf_index","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::append_only_tree_snapshot::AppendOnlyTreeSnapshot"}}],"kind":"struct","path":"authwit::aztec::protocol_types::partial_state_reference::PartialStateReference"}}],"kind":"struct","path":"authwit::aztec::protocol_types::state_reference::StateReference"}},{"name":"global_variables","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"block_number","type":{"kind":"field"}},{"name":"slot_number","type":{"kind":"field"}},{"name":"timestamp","type":{"kind":"integer","sign":"unsigned","width":64}},{"name":"coinbase","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::eth_address::EthAddress"}},{"name":"fee_recipient","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"gas_fees","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::global_variables::GlobalVariables"}},{"name":"total_fees","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::header::Header"}},{"name":"tx_context","type":{"fields":[{"name":"chain_id","type":{"kind":"field"}},{"name":"version","type":{"kind":"field"}},{"name":"gas_settings","type":{"fields":[{"name":"gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"teardown_gas_limits","type":{"fields":[{"name":"da_gas","type":{"kind":"integer","sign":"unsigned","width":32}},{"name":"l2_gas","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas::Gas"}},{"name":"max_fees_per_gas","type":{"fields":[{"name":"fee_per_da_gas","type":{"kind":"field"}},{"name":"fee_per_l2_gas","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_fees::GasFees"}},{"name":"inclusion_fee","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::gas_settings::GasSettings"}}],"kind":"struct","path":"authwit::aztec::protocol_types::transaction::tx_context::TxContext"}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::private_circuit_public_inputs::PrivateCircuitPublicInputs"},"visibility":"public"}},"bytecode":"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","debug_symbols":"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pJODkk4OSjo5KO3koLSTg9JODko7OajDuye9NNlODko7OSjt5KC0k4PSTg7KOjko6+SgrJODsk4O6vCuZi9NtpODsk4Oyjo5KOvkoKyTg/JODso7OSjv5KC8k4M6vNvgS5Pt5KC8k4PyTg7KOzko7+SgopODik4OKjo5qOjkoA7vAvrSZDs5qOjkoKKTg4pODio6Oajs5KCyk4PKTg4qOzmow7vzvjTZTg4qOzmo7OSgspODyk4Oqjo5qOrkoKqTg6pODurwrtkvTbaTg/pi3b7vJNvJQX2xbt93ku3koL5Yt+87yXZyULOTg5qdHNThncRfmmwnB8XuOb53sp0cFLvX+N7JNnJQ9dV6kn+cbCMHVV+tJ/nHyTZyULVYp2QbOajq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkr049yatTT/Lq1JO8OvUkn516ks9OPclnp57ks1NP8rlYp2QbOajZqSf57NSTfHbqST479SSfnXqSz049yWennuSzU0/y2akn+ezUk3x26kk+O/Ukn516ks9OPclnp57ks1NP8tmpJ/ns1JN8dupJPjv1JJ+depLPTj3JZ6ee5LNTT/LZqSf57NSTfHbqST479SSfnXqSz049yWennuSzU0/y2akn+ezUk3x26kk+O/Ukn516ks9OPclnp57ks1NP8tmpJ/ns1JN8dupJPjv1JJ+depLPTj3JZ6ee5LNTT/LZqSf57NSTfHbqST479SSfnXqSz049yefxPck1/HJqG+PjZIenXo4evgrMn5L9nsD4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","brillig_names":["get_note_internal","decompose_hint","get_auth_witness","build_msg_block_iter","pad_msg_block","attach_len_to_msg_block","enqueue_public_function_call_internal","call_private_function_internal","debug_log_format","notify_set_min_revertible_side_effect_counter","directive_invert","directive_integer_quotient"]},{"name":"compute_note_hash_and_optionally_a_nullifier","is_unconstrained":true,"custom_attributes":[],"abi":{"error_types":{"12265343917440897559":{"error_kind":"fmtstring","item_types":[],"length":20}},"parameters":[{"name":"contract_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"},"visibility":"private"},{"name":"nonce","type":{"kind":"field"},"visibility":"private"},{"name":"storage_slot","type":{"kind":"field"},"visibility":"private"},{"name":"note_type_id","type":{"kind":"field"},"visibility":"private"},{"name":"compute_nullifier","type":{"kind":"boolean"},"visibility":"private"},{"name":"serialized_note","type":{"kind":"array","length":5,"type":{"kind":"field"}},"visibility":"private"}],"return_type":{"abi_type":{"kind":"array","length":4,"type":{"kind":"field"}},"visibility":"public"}},"bytecode":"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","debug_symbols":"7Z3druTKcaXf5VzrIn8i//wqg4Eh27JxAEEyLHmAgaF3d/WuU6zazWLm3jhJRkTGujFaFlUd8a0mc61gkvyfX/7tT//y3//xz7/+5d//+rdf/un//M8vf/7rv/7x77/+9S+3//Q///jDL//yX7/++c+//sc/v/6/f3E//g/Fj+P/9p9//MuP//i3v//xv/7+yz+FmP7wy5/+8m+3P5G7/e///dc//+mXfyJH//i/f/iF6Nv/k+S/9z/5w+7YEn47tJTtyNQ+fjuc+NvxxN+mE387nfjb+cTfLif+dj3xt9t5v53dib994nmZTzwv84nnZT7xvMwnnpf5xPMyn3he5hPPy3zieVlOPC/LiedlOfG8LCeel+XE87KceF6WE8/LcuJ5WU48L8uJ52U98bysJ56X9cTzsp54XtYTz8t64nlZTzwv64nnZT3xvKwnnpftxPOynXhethPPy3biedlOPC/biedlO/G8bCeel+3E87KdeF565878cX/mj4czfzye+eN05o+nM388n/nj5cwfr2f++JlnqD/zDPVnnqH+zDPUn3mG+jPPUH/mGerPPEP9mWeoP/MM9WeeoeHMMzSceYaGM8/QcOYZGs48Q8OZZ2g48wyl3y1odsH9dnB2OWxH++jfHO2Lb78d7UusL7+d7vVEYfWQsHqSsHqysHqKsHqqsHqarHqSE1aPF1aPsOtzEnZ9TsKuz0nY9TkJuz4nYdfnJOz6nIRdn7Ow63MWdn3Owq7PWdj1OQu7Pmdh1+d88fUnlfLbwam27dgY4r2aJqmacvG/5exeDt5XQ6KqSaKqyaKqKaKqqaKqaZKqqRPcxetfEAfVBOcfR9/+6HdX4+qF1ROE1ROF1UPC6knC6snC6inC6qnC6mmy6mnCrs9N2PW5Cbs+N2HX5ybs+tyEXZ+bsOtzE3Z9bsKuz03W9Tk4Wdfn4C6/PlPb6kluX08QVk8UVg8JqycJqycLq6cIq6cKq6fJqsc7YfUIuz57YddnL+z67IVdn72w67MXdn32wq7PXtj12Qu7Pgdh1+dw+fW51sdP+5f5/FZPEFZPFFYPMdbjP99N3h8d2/avLbactqNDfnMwxfyommKNrwd/dJrMdJrNdFrMdFrNdNqsdBqdmU69mU6DmU6jmU7JTKdmPFIU5JE+6hHkZD7qEeQ3ftRDV68gnsJWD9G+niCsnqvPXJ+2OYB/OXqr5+rz63Zn4fHTt6i3r6cIq6cKq6cx1hPLhVf+5Mx06s10Gsx0Gs10SmY6TWY6zWY6LWY6rWY6NeORMqdHorZzp9kLqycIq+dqV+Dblv6C26fRGc/MTq0nCasnC6unCKunCqunyaqnOGH1XH59rts0LLr9LpQShNUThdVDwupJjPX4cKGzKtlMp8VMp9VMp81Kp5c/18/XqTfTaTDTaTTTKZnp1IxHqoI80kc9gpzMRz2C/MaPei5/p0GMeatn/0aycPkz+zHFrZ5U9vVcfeaS89tP+/208PJn9kf1FGH1VGH1NMZ6or/uyh8vfxsAX6feTKfBTKfRTKdkptNkptNsptNiptNqplMzHslzeiTa7fSO3gurJwir52pXENszjba6r4eE1ZOE1ZOF1VOE1VOF1dNk1XP5GzlG9Xhh9QRh9Qi7Pgdh1+cg7PochF2fg7Dr8+VviqBnPWn/Rs14+fscBvVc/taFUT1eWD2nXp8//oZ4+t9Ap/8N6fS/IZ/+N5TT/4Z6+t/Qzv4byJ3+N/jT/4bTz2k6/Zym089pOv2cptPPaTr9nKbTz2k6/ZxOp5/T6fRzesYzz7ltf0OlgW8YfAcuzngyeWo9JKyeJKyeLKyeIqyeKqyeJqueGc+ITq3HC6tH2PU5C7s+Z2HX5yzs+pyFXZ+zsOtzFnZ9zsKuz0XY9bkIuz4XYdfnIuz6XIRdn4uw63MRdn2e8Lylf34X19Pou7i32xCPOXJs6fMb5d5Uf5vfPKq/DVr21VfV1TfN1U941vHU6suz+vKmeq+6+qC6+ii6enKP54Rufyz76kl19Ul19Vl19bKv9xTdVn3cPa8Xm+zr/ah62WdtLo83dflc9/9ymuyzdlS97LN2VL1sh/xafcv76mU75EE6abKvmP3qycm+Yo6qv9ghk2vbAww+jN5beStvO9qlZ/WhvTm4bI9GlPp8UDa8/V3/+KDA6/MZbw+Nrmy43evvvn08w6dnd+XnxzPIBcC+DnYE7OtgE2BfBzsB9nWwM2BfB7sA9nWwK2C/HPqBpAHJT0i8A5KfkdjMTPnxKDPlsENiM9l0kdjMH10kZBJJe5RMbX8tsenlu0hsOu4uEpO+OG0/m3zeITHpXvtITLrXLpJg0pek+NiZkeIeiUlf0kdicsXJ9LinmLPbITG54vSRyF5xPPnnsKe9IvkoXvba0C8+yp5B+Jh6xcueFtwO6RUve/0cFC97pRsUTxcX/+kUjFwpiGcUHhNgXwc7A/Z1sAtgXwe7AvZ1sBtgXwabHGBfB9sD9k/ZmwKQ/IwkAsnPSMgkkt4tV7KZbLpIbOaPLhKbKaF3y5VsevkuEpuOu4ckmfTF3VuuyaR77SMx6V77SEz6ku5d6GRyxeneck0mV5wukix7xenfyM2y14b+jdws+yrev52YZU8LBsWT5uIvX+nqVk746YvBy49Ocwbs62AXwL4OdgXs62A3wL4MdnGAfR1sD9jXwQ6A/VN8LRFIfkZCQPIzEpuZqXeLrthMNl0kNvNHF4nNlNC7RVdsevkekmrTcXeRmPTF3Vt01aR77SMx6V77SEz6ku6N3GpyxenetWwmV5w+EtkrTv9GbpO9NvRv5DbZV/H+7cSrX3E/t3jZuX5Q/NUrXdhe9E0hJ2lzmnNHp1e/j9827ArY18FugH0V7HT1xxlsw/aAfR3sANjXwY6A/Tm+JkdA8jOSBCQ/I7GZmTq36JKzmWy6SGzmjy4Smymhc4sueZtevovEpuPuIjHpi3u36JI36V77SAhIfkZi0pf0buSmYHLF6d21TMHkitNHInvF6d7ITUH22tC9kZuC7Kt493ZiCrKnBYPiZef6QfGXr3SlPUckXtqc5tzR6eVvzTcNuwH2ZbAv/yqBadgesK+DHQD7OtgRsK+DTYD9U3y9/NsXCpBkIPkZic3M1LtFF20mmy4Sm/mjh4RspoTeLTqy6eW7SGw67i4Sk764e4vu8u8bKEBi0r32kZj0Jd0bucnkitO9a5lMrjh9JLJXnP6N3CR7bejfyE2yr+L924lJ9rRgULzsXD8o/uqVLobtX3EsJG1Oc+7o9PJ38VuGfflb/k3D9oB9HewA2NfBjoB9HWwC7OtgJ8D+Kb5e/u0LBUgKkPyMxGZm6t2iyzaTTQ9JsZk/ukhspoTeLbpi08t3kdh03F0kZBFJ9xZdMele+0hMutc+EpO+pHsjt5pccbp3LavJFaePRPaK07+RW2WvDf0buVX2Vbx/O7HKnhYMiped6wfFX7zSxZa3cmIbFR/LNlCJJT+PDvRR/NXvtp9bvNdcfNBcfNRcPGkuPmkuPmsuvmguvmouXvEKm53iFTY7xStsdopX2OwUr7DZKV5hs1O8wmaneIXNTvEKm53iFTY7zSus17zCes0rrNe8wnrNK+zV74CdW7zmFdZrXmG95hXWa15hveYVNmheYYPmFTZoXmGD5hX26vfzzi1e8wobNK+wQfMKGzSvsEHzChs1r7BR8wobNa+wUfMKe/X7LOcWr3mFjZpX2Kh5hY2aV9ioeYUlzSssaV5hSfMKS5pX2KvfuTe3eM0rLGleYUnzCkuaV1jSvMImzSts0rzCJs0rbNK8wl795sK5xWteYZPmFTZpXmGT5hU2aV5hs+YVNmteYbPmFTZrXmGvfjPZ3OI1r7BZ8wqbNa+wWfMKmzWvsEXzCls0r7BF8wpbNK+wV7/jaG7xmlfYonmFLZpX2KJ5hS2aV9iqeYWtmlfYqnmFrZpX2Kvf6fTd4tvjrWWxurorXvgK2y9e+ArbL37CCru9tTyHUAbF+xof/4p9TS/vwizxXk8VVk+TVc+MlylNrccLqycIqycKq4eE1ZOE1ZOF1SPs+tyEXZ/b1dfnRvnx086/LKelvjvaPX/cu+Djp+Nv9RfnlNfvldcflNcflddPyutPyuvPyusvyuuvyutXvv565euvV77+euXrr1e+/s54yQ9r/crXX698/fXK11+vfP31ytffoHz9DcrX36B8/Q3K198ZrwA6s/7g27P+GEbHe/e42eR9enYb6d6s8MV6brPCV/a5zQq3Ad9sluqj8Nsf865Z4Z5hbrPCDcbUZqNwN/LNZrPb7p3kmHbNCrcuc5sV7nPmNivcFM1tliw1u5aDGjS7loMaNLuWgxo0u5aDGjS7loPqN0uWHBRZclBkyUGRJQc14xVeepq15KDIkoMiSw6KFnNQqWzNlrJrdjEH1W02Leag+s0u5qD6zS5mKvrNkqVmFzMV/WYXMxX9ZhczFf1mLZmKLH3ped05UNOn4z/qF36BjfFZf6Tyu47/6Ff4Nfab/d4c/OPwknc3IrPwa+zcZoVfY6c2W4Tb+282W7N/HF6re212f3ANjy0kNdQdF+Hm+EQuP67122+T25FZ60L/LTL9XUdlrSVhJpm11o+ZZNZabGaSEe7+GckInz/ykal23cyIjPB4yUhG+I1kRjKGPfCADIHMARl44CMy8MBHZOCBj8hY8cAfzVqxtT+abVac6kezVsznR7NW/ORHs2tZxNbK89f3zZKlZtcycoNm1/Jmg2bXsluDZtdyUINmf7+DCulRfo4vd8XeNxu8f1QfQhrfUx+8faBOePskb/1eef1Bef1Ref2kvP6kvP6svP6ivP6qvH7l669Xvv565euvV77+euXr74S3T/LWr3z99crXX698/fXK11+vfP0NytffoHz9DcrX3yB8/Z35jr864VWVipoVvrLPbVa4DZj5jr8ahHuGuc0KNxhzmxXuRma+AKJG4dZlbrPCfc7cZoWbornNruWgBs2SpWbXclCDZtdyUINm13JQg2bXclCDZi05KLLkoMiSgyJLDoosOagJr6pU1KwlB0WWHBQt5qB6L1qqtJiD6je7mIPqNpsWc1D9ZhczFf1mFzMV/WbJUrOLmYp+s4uZin6zlkxFlr709N/eWLPwC+zktzfWLPwaO/MdfzULv8bObVb4NXZus8LtPdPbG2sRbo7Z3t5Yy1oX+nnv2qgT3mu5Kpm11o+ZZNZabGaSEe7+GckInz8ykrHrZgZkqvB4yUhG+I1kRjKGPfCADDzwERkCmQMy8MBHZOCBj8hY8cAfzVqxtR/NWnGqP5ptVsznR7NW/ORHs2tZxO7L0Wpby/UNmiVLza7lzQbNrmW3Bs2u5aC6zbZz37738TfE0/8GOv1vSKf/Dfn0v6Gc/jfU0/+G32+BY33c284U8uDUpOYfWYsatZffTm+OTqk+jE/KwQ9++xbjtrvsrrjB0bFtZ31sKQ0q8ZG2jBjp89E/OE545xo4/uDowXEKxwCOX+NYnhzLG44RHKdwJHCcwjGB45c4knv4ntsfy55jBscpHAs4zuAY4B+/yDG6jePLdv+NI9brr3HM5fkgRH3z7xHr9RyOWK/ncMR6/X2OLe85Yr3+GsfyfK6shLbnWMFxCkfMH6dwjPCP3+cY654j5o9zOGL+OIej2TxDrj2aJB/KoBJyfjvapSfHH5fK3cElP44t9dliePu7/lEyRd8/NLrt6ezoXn83v/3d9OyuxNeDP2QnyG5RdrNp0bbsZsOtbdnNZnHbspsdHdiW3eykw7TsZHYwI1z2D3HMTns0iGN2hKRBHMyleMXZngijHHbiEMSRKw5mPILFwSSGV5zmNhz7NQfzEsHiYKohWBzMHljFSdvPJp9/FidhQiBYHEwIBItDEIdVnPjAkeJeHLg1VnEyPTYC5+x24sCtCRYHbu1r4njaorwv7VWcHxgzfNUXMcbUwwgH9EWM2xv732LE3YwpGHHfYQpGMovx06IRuaY1PJsRst17D6Zlt3tXw7TsdhO4adntZnvTstudGliWvdidcpiW3e5URrbsH+LYnfUoEMfuBEmBOARxWMXpbY4smB4JFgczHsHiYBLDK05vc2TBvESwOJhqyBWnYvbAKk53c2TFhECwOJgQCBYHOYdXnN624gq3xipOd+dqhVuTK06DW/uaOP1txQ2+6osYu9uKGxzQFzF2N3I23M2YgpGAcQZGw865bmCCH1Wy2GaEZvjeg2XZDd/VsCy74QRuWXbD2d6u7N45w2MD07obnnOY1t3wYEa07nd1DM97FKhDUEewOphO8arT2SJ5UwdDJMnqYNYjWR2MZHjV6eySvKmDyYlgdTzmG5LVwRSCVZ3eRsmbOpgVSFYHswLJ6iDv8KrT2WV8UweejVWd3k5W7wI8m2R14Nm+pk53o/GNI9zVFzn2dhrfOMIHfZFjb3PnjSOB4xSOuA8xh6NdBx1i3DjmxDW5YdqhEOzei7Ctu927HLZ1t5vFTese7aZ827rbnR/Y1t3uvMO27nbnM7J1v6tDUEewOnZnSRrUwYSKV53ursmIOZJkdTDtkawOZjK86nR3TRImJ5LVwXxDsjqYQrCq0981SZgVSFaHoI5gdZB3eNXp7jhO8Gys6vT3tCZ4NsnqwLN9TZ3BjuMEd/VFjv0dx4nA8Wsc+zs8E+5uzOGI+xBzOBp20KU9Konec01umHYoJMP3Ikzrbvguh2Xds+Esblp3wynftO6G5wemdTc87zCtO0F3kbrf1TE89VGgjuFZkgJ1MKHiVae7azJjjiRZHUx7BKtTMJPhVae7a7JgciJZHcw3JKuDKQSrOv1dk4WgjmB1MCuQrA7yDq863R3HFZ6NVZ3+ntYKzyZZHXi2r6kz2HFcCRy/xrG/47jCB32RY3+HZ8XdjTkccR9iDke7DjqG7YoXC3FNbph2KFS79yJM697s3uWwrbvdLG5bd7sp37buducHtnUn6G5Sd7vzGdm639WxO/XRoI7dWZIGdTCh4lWnu2uyYY4kVx3vMO2RrA5mMrzq9HZNeofJiWR1MN+QrA5BHU51ursmvcOsQLI6mBVIVgd5h1ed3o5j7+HZWNXp7mn1Hp5NsjoEdb6kTn/HsfdwV1/k2N1x7D180Bc5dnd4eo+7G3M44j7EHI5mHXRseSMT24hjLNttsVjy8+hAd47B7Gx/MkezU/jJHM1mr8kczaakyRwJHKdwNJtnJnM0m2cmczSbZyZzNJtnJnNEnpnCMSLPzOGIPDOHI/LMHI7IM3M4EjhO4Yg8M4cj8swcjsgzczgiz8zhiDwzhSMhz8zhiDwzhyPyzByOyDNzOBI4TuGIPDOHI/LMHI7IM3M4Is/M4Yg8M4VjQp6ZwxF5Zg5H5Jk5HJFn5nAkcJzCEXlmDkfkmTkckWfmcESemcMReWYKx4w8M4cj8swcjsgzczgiz8zhSOA4hSPyzByOyDNzOCLPzOGIPDOHI/LMFI4FeWYOR+SZORyRZ+ZwRJ6Zw5HAcQpH5Jk5HJFn5nBEnpnDEXlmDkfkmSkcK/LMHI7IM3M4Is/M4Yg8M4cjgeMUjsgzczgiz8zhiDwzhyPyzByOyDNTODbkmTkckWfmcESemcMReWYORwLHKRyRZ+ZwRJ6ZwxF5Zg5H5Jk5HJFnZnAMdr8tP5kj8swcjsgzX+TYHnXH6uqeI/LMHI4EjlM4rpRnfNk43gaCn46+N7tS6Bg2u5ITCzE8mg0v30g8OLrGDU1Nz98OJd7R+JXM1WQ0K/mlyWhWskCT0azkaiajIaA5QrOS95iMZiWnMhnNShPPyWhWGmJORgM3fIRmqU9dT0Zj1w03yo8mnX+ZG5Tbn/dHO1/iNsK42cFPx99R2nXP01HaddvTURJQzkJp181PR2nX/U9HaTctTEdpN11MR2k3jcxGudSHrZlRIu1MQ4m0Mw0l0s40lASUs1Ai7UxDibQzDSXSzjSUSDvTUCLtzEK51GevmVEi7UxDibQzDSXSzjSUBJSzUCLtfBFl8O2JMobR8d49+vzxqcjt6Pjb7vylvpqtiTtyFA93hK5zuFN9ILz9Me+5I6GxcF/qq9+auCP7ncM9u21DZY5pzx1BkYc7UiUPdwJ3Fu7IqzzckVd5uCOv8nBHXuXhjrzKwn2pr7pr4o68ysMdeZWHO/IqD3cCdxbuyKs83JFXebgjr/JwR149iXsqG/dS9tyRV1m4F+RVHu7IqzzckZt4uBO4s3BHbuLhjtzEwx25iYc7chML96W+rn4u99dHOGr6dPwdJQHl11DG+EQZqfyu4+/o4VLOQV+e380oeb/Ld6lvZmviDpfCwn2pbyBL4l7zo3Jfq3vlvj+4hgeTGupeIgxo+CX64Za23ya3F4kgEr9Ig0cFl/oQ77IiwYEpEAl2TYFImEApEAm3+cWLFJf6svKyImHwq0Ak7I5XIBImDgpEIogkXyRMHBSIhImDApEwcVAgEiYOV4t0544hAgt3j7kAD3dEfR7uSO883BHIz+HeWnn++hvuBO4s3BGbebgjCfNwR7jl4Y68ysI9wL/zD3O6u05jgNXnl6jV55NR7o1GsEnyNYKlkq8R7JeAewv9HfYxwKspEAk3IuSLFHHXQoFIiEgKREJIUiASbp4oEIkgknyRMG+QIBJte7BcKnuRMHBQIBImDgpEwsRBgUiYOMgXiTBxUCASJg4KRMLEQVhOeicSJg7ywywRRJIvEiYOCkTCxEGBSJg4KBAJEwcFImHiIF+khImDApEwcVAgEiYOCkTCxEGBSASR5IuEMKtAJIRZBSIhzCoQCWFWvkgZFvyrInn3FMm3T8ffUcIoT0NJQDkLJW5zTUMJ/z4NJVz2NJTwwtNQwrF+EWVo+YnStdHxg3e7FtxROYd78NsXGkPMe+64ScLDHaGLhzsSGg93AvdzuCf3rOXNugqXfQ53qg+Etz+++fcOS87DHf6dhXuFfz+He3bbuppj2nOHf+fhDv/Owx3+nYc7gTsLd9y74eGOGz083JFXebgjr/JwR15l4d6QV3m4I6/ycEde5eGOvMrDncD9HO5p20ycy/7lNA15lYc78ioPd+RVHu7IqzzckVc5uJODjzyHe9y+JejJf7qvvT+4+007cliC+SUaPOxGDuu1ApGwuAsQqb9jnxycgHyRPMbcCkTCTFyBSBigKxAJKUmBSASR5IuEOb4CkTBxUCASJg4KRMLEQYFImDjIFylg4qBAJEwcFIiEiYMCkTBxUCASQST5ImHicLVId+4YIvBwx1yAhzuiPg93pHcW7hGBnIc7MvY53OlZC1Hac0ds5uGOJMzDncCdhTvyKg935FUe7sirPNyRV3m4I6+ycCfkVR7uyKs83JFXebgjr/JwJ3BneEP3TQpwZ+GOvMrDHblpAvc7SkShWSgT0s00lAgs01ASUAp/u0yCfeOXqNW2/bR7oxEsh3yN4GXEa5Rhkvg1Gr2kKcN+KRAJw2UFImESrUAkgkjyRUJIUiASBuIKRMJuLwUiYd4gQSTanmt1af/m7oyBg3yRCiYOCkTCxEGBSJg4KBAJEwcFIhFEki8SJg7CctI7kTBxkB9mCyYOCkTCxEGBSJg4yBepYuKgQCRMHBSIhImDApEwcVAgEkEk+SJh4qBAJEwcFIiEiYMCkRBm5YvUEGYViIQwq0AkhFkFIsk2DnmrPuXWRthvhz96Te2zpPdmZY/8pzabnOxr5LeaDTfz9Cg7hDQ82sft6Jd7qEenny9xO0WCj5+Ov6OUfSVThVL28EwVSgLKWShlD6JUoZQ9LlKFciFvxo1yIefHjVL2FEsTSi971qQKJdLONJRIO9NQIu1MQ0lAOQsl0s40lEg701Ai7UxDibQzDSXSziyUAWlnGkqknWkokXamoUTamYaSgHIWSqSdL6IM/vkq2xDD6HjvtsfJfXqC/21nSQqIRjzckaN4uCN0ncO9/3GcFJDQWLhHxDke7sh+53DP7lGLzzHtuSMo8nBHquThTuDOwh15lYc78ioPd+RVHu7IqzzckVdZuBPyKg935FUe7sirPNyRV3m4E7izcEde5eGOvMrDHXmVhzvy6knc0/aGkFzKnjvyKgv3hLzKwx15lYc7chMPdwJ3Fu7ITTzckZt4uCM38XBHbmLhnuEjv8r99RGOmj4df0dJQPk1lDE+UUb6fcff0cOlnIO+bLX4kve7fDNcCg93uBQW7sK/Wq6Xe82P11z7Wj+9/3l/cA0PJjXUvUQY0PBLNHifdxL+pWUjIg0eFRT+pWWI9CESHJgCkWDXFIiECZQCkXCbX75Iwr+0DJE+RMLgV4FI2B2vQCRMHBSIRBBJvkiYOCgQCRMHBSJh4qBAJEwcrhbpzh1DBBbuwj9avS53RH0e7kjvPNwRyM/h3rZPegfn33AncGfhjtjMwx1JmIc7wi0Pd+RVDu7Zwb/zD3O6u06zg9Xnl6jV55NR7o1GsEnyNYKlkq8R7Be/RoMd9tnBqykQCTci5IvkcddCgUiISApEQkhSIBJunigQiSCSfJEwb5AgEm17sFwqe5EwcFAgEiYOCkTCxEGBSJg4yBcpYOKgQCRMHBSIhImDsJz0TiRMHOSH2UAQSb5ImDgoEAkTBwUiYeKgQCRMHBSIhImDfJEiJg4KRMLEQYFImDgoEAkTBwUiEUSSLxLCrAKREGYViIQwq0AkhFn5IhEs+FdF8u4pkm+fjr+jhFGehpKAchZK3OaahhL+fRpKuOxpKOGFp6GEY52FMuEmyTSUuJUxDSXSzjSUSDvTUBJQzkKJtDMNJdLONJRIO9NQIu18EWVo+YnStdHx/c8v5IRodA734B+1+BB3H1HPGTmKhztCFw93JDQe7ohzJ3FPm6MJZb+uZrjsc7hTfSC8/fHNv3dYch7u8O883OHfz+Ge3bau5ph23Av8Ow93+Hce7vDvPNzh33m4E7izcMeNHh7uyKs83JFXebgjr/JwR15l4V6RV3m4I6/ycEde5eGOvHoS97Q973czjXvuBO4s3JFXebgjr/JwR17l4Y68ysK9wUeewz1un/v25D/d194f3P/sdMMSzC/R6H0UDeu1ApGwuAsQabBjv8EJKBAJY27xIhWHmbgCkTBAVyASUpICkTCaVyASQST5ImHioEAkTBwUiISJgwKRMHFQIBImDvJF8pg4KBAJEwcFImHioEAkTBwUiEQQ6WKR7twxRODhjrkAD3dEfR7uSO883BHIWbgHZOxzuFMMG3dKe+6IzTzckYR5uCPc8nAncGfhjrzKwx15lYc78ioPd+RVHu7IqyzcI/IqD3fkVR7uyKs83JFXT+LefUN3iQTuLNyRV3m4IzdN4H5HiSg0DSXSzSyUhMAyDSU82Tlr1LS3yxQiSMQuUatt+2n3RiNYDvkawcvI1wgmiV+jwUuaSoL9UiAShssKRMIkWoFIiEgKRCKIJF8kDMQViITdXgpEwrxBgki0PdfqUtmLhIGDApEwcZAvUsbEQYFImDgoEAkTBwUiYeKgQCSCSLJy0juRMHGQH2YzJg4KRMLEQYFImDgoEAkTB/kiFUwcFIiEiYMCkTBxUCASJg4KRCKIJF8kTBwUiISJgwKREGYViIQwK1+kijCrQCSEWQUi0Toi+ey21yjkED4dfW92oZG/r3G7m9ucGx/9qNvX5F/+hcXf0CzkTWajWcgRTEbTFlqHZ6NZaPWbjWahAepsNAuNLWejIaA5QrPQiG42moUGY7PRwA0fooEbPkRj1w03esT04Hwdpnpf4pa8g4+fjv+Bsjq77nk6SrtuezpKu+58Okq7bn46SgLKWSjtpoXpKO2mi+ko7aaR6SjtppfpKJF2ZqH0SDvTUCLtTEOJtDMNJdLONJQElLNQIu1MQ4m0Mw0l0s40lEg701Ai7cxCGZB2pqFE2pmGEmlnGkqknS+iDP75hYwQw+h477ZafHqC/23Deg0E7izckaN4uCN0ncO9/83NGpDQeLgjzvFwR/Y7h3t224bKHNOOe0RQ5OGOVMnDHRGUhzvyKg93AncW7sirPNyRV3m4I6/ycEde5eGOvMrCnZBXebgjr/JwR17l4Y68ysOdwJ2FO/IqD3fk1ZO4p+3Fg7mUPXfkVR7uyKs83JFXWbgn5CYe7shNPNyRm3i4E7izcEdu4uGO3MTDHT7yq9xfH+Go6dPxHyhX+nT8uShjfKKMVH7X8Xf0cCnnoC/bdyp+fIZ6d/VY6RvvqrjDpfBwx7TrHO41+8fhtbpX7vuDa3jUXUPdSbTSN2/VSjT4TFBd6Zu3ekUaPCq40jdv1xWJIJJ8kWDXFIiECZQCkXCbX4FISEkKRMLgV75IK32YeF2RMHFQIBImDgpEwsRBgUgEkeSLhImDApEwcbhapDt3DBF4uGMuwMMdUZ+Fe0N65+GOQH4O99bK89ffcEfG5uGO2MzDncCdhTvCLQ935FUe7ivl1edv+1b94Ojg/QNkCGn8oMDwMxttpQjKjHKlVMmK8nb9AcpZKFfKfswoV4pzzChXSmjMKAkoZ6FcKUcxo1wpGjGjRNqZhhJpZxpKpJ1ZKD3SzjSUSDvTUCLtTEOJtDMNJQHlLJRIO9NQIu1MQ4m0Mw0l0s40lEg7s1AGpJ1pKJF2vohy6jfjW0A04uGOHMXDncD9FO79b8a3gITGwx1xjoc7st853PvfaGoBQZGHO1IlC/eICMrDHXmVhzvyKg935FUe7gTuLNyRV3m4I6/ycEde5eGOvMrDHXmVhTshr/JwR17l4Y68ysMdeZWHO4H7Ody73/pshLzKwx15lYc78ioPd+QmFu4JuYmHO3ITD3fkJh7uyE083AncWbjDR36V++sjHDV9Ov4DZYZF+SLKb75Csnv8HT1cyjno+9+MbxkuhYc7XAoPd0y7zuH+nU8P1fCou4a6lwgDGn6Jfril7bdp99bnVmCVBIg0eFSwwFQpEAkOTIFIsGsKRCKIJF8k3OZXIBJSkgKRMPhVIBJ2xysQCRMH+SJVTBwUiISJgwKRMHFQIBImDgpEIoh0sUh37hgi8HDHXICHO6I+D3ekdx7uCOTncO9/y7k1ZGwe7ojNPNyRhHm4I9zycCdwZ+EO/84/zOnvOm2w+vwS3Yz/9tPuZ42Cc7BJ8jWCpZKvEeyXgHsL3R32N5EIIskXCTciFIiEuxYKREJEUiASQpICkXDzRL5IHndaFIiEeYMEkWgr3KWyFwkDBwUiYeKgQCSCSPJFwsRBgUiYOCgQCRMHBSJh4iAsJ70TCRMH+WE2YOKgQCRMHBSIhImDApEwcVAgEkEk+SJh4qBAJEwcFIiEiYMCkTBxUCASJg7yRYqYOCgQCWFWgUgIswpEIogkXySEWQUiwYJ/VSTvniL59un4O0oY5VkoCXZ2Gkrc5pqGEv59Gkq47GkoCShnoYRjnYYSN0mmocStjGkokXamoUTamYUyIe1MQ4m0Mw0l0s40lEg701ASUH4NZWj5idK10fHdzy/cuCMancM9+O0j6iHmPXfkKB7uCF083JHQeLgjzp3EPW2OJpT9uprhss/hTvWB8PbH/b/3DEvOw53AnYU7/Ps53LPb1tUc0547/DsPd/h3Hu7w7zzc4d9ZuBfcu+Hhjhs9PNyRV3m4I6/ycCdwZ+GOvMrDHXmVhzvyKg935FUe7sirJ3FP2/N+uezfH1mRV3m4I6/ycEde5eGOvMrDncCdhTt85Dnc4/a5b0/+033t/cG9z04H17AE80s0eh9Fw3qtQCQs7gJEGuzYbwSR5IuEMbcCkTATVyASBugKREJKUiASRvPiRfIOc3wFImHioEAkTBwUiISJgwKRCCLJFwkTBwUiYeKgQCRMHBSIhImDApEwcZAvksfE4WqR7twxRODhjrkAD3dEfR7uBO4s3BHIebgjY5/DnWLYuFPac0ds5uGOJMzDHeGWhXtAXuXhjrzKwx15lYc78ioPdwJ3Fu7IqzzckVd5uCOv8nBHXuXhjrx6EvfuG7p9RF7l4Y68ysMduWkC9ztKAspZKJFupqFEYJmGEp7sF/YNct23y3iCfeOXqNW2/bR7oxEsh3yNCBqJ1wgmiV+jwUuaPMF+KRAJw2UFImESrUAkRCT5IiWEJAUiYSCuQCTs9lIgEuYNEkSirXCXyl4kgkjyRcLEQYFImDgoEAkTBwUiYeKgQCRMHOSLlDFxEJaT3omEiYP8MJsxcVAgEiYOCkQiiCRfJEwcFIiEiYMCkTBxUCASJg4KRMLEQb5IBRMHBSJh4qBAJEwcFIhEEEm+SAizCkRCmFUgEsKsfJHqSha8xqdIzg0lpQf14HwdihRjfIpEQ1Fr9o/Da3V9kfqPy9aVDLhWiQaP+VWCRuI1WsnZrarRSsZOq0ZDz7CSsVtWpJXuUiwr0kp3KVYVqSEiKRAJIUmBSCvdpVhWpJX2RS4rEkEkASL1H6hoGDgoEAkTBwUiYeKgQCRMHBSIhImDeJGCw8RBgUiYOAjLSe9EwsRBfJgNDhMHBSIRRJIvEiYOCkTCxEGBSJg4KBAJEwcFImHiIF8kj4mDApEwcVAgEiYOCkTCxEGBSAizCkRCmFUgEsKsApEQZuWLFGDBvyqSd0+R/Odnmu8oYZSnoYSdnYaSgHIWSvj3aSjhsqehhBeehhKO9Ysov/mCl5v1fBzuU9ybUNxROYf7LYM9Dg8x77hH3CTh4Y7QxcMdCY2HO+LcSdzT5mhC2a+rES77HO5UHwhvf3zz7x2WnIc7/DsPd/j3c7hnt62rOaYdd4J/5+EO/87DHf6dhzv8Ow93AncW7rjRw8MdeZWHO/IqD3fkVR7uyKss3BPyKg935FUe7sirPNyRV0/inrbNxLnsX06TCNxZuCOv8nBHXuXhjrzKwx15lYV7ho88h/t3PjzY/aZdyFiC+SUaPeyWsV4rEAmLuwCRBjv2M5yAApEw5pYvUsFMXIFIGKArEAkpSYFIGM0rEIkgknyRMHFQIBImDgpEwsRBgUiYOCgQCRMH+SJVTBwUiISJgwKRMHFQIBImDgpEIoh0sUh37hgi8HDHXICHO6I+D3ekdx7uCOQs3Bsy9jncKYaNO+2f/GmIzTzckYR5uCPc8nAncGfhjrzKwx15lYc78ioPd+RVHu7Iqxzco0Ne5eGOvMrDHXmVhzvy6kncu2/ojo7AnYU78ioPd+SmCdzvKBGFpqFEupmF0iOwTEMJT/YL+wa57ttloidIxC5Rq237afdGI1gO+RrBy8jXCCaJX6PBS5pigP1SIBKGywpEwiRagUiISApEIogkXyQMxBWIhN1eCkTCvEGCSLQV7lLZi4SBgwKRMHGQL1LExEGBSJg4KBAJEwcFImHioEAkgkiyctI7kTBxkB9mIyYOCkTCxEGBSJg4KBAJEwf5IhEmDgpEwsRBgUiYOCgQCRMHBSIRRJIvEiYOCkTCxEGBSAizCkRCmJUvUkKYVSASwqwCkS5fk8rjlSrJOTcQKW7UY31iqeVdGfXBsNDziww+vftZSo/2kvefjr0zaWDyM5PswGTHxIPJjkkAkx2TCCY7JgQmOyYJTHZMMpjsmBSDTJLf7Hqqg2O9d9v7tLynp5++0bwTtOh65xK06JGnEiwXO+rkvNuuKjUMCHrnS9yCY/DxUyi9N+C1NxC0NxC1N0DaG0jaG8jaGyjaG6jaG2jKG6jaV+KqfSWu2lfiqn0lvvqTxfMb0L4SV+0rcdW+ElftK3HVvhI37Stx074SN+0rcdO+El/9McbvNhD884WnIYZPDbwdg20bJ3x6tvvYf9CEL9uTuxW+xk/uVrgh+Ga3g490NOHuYXK3wq3G1G7JCfcl3+w2u0ctPse071a4iZncrXDHM7lb4fZocrdkqtu1vNSo27W81KjbtbzUqNu1vNSo27W81KBbb8pLeVNeypvyUt6Ul7r6q13M3ZryUt6Ul/KmvJRfzEul7Xm2XMq+28W8VL/bsJiXGnS7mJcadLuYuxh0S6a6XcxdDLpdzF0Mul3MXQy6NeUuovQV6HVzQU2fur03IPwyG+OzgUhlJFf3+HvDwq+032y40Ob1S97fp4zCr7STuxV+pZ3bLQn3+t/stmb/OLzWT+8l2R/c/Zw8kXCjfCKYwdtdiNa63H8LTX9zEtFaC8NUNGutIlPRrLXkTEUjPAlwohE+lGREk+y6miEa4WGTE43w+8ycaAy74REaApojNHDDh2jghg/RwA0forHihu/dWjG4H91mK5713q0VG3rv1oqzvHe7llls24uxw+0v2ndLprpdy9KNul3LpY26Xct4jbpdy0sNupX+FhK2+3zS325yIphWn7tY3J6M9Jd2MJKxOw0bkSHcNf/l/V1z6e8k4URjeBg2QmN4GDZCY/jW8AiN4VvDfTRJ+ktXONEYvjU8QmP41rCj7Z6ES2WPxvJGyQEaApojNJbd8ACNZTc8QGPZDQ/QWHbDAzRww0dopL82h9HySX/HDicay254gAaPDR2iIaA5QoPZ8CEazIYP0WA2fIgGs+FDNHDDR2ikv/iIEw3c8CEaWL5DNAQ0R2hg+Q7RwPIdopG+eG+H//hz+4Tmo4EofYkdNiB9IRw2IH14M2xA+no7bED6qjhsQPraNWxA+gozbEB69B82ID2gDxvQvhKLf/PXsAHtKzFpX4nFvyNt2ID2lVj6+8ZCy88G3OcG3hzff/w9SX+F2De7DX57NWOIed+t9Ff+zu1W+it/53Yr/YMCU7uV/jqu73abtqtyKPurlPR3JX2z2/5HTJP01x9N7nat9XbU7Vrrbf+TNkn6e4cmd7vWejvqdq31dtCt9FcJTe5W+ucT5nYr/WOIc7tdy0uNuiVT3a7lpUbdmvJS0l8lNLlbU14qm/JSZTEv1f0UVSqLealBt4t5qUG3i3mpQbdkqtvFvNSg27VWoLi9us+T/zSF2x/cfZldqmtd0L4DZrRzsq519ZuKZq1L5bfQDO4417Wuq1PRrBVop6JZK/1ORbNWVJ6Kxq6rGaFpa4XwqWjWSuxT0Rh2wyM0ht3wCA0BzREauOFDNHDDh2jghg/RwA0fooEbPkCTpb/CmBONFTd879aKwb13a8Wz3rslU91acZb3bq2YxXu3a/k/imHrltK+27Us3ajbtVzaoFvpb8ud3O1aXmrU7VpeatTtYs+oDbolU90u9ozaoNu1vNSoW1NeSvpbXCd3a8pLSX/X6tQnabP016dO7nYxLzXolvR2e29AsWG4N6DYA9wbULysfzQg/bWeXDuys/TXhZ4Ipv+p6Cz9LZiMZOxusxiRMbzLor+JP0t/IygnGsO7LEZoDO+yGKCR/n5UTjSG9xyP0OAJvEM0eALvEA0ZRtP9eGte7A23U9FYdsMDNJbd8ACNZTc8QGPZDffRLPYK36lo4IYP0cANH1m+xd4SPRUNAc0RGstueIAGs+FDNJgNH6LBbPgQDWbDR2gWe8H2VDRww4do4IYP0cANH6KB5TtEA8t3iAaW7xANLN8Rmqtf/0zNP0Zr1KgN0KRUH19STzn4wW/fGtxe7O2KG1USw6NJioUGlZDz29EuPfcphfbm4JIfx5b6oubbDuMDR3r5jNrt0Ls6AeqwqpPS1mDaqxOhjmB1COoIVidBHcHqZKgjWJ0CdQSrU6GOYHUa1BGizksND3WqgzqC1cGsgFmdbVZQ36iDWQGvOlR66mBWIFkdgjqC1cGsgFWd7B8NZl/26mBWIFkdzAokq4NZgWR1MCvgVcfFTZ26U6dhViBZHcwKJKuDWYFkdTArkKwOQR3B6mBWIFkdzAqkqBP2eadhViBZHcwKmNV5vN06xzfqYFbAqk5qdKxOcZgVSFYHswLJ6mBWwLvubPdGc3Z7dTArkKwOQR3B6mBWIFkdzAokq4NZgWB1vN28E0rb1PGey1H3nuot3m7ekaFO7wmR4u3mHQ3q2M07GtQhqCNYHbt5R4M6dvOOBnXs5h0N6ti9NypNnf1zo8XbvTeqQJ2AWQGzOp2nekvArIBXnd6TiSVgViBZHcwKJKtDUIdTne6zbyVgViBZHcwKJKuDWYFkdTAr4FWn94RICZgVCFYnYlYgWR3MCiSrg1mBZHUwK5CsDkEdwepgViBFnf1zoyViViBZHcwKmNXpPNVbImYFrOr0n0yMmBUIVocwK5CsDmYFvOtO9/kdwqxAsjqYFUhWh6COYHUwK5CsDmYFktUxnHfiY4hyKztxOeruU73JcN4RoU73CZFkOO8oUMdw3lGgjuG8o0AdgjqC1TGcdxSoYzjvKFDH8L1RYeq8eW40Gb43qkAdzAqY1ek91ZsxK+BVp/tkYsasQLI6mBVIVgezAlZ1+s++ZYI6gtXBrECyOpgVSFYHswJedbpPiGTMCiSrg1mBYHUKZgWS1cGsQLI6mBVIVgezAsnqENQRos6b50YLZgWS1cGsgFmd3lO9BbMCVnX6TyYWzAokq4NZgWB1KmYFvOtO9/mdilmBZHUwK5CsDmYFktUhqCNYHcwKJKtjN+/4WjZ1fGNSp/9Ub7Wbd2So031CpNnNOxrUsZt3NKhjN+9oUMdu3tGgDkEdwerYzTsa1LF7b1SaOm+eG212741qUAezAmZ1ek/1NswKeNXpPZlYHWYFktXBrECyOpgVsKrTffatOswKJKtDUEewOpgVSFYHswJedXpPiFSHWYFkdTArkKwOZgWC1fGYFUhWB7MCyepgViBZHcwKpKizf260eoI6gtXBrIBZnc5TvdVjVsCqTvfJxOoxK5CsDmYFktXBrIB33ek9v1MDZgWS1cGsQLI6mBVIVgezAsnqENQRrI7hvEOP3yZfIpej7j3VW4PhvCNCnd4TIjUYzjvy1YmG844CdQznHQXqGM47CtQxnHcUqENQR7A6hu+NClNn/9xojYbvjSpQB7MCZnU6T/XWiFkBrzrdJxMjZgWC1SHMCiSrg1kBqzr9Z98IswLJ6mBWIFkdgjqC1cGsgFed7hMihFmBZHUwK5CsDmYFktXBrECwOgmzAsnqYFYgWR3MCqSo8+a50YRZgWR1COrwqtN7qjdhVsCqTv/JxIRZgWR1MCuQrA5mBbzrTvf5nYRZgWB1MmYFktXBrECyOpgVSFYHswLJ6tjNO65tvP3LFEXSU73Zbt6RoU73CZFsN+9oUMdu3lGgTrGbdzSoYzfvaFDHbt7RoI7dvKNBHYI6QtR589xosXtvVIM6mBUwq9N7qrdgVsCrTvfJxIJZgWR1MCsQrE7FrIBVnf6zbxWzAsnqYFYgWR3MCiSrQ1CHVZ3uEyIVswLJ6mBWIFkdzAokq4NZgWR1MCsQrE7DrECyOpgVSFHnzXOjDbMCyepgVsCsTu+p3kZQh/UOQvfJxIZZgWR1MCuQrA5mBbzrTvf5nYZZgWR1MCuQq05zmBVIVgezAsnqYFYgWR2zeSe2+BiixJbSoBJP5VG3p+o+HX0HaTaazAZpNkXMBmnW8M8GadabfxdkLk+Qfg/Sm7XRs0GadbyzQZo1p7NBmr3nNBskAeQckEg2k0Ai2XwfZHvjIz2SzSSQSDaTQCLZfA1k8o+jfQppDzIg2XwRpKtPkPkNSCSbSSCRbL4IMrsN5MurLJ4gkWwmgSSAnAMSyWYSSCSbSSCRbCaBRLKZBBLJ5vsga9yDjEg2k0Ai2UwCiWTzNZDZ5cdvvz5i9wSJZPNVkP4Jsr0BSQA5BySSzSSQSDZfBLkd7TO9W2yQbCaBRLKZBBLJZg5IQrKZBBLJZhJI+t0gQ3p4/hxDHZQf/HZbM4T08kBnqW/RxGf9LtLw+Jo3k1Jf9tXGd4XX8JC0vpR9O/QOJpkF02rbftq9IVNB5oBMA5n3ZJIzS8a7sO2IceT2aDzQHKEJQHOEJgLNERoCmiM0dk3NEE0GmiM0BWiO0Nj1wjce2zOM7qWUDY1dMzxCky274QEay254gMayGx6gseyGB2gIaI7QwA0fooEbPrJ8GW74EI1lNzxAY9kN99EUzIYP0WA2fIgGs+FDNJgNH6IhoDlCAzd8iAZu+BAN3PAhGli+IzQVlu8QDSzfIRpYvkM00hdv755oXp4e+HH8vQHpS+ywAekL4bAB6cObYQPS19tRA036qjhsQPraNWxA+gozbEB69B82QNob0L4SN+0rcdO+EjftK3HTvRJH53SvxLcGhK/EtxtizwZcGx1/yzyPw32KP6WfW7fCl+1vdhv89jxYiHnfrfA1fnK3ZKpb4e5hcrfCrcZ3u03bVTmUN1cp4aviN7ul+ij89se9tl74Ejq527XW21G3a623+fle2xzTvtu11ttRt2utt6Nu11pvR92utd6OuhU+B5jcrfChweRu1/JSg27DWl5q1O1aXmrUrSkvFUx5qQmvn9fUrSkvFRbzUmnbX5JL2Xe7mJcadLuYlxp0u5iX6ncbF/NSg24X81KDbtdagWJ7fkrNf5rC7Q/uvczuBmatC9p3wPR3Tt7QrHX1m4mG1rpUfgvN4I4zrXVdnYpmrUA7Fc1a6XcqGgKaIzR2Xc0QzVohfCqatRL7VDSG3fAIjWE3PEAj/RXGnGjghg/RwA0fooEbPkRDQHOEBm74EA3c8CEaK2743q0Vg3vv1opn/ehW+ruDJ3drxVneu7ViFu/druX/KIatW9rvF5H+Ht7J3a7l0kbdrmW8Rt2u5aVG3a7lpUbdLvaMWr9b6W+endztYs+oDbpdy0uNujXlpaS/xXVyt6a8lPR3rc59klb661Mnd7uYl+p3K/0lp71u7w0oNgz3BhR7gHsDipf1ewN2b0n0d2RLf13oiWC6n4q+/V1291mMyNjdZjEiY3iXxWATv/Q3gnKiIaA5QmN4l8UIjeFdFiM0hvccj9DgCbxDNHgC7wCNl/4e2lPR9D7eekNjeM/xCI1lNzxAY9kND9AQ0ByhseyGB2gsu+EBGrjhQzRww4eWD274CM1ir5SeisayGx6gwWz4EA1mw4doCGiO0GA2fIgGs+FDNHDDh2jghg/RwA0foVnsNdlT0cDyHaKB5TtEQ0BzhOb3L96+PJrNIZQBGt/o0Wtwvg7RnPjl9e42Pj/hTdFawfS3ZPkJbx5elUwAmQMy0SyZ0RU4EtAcoUlAc4QmA80RGruWZojGrqkZomlAc4Bmwtvil0Vj1wuPNkmQXTM8RGPZDQ/QENAcobHshgdoLLvhARrLbniABm74EA3c8JHlS3DDh2gsu+EBGstueIAGs+FDNAQ0R2gwGz5Eg9nwIRrMhg/RwA0fooEbPkKT4YYP0cDyHaKB5TtEQ0BzhAaW7xCN9MXbuycav3+doM/Sl9hRA0X6QjhsQPrwZtiA9PV22ID0VXHYgPS1a9iA8BXmmxvF+59O80X4nOCb3QZfH4eHmPfdCo/+k7sVbggmdyvcPczttgq3Gt/tNm1X5VD2V6kqfFWc+mp5X4UvoZO7XWu9HXW71nqb3XaVyjHtu11rvR11u9Z6O+p2rfV20G1ba70ddSt8DjC5W+FDg8ndruWlRt2SqW7X8lKjbk15qWbKSzVTXqpZ8lLBLeal0nZbLpey73YxLzXodjEvNeh2MS816JZMdbuYlxp0u9YKNO1TfsGvdUGb+N6o4Ne6+k1Fs9al8lto+necg1/rujoVzVqBdiqatdLvVDRrReWpaOy6mhGasFYIn4pmrcQ+FY1hNzxCY9gNj9AQ0ByhgRs+RAM3fIgGbvgQDdzwIRq44SM0EW74EI0VN3zv1orBvXdrxbPeuyVT3VpxlvdurZjFe7dr+T+KYeuW9vtFpL+xenK3a7m0QbfS3ys9udu1vNSo27W81KjbxZ5RG3RLprpd7Bm1QbdrealRt6a8lPT3HU/u1pSXkv5W4qlP0gbpLxqe3O1iXmrQLent9t6AYsNwb0CxB7g3oHhZ/2hA+ls12XZkZ7vbc/pf2AzS3xvJSMbuNosRGcO7LAab+LPhXRYjNIZ3WYzQGN5lMUAj/f2onGgM7zkeocETeIdo8ATeIRoyjKb7zbuw2Btup6Kx7IYHaCy74QEay254gMayG+6jWewVvlPRwA0fooEbPrJ8i70leioaApojNJbd8AANZsOHaDAbPkSD2fAhGsyGj9As9oLtqWjghg/RwA0fooEbPkQDy3eIBpbvEA0s3yEaWL4DNHHG65/D4+NY2VMYoKEYHj9NsdDLb6d3Rzu/He3SC8j25uCSH8eW+sLw3e+m+JjvpZePl90OvTMJJpmkx6Eppz2TCCY7JgQmOyYJTHZMMpjsmBQw2TGpYLJj0owzeanhwcQ7MNkxselj0+Zj6xsmNn0slR4Tmz62z4TAZMfEpI/N3m8llz0Tkz52wMSkjx0wMeljB0xM+tjstqnp6xj0NybBpI8dMDHpYwdMTPrYAROTPnbAhMBkx8Smj+0zseljn0zC3p8Emz62z8Smj3WPt3jl+IaJzXlsow6TaHMe22dicx7bZ2LTx25ztpzdnolNH9tnQmCyY2LTx/aZ2PSxfSY2fWyXCV3tT0JpGxPvudbi7h4/8iaZdPdaUACTHZMIJjsmBCY7JglMdkwymOyYFDDZManGmbzZz0YNTH5mkmz62O4ev2TTx3b3biWbPrbPxKaP7TMhi0z6+5SSSR87YGLSxw6YmPSxAyYmfWx/r0Uy6WP7TLJJHztgYtLHDpiY9LEDJiZ97IAJgcmOiU0f293Plm362D4Tmz62u8cv25zHdvduZZvz2C6TYnMe22di08d2958Umz62z8Smj+0zITDZMbHpY/tMbPrYPpPL/Ul82GoKL/f0Je3xq84kk+5ei+rBZMckgMmOSQSTHRMCkx2TBCY7JhlMdkyKcSZv9rPVCiY7JjZ9bHePX7PpY7t7t5pNH9tnYtPH9pmY9LH9fUqNwGTHxKSPHTAx6WMHTEz62P5ei2bSxw6YmPSxXSbkTPrYAROTPnbAxKSPHTCx6WP7TMg4k/1+NnI2fWyfiU0f29vjR87mPLa3d4uczXlsn4nNeWyXibfpY3v7T8jb9LF9JjZ9bJ+JTR/bZ0JgsmNi08f2mVztT3wtGxPfuNbi3h4/uvy7KjKY9PZa0OXfVdHAxIPJjkkAkx2TCCY7JgQmOyYJTHZMsnEm+/1sdPl3VTQwselje3v8KNj0sb29WxRt+tg+E5s+ts/EpI/t7lOiaNLHDpgQmOyYmPSxAyYmfWx/r0U06WMHTEz62AETkz62z4RM+tgBE5M+dsDEpo/tM7HpY7v72S7//o4GJjZ9bHePH9mcx3b3bpHNeWyfic15bJ+JTR/b3X+SbPrYPhObPrbPxKaP7TOx6WP7TAhMdkwu9yf0GIWSL5FrLe7u8bv8uyoymHT3Wlz+XRUFTC7/rooGJh5MdkwCmOyYRDDZMSEw2TFJxpm82c92+XdVNDCx6WO7e/yyTR/b3buVbfrYLpNi08f2mZj0sf19SsWkjx0wMeljB0wITHZMTPrY/l6LYtLHDpiY9LEDJiZ97ICJSR/bZ1JN+tgBE5s+ts/Epo/t7merNn1snwnZZNLb41dtzmO7e7eqzXlsn4nNeWyfiU0f291/Um362C6TZtPH9pnY9LF9JjZ9bJ+JTR/bZ3K1P3Ft69K/+GpJe/wu/66KDCbdvRaXf1dFA5MGJj8xSZd/V0UDEw8mOyYBTHZMIpjsmJBxJvv9bOny76poYGLTx/b2+CVn08f29m4lZ9PH9pnY9LFdJt6kj+3uU0repI8dMDHpYwdMTPrYARMyyaS31yJ5kz52wMSkjx0wMeljB0xM+tgBE5M+ts8k2PSxfSY2fWxvP1sKNn1sn4lNH9vb45cu//6OjFlBb+9WCjbnsX0mNuexfSY2fWxv/0kKNn1sn4lNH9tlEm362D4Tmz62z8Smj+0zudifxLZ9vzi2lAZMPJXHoumpuk9H38vPussvusuvustvssvP5Vm+35d/9ec6ZpfvdZcfdJcfdZdPussXvuqOyhe+6r6U395c90n4qjsqX/iqOypf9qqb/ONon0Lal59kr7rJ1Wf5+U35slfdYfmyV92U3Vb+y0bUZ/myV91h+bJX3WH5slfdYfmyV91h+bJX3WH5slfdYfnCV92X8mvcl5+Fr7qj8oWvuqPyZa+62eVH+a9bOp7ly151s/PP8tub8mWvusPyZa+6w/Jlr7p5O9pnenfqyl51h+XLXnWH5ctedUflF9mr7rB82avusPzff913bivf5TgoP8T4WEdvf3yzjk54F/E3C9pGSSGW8KagLK2gIq2gKq2gdnlB7lnQm7NswstfJxfkpRUUpBUUpRVE0gpK0gq6/Eqd4lZQKm8KKtIKqtIKasIKak5aQV5aQUFaQVFaQSStoCStIGlX6ibsSp3d1dehW/J8/LQnelPQ1dchXzZCvtQ3BQVpBUVpBZG0gq6+DvmcnwW1NwVlaQUVaQVVaQU1YQV5J60gL62gy6/UqW0F5fimoCitIJJWUJJWUJZWUJFWUJVWUBNWUHDSCvLSCpJ2pQ7SrtQTHit34aWg0e2+292e3w5OL8/gxRB/K6dcW87Nfj0ODvSmnCqrnCaqnAmPEE8tx8sqJ8gqJ8oqh64u5+XgN+UkWeVkWeUUWeVUWeU0UeWQk1WOl1VOkFVOlFWOrKsyyboqk6yrMsm6KpOsqzLJuSr/4/Yf/98f/+vXP/7Ln//0t9v/5Md/+99/+de///rXv/z2H//+///z/t/cDv5f","brillig_names":["compute_note_hash_and_optionally_a_nullifier"]}],"outputs":{"globals":{"notes":[{"fields":[{"kind":"integer","sign":false,"value":"0000000000000000000000000000000000000000000000000000000004c141a0"},{"kind":"string","value":"EcdsaPublicKeyNote"}],"kind":"tuple"}],"storage":[{"fields":[{"name":"public_key","value":{"fields":[{"name":"slot","value":{"kind":"integer","sign":false,"value":"0000000000000000000000000000000000000000000000000000000000000001"}}],"kind":"struct"}}],"kind":"struct"}]},"structs":{"functions":[{"fields":[{"name":"parameters","type":{"fields":[{"name":"app_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":4,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}}],"kind":"struct","path":"authwit::entrypoint::app::AppPayload"}},{"name":"fee_payload","type":{"fields":[{"name":"function_calls","type":{"kind":"array","length":2,"type":{"fields":[{"name":"args_hash","type":{"kind":"field"}},{"name":"function_selector","type":{"fields":[{"name":"inner","type":{"kind":"integer","sign":"unsigned","width":32}}],"kind":"struct","path":"authwit::aztec::protocol_types::abis::function_selector::FunctionSelector"}},{"name":"target_address","type":{"fields":[{"name":"inner","type":{"kind":"field"}}],"kind":"struct","path":"authwit::aztec::protocol_types::address::aztec_address::AztecAddress"}},{"name":"is_public","type":{"kind":"boolean"}},{"name":"is_static","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::function_call::FunctionCall"}}},{"name":"nonce","type":{"kind":"field"}},{"name":"is_fee_payer","type":{"kind":"boolean"}}],"kind":"struct","path":"authwit::entrypoint::fee::FeePayload"}},{"name":"cancellable","type":{"kind":"boolean"}}],"kind":"struct","path":"EcdsaKAccount::entrypoint_parameters"}}],"kind":"struct","path":"EcdsaKAccount::entrypoint_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"inner_hash","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaKAccount::verify_private_authwit_parameters"}},{"name":"return_type","type":{"kind":"field"}}],"kind":"struct","path":"EcdsaKAccount::verify_private_authwit_abi"},{"fields":[{"name":"parameters","type":{"fields":[{"name":"signing_pub_key_x","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}},{"name":"signing_pub_key_y","type":{"kind":"array","length":32,"type":{"kind":"integer","sign":"unsigned","width":8}}}],"kind":"struct","path":"EcdsaKAccount::constructor_parameters"}}],"kind":"struct","path":"EcdsaKAccount::constructor_abi"}]}},"file_map":{"113":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/context/private_context.nr","source":"use crate::{\n context::{inputs::PrivateContextInputs, packed_returns::PackedReturns},\n messaging::process_l1_to_l2_message, hash::{hash_args_array, ArgsHasher},\n keys::constants::{NULLIFIER_INDEX, OUTGOING_INDEX, NUM_KEY_TYPES, sk_generators},\n oracle::{\n key_validation_request::get_key_validation_request, arguments, returns::pack_returns,\n call_private_function::call_private_function_internal, header::get_header_at,\n logs::{emit_encrypted_note_log, emit_encrypted_event_log},\n enqueue_public_function_call::{\n enqueue_public_function_call_internal, notify_set_min_revertible_side_effect_counter,\n set_public_teardown_function_call_internal\n}\n}\n};\nuse dep::protocol_types::{\n abis::{\n call_context::CallContext, function_selector::FunctionSelector, max_block_number::MaxBlockNumber,\n validation_requests::{KeyValidationRequest, KeyValidationRequestAndGenerator},\n private_call_request::PrivateCallRequest, private_circuit_public_inputs::PrivateCircuitPublicInputs,\n public_call_request::PublicCallRequest, read_request::ReadRequest, note_hash::NoteHash,\n nullifier::Nullifier, log_hash::{LogHash, NoteLogHash, EncryptedLogHash}\n},\n address::{AztecAddress, EthAddress},\n constants::{\n MAX_NOTE_HASHES_PER_CALL, MAX_L2_TO_L1_MSGS_PER_CALL, MAX_NULLIFIERS_PER_CALL,\n MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL,\n MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, MAX_NULLIFIER_READ_REQUESTS_PER_CALL,\n MAX_KEY_VALIDATION_REQUESTS_PER_CALL, MAX_ENCRYPTED_LOGS_PER_CALL, MAX_UNENCRYPTED_LOGS_PER_CALL,\n MAX_NOTE_ENCRYPTED_LOGS_PER_CALL\n},\n header::Header, messaging::l2_to_l1_message::L2ToL1Message, traits::Empty\n};\n\n// When finished, one can call .finish() to convert back to the abi\npub struct PrivateContext {\n // docs:start:private-context\n inputs: PrivateContextInputs,\n side_effect_counter: u32,\n\n min_revertible_side_effect_counter: u32,\n is_fee_payer: bool,\n\n args_hash: Field,\n return_hash: Field,\n\n max_block_number: MaxBlockNumber,\n\n note_hash_read_requests: BoundedVec<ReadRequest, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>,\n nullifier_read_requests: BoundedVec<ReadRequest, MAX_NULLIFIER_READ_REQUESTS_PER_CALL>,\n key_validation_requests_and_generators: BoundedVec<KeyValidationRequestAndGenerator, MAX_KEY_VALIDATION_REQUESTS_PER_CALL>,\n\n note_hashes: BoundedVec<NoteHash, MAX_NOTE_HASHES_PER_CALL>,\n nullifiers: BoundedVec<Nullifier, MAX_NULLIFIERS_PER_CALL>,\n\n private_call_requests : BoundedVec<PrivateCallRequest, MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL>,\n public_call_requests : BoundedVec<PublicCallRequest, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL>,\n public_teardown_call_request: PublicCallRequest,\n l2_to_l1_msgs : BoundedVec<L2ToL1Message, MAX_L2_TO_L1_MSGS_PER_CALL>,\n // docs:end:private-context\n\n // Header of a block whose state is used during private execution (not the block the transaction is included in).\n historical_header: Header,\n\n note_encrypted_logs_hashes: BoundedVec<NoteLogHash, MAX_NOTE_ENCRYPTED_LOGS_PER_CALL>,\n encrypted_logs_hashes: BoundedVec<EncryptedLogHash, MAX_ENCRYPTED_LOGS_PER_CALL>,\n unencrypted_logs_hashes: BoundedVec<LogHash, MAX_UNENCRYPTED_LOGS_PER_CALL>,\n\n // Contains the last key validation request for each key type. This is used to cache the last request and avoid\n // fetching the same request multiple times.\n // The index of the array corresponds to the key type (0 nullifier, 1 incoming, 2 outgoing, 3 tagging).\n last_key_validation_requests: [Option<KeyValidationRequest>; NUM_KEY_TYPES],\n}\n\nimpl PrivateContext {\n pub fn new(inputs: PrivateContextInputs, args_hash: Field) -> PrivateContext {\n PrivateContext {\n inputs,\n side_effect_counter: inputs.start_side_effect_counter + 1,\n min_revertible_side_effect_counter: 0,\n is_fee_payer: false,\n args_hash,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n historical_header: inputs.historical_header,\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n\n fn msg_sender(self) -> AztecAddress {\n self.inputs.call_context.msg_sender\n }\n\n fn this_address(self) -> AztecAddress {\n self.inputs.call_context.storage_contract_address\n }\n\n fn chain_id(self) -> Field {\n self.inputs.tx_context.chain_id\n }\n\n fn version(self) -> Field {\n self.inputs.tx_context.version\n }\n\n fn selector(self) -> FunctionSelector {\n self.inputs.call_context.function_selector\n }\n\n fn get_args_hash(self) -> Field {\n self.args_hash\n }\n\n fn push_note_hash(&mut self, note_hash: Field) {\n self.note_hashes.push(NoteHash { value: note_hash, counter: self.next_counter() });\n }\n\n fn push_nullifier(&mut self, nullifier: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: 0, counter: self.next_counter() });\n }\n\n fn push_nullifier_for_note_hash(&mut self, nullifier: Field, nullified_note_hash: Field) {\n self.nullifiers.push(Nullifier { value: nullifier, note_hash: nullified_note_hash, counter: self.next_counter() });\n }\n\n // Returns the header of a block whose state is used during private execution (not the block the transaction is\n // included in).\n fn get_header(self) -> Header {\n self.historical_header\n }\n\n // Returns the header of an arbitrary block whose block number is less than or equal to the block number\n // of historical header.\n pub fn get_header_at(self, block_number: u32) -> Header {\n get_header_at(block_number, self)\n }\n\n pub fn set_return_hash(&mut self, returns_hasher: ArgsHasher) {\n pack_returns(returns_hasher.fields);\n self.return_hash = returns_hasher.hash();\n }\n\n pub fn finish(self) -> PrivateCircuitPublicInputs {\n PrivateCircuitPublicInputs {\n call_context: self.inputs.call_context,\n args_hash: self.args_hash,\n returns_hash: self.return_hash,\n min_revertible_side_effect_counter: self.min_revertible_side_effect_counter,\n is_fee_payer: self.is_fee_payer,\n max_block_number: self.max_block_number,\n note_hash_read_requests: self.note_hash_read_requests.storage,\n nullifier_read_requests: self.nullifier_read_requests.storage,\n key_validation_requests_and_generators: self.key_validation_requests_and_generators.storage,\n note_hashes: self.note_hashes.storage,\n nullifiers: self.nullifiers.storage,\n private_call_requests: self.private_call_requests.storage,\n public_call_requests: self.public_call_requests.storage,\n public_teardown_call_request: self.public_teardown_call_request,\n l2_to_l1_msgs: self.l2_to_l1_msgs.storage,\n start_side_effect_counter: self.inputs.start_side_effect_counter,\n end_side_effect_counter: self.side_effect_counter,\n note_encrypted_logs_hashes: self.note_encrypted_logs_hashes.storage,\n encrypted_logs_hashes: self.encrypted_logs_hashes.storage,\n unencrypted_logs_hashes: self.unencrypted_logs_hashes.storage,\n historical_header: self.historical_header,\n tx_context: self.inputs.tx_context\n }\n }\n\n pub fn set_as_fee_payer(&mut self) {\n dep::protocol_types::debug_log::debug_log_format(\"Setting {0} as fee payer\", [self.this_address().to_field()]);\n self.is_fee_payer = true;\n }\n\n pub fn end_setup(&mut self) {\n // dep::protocol_types::debug_log::debug_log_format(\n // \"Ending setup at counter {0}\",\n // [self.side_effect_counter as Field]\n // );\n self.min_revertible_side_effect_counter = self.side_effect_counter;\n notify_set_min_revertible_side_effect_counter(self.min_revertible_side_effect_counter);\n }\n\n // docs:start:max-block-number\n pub fn set_tx_max_block_number(&mut self, max_block_number: u32) {\n // docs:end:max-block-number\n self.max_block_number = MaxBlockNumber::min_with_u32(self.max_block_number, max_block_number);\n }\n\n pub fn push_note_hash_read_request(&mut self, note_hash: Field) {\n let side_effect = ReadRequest { value: note_hash, counter: self.next_counter() };\n self.note_hash_read_requests.push(side_effect);\n }\n\n pub fn push_nullifier_read_request(&mut self, nullifier: Field) {\n let request = ReadRequest { value: nullifier, counter: self.next_counter() };\n self.nullifier_read_requests.push(request);\n }\n\n pub fn request_nsk_app(&mut self, npk_m_hash: Field) -> Field {\n self.request_sk_app(npk_m_hash, NULLIFIER_INDEX)\n }\n\n pub fn request_ovsk_app(&mut self, ovpk_m_hash: Field) -> Field {\n self.request_sk_app(ovpk_m_hash, OUTGOING_INDEX)\n }\n\n fn request_sk_app(&mut self, pk_m_hash: Field, key_index: Field) -> Field {\n let cached_request = self.last_key_validation_requests[key_index].unwrap_or(KeyValidationRequest::empty());\n\n if cached_request.pk_m.hash() == pk_m_hash {\n // We get a match so the cached request is the latest one\n cached_request.sk_app\n } else {\n // We didn't get a match meaning the cached result is stale. We fetch new values from oracle and instruct\n // protocol circuits to validate them by storing the validation request in context.\n let request = get_key_validation_request(pk_m_hash, key_index);\n let request_and_generator = KeyValidationRequestAndGenerator { request, sk_app_generator: sk_generators[key_index] };\n // We constrain that the pk_m_hash matches the one in the request (otherwise we could get an arbitrary\n // valid key request and not the one corresponding to pk_m_hash).\n assert(request.pk_m.hash() == pk_m_hash);\n self.key_validation_requests_and_generators.push(request_and_generator);\n self.last_key_validation_requests[key_index] = Option::some(request);\n request.sk_app\n }\n }\n\n // docs:start:context_message_portal\n pub fn message_portal(&mut self, recipient: EthAddress, content: Field) {\n // docs:end:context_message_portal\n let message = L2ToL1Message { recipient, content, counter: self.next_counter() };\n self.l2_to_l1_msgs.push(message);\n }\n\n // docs:start:context_consume_l1_to_l2_message\n // docs:start:consume_l1_to_l2_message\n pub fn consume_l1_to_l2_message(&mut self, content: Field, secret: Field, sender: EthAddress) {\n // docs:end:context_consume_l1_to_l2_message\n let nullifier = process_l1_to_l2_message(\n self.historical_header.state.l1_to_l2_message_tree.root,\n self.this_address(),\n sender,\n self.chain_id(),\n self.version(),\n content,\n secret\n );\n\n // Push nullifier (and the \"commitment\" corresponding to this can be \"empty\")\n self.push_nullifier(nullifier)\n }\n // docs:end:consume_l1_to_l2_message\n\n // NB: A randomness value of 0 signals that the kernels should not mask the contract address\n // used in siloing later on e.g. 'handshaking' contract w/ known address.\n pub fn emit_raw_event_log_with_masked_address<let M: u32>(\n &mut self,\n randomness: Field,\n log: [u8; M],\n log_hash: Field\n ) {\n let counter = self.next_counter();\n let contract_address = self.this_address();\n let len = log.len() as Field + 4;\n let side_effect = EncryptedLogHash { value: log_hash, counter, length: len, randomness };\n self.encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_event_log(contract_address, randomness, log, counter);\n }\n\n pub fn emit_raw_note_log<let M: u32>(&mut self, note_hash_counter: u32, log: [u8; M], log_hash: Field) {\n let counter = self.next_counter();\n let len = log.len() as Field + 4;\n let side_effect = NoteLogHash { value: log_hash, counter, length: len, note_hash_counter };\n self.note_encrypted_logs_hashes.push(side_effect);\n\n emit_encrypted_note_log(note_hash_counter, log, counter);\n }\n\n pub fn call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_private_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) -> PackedReturns {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_private_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_private_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) -> PackedReturns {\n self.call_private_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_private_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> PackedReturns {\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n let start_side_effect_counter = self.side_effect_counter;\n let (end_side_effect_counter, returns_hash) = call_private_function_internal(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n self.side_effect_counter = end_side_effect_counter + 1;\n\n // TODO (fees) figure out why this crashes the prover and enable it\n // we need this in order to pay fees inside child call contexts\n // assert(\n // (item.public_inputs.min_revertible_side_effect_counter == 0 as u32)\n // | (item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter)\n // );\n\n // if item.public_inputs.min_revertible_side_effect_counter\n // > self.min_revertible_side_effect_counter {\n // self.min_revertible_side_effect_counter = item.public_inputs.min_revertible_side_effect_counter;\n // }\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.private_call_requests.push(\n PrivateCallRequest {\n contract_address,\n call_context,\n args_hash,\n returns_hash,\n start_side_effect_counter,\n end_side_effect_counter\n }\n );\n\n PackedReturns::new(returns_hash)\n }\n\n pub fn call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn static_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, true, false)\n }\n\n pub fn delegate_call_public_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.call_public_function_with_packed_args(contract_address, function_selector, args_hash, false, true)\n }\n\n pub fn call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, false)\n }\n\n pub fn static_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, true, false)\n }\n\n pub fn delegate_call_public_function_no_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector\n ) {\n self.call_public_function_with_packed_args(contract_address, function_selector, 0, false, true)\n }\n\n pub fn call_public_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n enqueue_public_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n let call_request = PublicCallRequest { contract_address, call_context, args_hash, counter };\n self.public_call_requests.push(call_request);\n }\n\n pub fn set_public_teardown_function<let ARGS_COUNT: u32>(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args: [Field; ARGS_COUNT]\n ) {\n let args_hash = hash_args_array(args);\n assert(args_hash == arguments::pack_arguments_array(args));\n self.set_public_teardown_function_with_packed_args(contract_address, function_selector, args_hash, false, false)\n }\n\n pub fn set_public_teardown_function_with_packed_args(\n &mut self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n is_static_call: bool,\n is_delegate_call: bool\n ) {\n let counter = self.next_counter();\n\n let mut is_static_call = is_static_call | self.inputs.call_context.is_static_call;\n set_public_teardown_function_call_internal(\n contract_address,\n function_selector,\n args_hash,\n counter,\n is_static_call,\n is_delegate_call\n );\n\n let call_context = self.generate_call_context(\n contract_address,\n function_selector,\n is_static_call,\n is_delegate_call\n );\n\n self.public_teardown_call_request = PublicCallRequest {\n contract_address,\n call_context,\n args_hash,\n counter,\n };\n }\n\n fn generate_call_context(\n self,\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n is_static_call: bool,\n is_delegate_call: bool\n ) -> CallContext {\n let msg_sender = if is_delegate_call {\n self.msg_sender()\n } else {\n self.this_address()\n };\n let storage_contract_address = if is_delegate_call {\n self.this_address()\n } else {\n contract_address\n };\n CallContext { msg_sender, storage_contract_address, function_selector, is_static_call, is_delegate_call }\n }\n\n fn next_counter(&mut self) -> u32 {\n let counter = self.side_effect_counter;\n self.side_effect_counter += 1;\n counter\n }\n}\n\nimpl Empty for PrivateContext {\n fn empty() -> Self {\n PrivateContext {\n inputs: PrivateContextInputs::empty(),\n side_effect_counter: 0 as u32,\n min_revertible_side_effect_counter: 0 as u32,\n is_fee_payer: false,\n args_hash: 0,\n return_hash: 0,\n max_block_number: MaxBlockNumber::empty(),\n note_hash_read_requests: BoundedVec::new(),\n nullifier_read_requests: BoundedVec::new(),\n key_validation_requests_and_generators: BoundedVec::new(),\n note_hashes: BoundedVec::new(),\n nullifiers: BoundedVec::new(),\n private_call_requests: BoundedVec::new(),\n public_call_requests: BoundedVec::new(),\n public_teardown_call_request: PublicCallRequest::empty(),\n l2_to_l1_msgs: BoundedVec::new(),\n historical_header: Header::empty(),\n note_encrypted_logs_hashes: BoundedVec::new(),\n encrypted_logs_hashes: BoundedVec::new(),\n unencrypted_logs_hashes: BoundedVec::new(),\n last_key_validation_requests: [Option::none(); NUM_KEY_TYPES]\n }\n }\n}\n"},"121":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/payload.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\nuse std::{\n embedded_curve_ops::fixed_base_scalar_mul as derive_public_key,\n hash::from_field_unsafe as fr_to_fq_unsafe, field::bn254::decompose\n};\n\nuse crate::{\n event::event_interface::EventInterface, oracle::unsafe_rand::unsafe_rand,\n utils::point::point_to_bytes, note::note_interface::NoteInterface,\n encrypted_logs::{\n header::EncryptedLogHeader, incoming_body::EncryptedLogIncomingBody,\n outgoing_body::EncryptedLogOutgoingBody\n},\n keys::public_keys::{OvpkM, IvpkM}\n};\n\npub fn compute_encrypted_event_log<Event, let N: u32, let OB: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n event: Event\n) -> [u8; OB] where Event: EventInterface<N> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_event(event, randomness).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; OB] = [0; OB];\n // @todo We ignore the tags for now\n\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[64 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[96 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[144 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[192 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = OB - 336;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[336 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\npub fn compute_encrypted_note_log<Note, let N: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n note: Note,\n num_public_values: u8 // Number of values to be appended to the log in public (used in partial note flow).\n) -> [u8; M] where Note: NoteInterface<N> {\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let header = EncryptedLogHeader::new(contract_address);\n\n let incoming_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ivpk);\n let outgoing_header_ciphertext: [u8; 48] = header.compute_ciphertext(eph_sk, ovpk);\n let incoming_body_ciphertext = EncryptedLogIncomingBody::from_note(note, storage_slot).compute_ciphertext(eph_sk, ivpk);\n let outgoing_body_ciphertext: [u8; 144] = EncryptedLogOutgoingBody::new(eph_sk, recipient, ivpk).compute_ciphertext(fr_to_fq(ovsk_app), eph_pk);\n\n let mut encrypted_bytes: [u8; M] = [0; M];\n // @todo We ignore the tags for now\n\n encrypted_bytes[64] = num_public_values; // TODO(#8558): This can be just a single bit if we store info about partial fields in ABI\n let eph_pk_bytes = point_to_bytes(eph_pk);\n for i in 0..32 {\n encrypted_bytes[65 + i] = eph_pk_bytes[i];\n }\n for i in 0..48 {\n encrypted_bytes[97 + i] = incoming_header_ciphertext[i];\n encrypted_bytes[145 + i] = outgoing_header_ciphertext[i];\n }\n for i in 0..144 {\n encrypted_bytes[193 + i] = outgoing_body_ciphertext[i];\n }\n // Then we fill in the rest as the incoming body ciphertext\n let size = M - 337;\n assert_eq(size, incoming_body_ciphertext.len(), \"ciphertext length mismatch\");\n for i in 0..size {\n encrypted_bytes[337 + i] = incoming_body_ciphertext[i];\n }\n\n // Current unoptimized size of the encrypted log\n // incoming_tag (32 bytes)\n // outgoing_tag (32 bytes)\n // num_public_values (1 byte)\n // eph_pk (32 bytes)\n // incoming_header (48 bytes)\n // outgoing_header (48 bytes)\n // outgoing_body (144 bytes)\n // incoming_body_fixed (64 bytes)\n // incoming_body_variable (N * 32 bytes + 16 bytes padding)\n encrypted_bytes\n}\n\n/// Converts a base field element to scalar field element.\n/// This is fine because modulus of the base field is smaller than the modulus of the scalar field.\nfn fr_to_fq(r: Field) -> Scalar {\n let (lo, hi) = decompose(r);\n\n Scalar { lo, hi }\n}\n\nfn generate_ephemeral_key_pair() -> (Scalar, Point) {\n // @todo Need to draw randomness from the full domain of Fq not only Fr\n // We use the unsafe version of `fr_to_fq` because multi_scalar_mul (called by derive_public_key) will constrain\n // the scalars.\n let eph_sk = fr_to_fq_unsafe(unsafe_rand());\n let eph_pk = derive_public_key(eph_sk);\n\n (eph_sk, eph_pk)\n}\n\nmod test {\n use crate::{\n encrypted_logs::payload::compute_encrypted_note_log, keys::public_keys::{OvpkM, IvpkM},\n test::mocks::mock_note::MockNoteBuilder\n };\n use dep::protocol_types::{address::AztecAddress, point::Point};\n use std::test::OracleMock;\n\n #[test]\n unconstrained fn test_encrypted_note_log_matches_typescript() {\n // All the values in this test were copied over from `tagged_log.test.ts`\n let contract_address = AztecAddress::from_field(0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04);\n let storage_slot = 0x0fe46be583b71f4ab5b70c2657ff1d05cccf1d292a9369628d1a194f944e6599;\n let ovsk_app = 0x03a6513d6def49f41d20373d2cec894c23e7492794b08fc50c0e8a1bd2512612;\n let ovpk_m = OvpkM {\n inner: Point {\n x: 0x1961448682803198631f299340e4206bb12809d4bebbf012b30f59af73ba1a15,\n y: 0x133674060c3925142aceb4f1dcd9f9137d0217d37ff8729ee5ceaa6e2790353d,\n is_infinite: false\n }\n };\n let ivpk_m = IvpkM {\n inner: Point {\n x: 0x260cd3904f6df16e974c29944fdc839e40fb5cf293f03df2eb370851d3a527bc,\n y: 0x0eef2964fe6640e84c82b5d2915892409b38e9e25d39f68dd79edb725c55387f,\n is_infinite: false\n }\n };\n\n let note_value = 0x301640ceea758391b2e161c92c0513f129020f4125256afdae2646ce31099f5c;\n let note = MockNoteBuilder::new(note_value).contract_address(contract_address).storage_slot(storage_slot).build();\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk);\n\n let recipient = AztecAddress::from_field(0x10ee41ee4b62703b16f61e03cb0d88c4b306a9eb4a6ceeb2aff13428541689a2);\n let num_public_values: u8 = 0;\n\n let log: [u8; 449] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n note,\n num_public_values\n );\n\n // The following value was generated by `tagged_log.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let encrypted_note_log_from_typescript = [\n 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, 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, 0, 141, 70, 12, 14, 67, 77, 132, 110, 193, 234, 40, 110, 64, 144, 235, 86, 55, 111, 242, 123, 221, 193, 170, 202, 225, 216, 86, 84, 159, 112, 31, 167, 126, 79, 51, 186, 47, 71, 253, 172, 99, 112, 241, 59, 197, 241, 107, 186, 232, 87, 187, 230, 171, 62, 228, 234, 42, 51, 145, 146, 238, 242, 42, 71, 206, 13, 244, 66, 111, 195, 20, 203, 98, 148, 204, 242, 145, 183, 156, 29, 141, 54, 44, 220, 194, 35, 229, 16, 32, 204, 211, 49, 142, 112, 82, 202, 116, 241, 254, 146, 42, 217, 20, 189, 70, 228, 182, 171, 205, 104, 27, 99, 171, 28, 91, 244, 21, 30, 130, 240, 5, 72, 174, 124, 97, 197, 157, 248, 193, 23, 193, 76, 46, 141, 144, 70, 211, 45, 67, 167, 218, 129, 140, 104, 190, 41, 110, 249, 209, 68, 106, 135, 164, 80, 235, 63, 101, 80, 32, 13, 38, 99, 145, 91, 11, 173, 151, 231, 247, 65, 153, 117, 229, 167, 64, 239, 182, 126, 235, 83, 4, 169, 8, 8, 160, 4, 235, 252, 21, 96, 84, 161, 69, 145, 145, 215, 254, 161, 117, 246, 198, 65, 89, 179, 194, 90, 19, 121, 12, 202, 114, 80, 195, 14, 60, 128, 105, 142, 100, 86, 90, 108, 157, 219, 22, 172, 20, 121, 195, 25, 159, 236, 2, 70, 75, 42, 37, 34, 2, 17, 149, 20, 176, 32, 18, 204, 56, 117, 121, 34, 15, 3, 88, 123, 64, 68, 74, 233, 63, 59, 131, 222, 194, 192, 167, 110, 217, 10, 128, 73, 129, 172, 205, 103, 212, 60, 151, 141, 10, 151, 222, 151, 180, 43, 91, 148, 201, 110, 165, 10, 238, 32, 134, 235, 99, 216, 200, 182, 31, 22, 156, 18, 209, 222, 172, 239, 193, 212, 86, 99, 62, 70, 182, 45, 175, 241, 91, 202, 179, 225, 236, 95, 71, 66, 151, 225, 203, 53, 216, 85, 102, 130, 6, 8, 25, 180, 86, 58, 140, 198, 105, 102, 177, 42, 94, 115, 247, 145, 147, 24, 231, 39, 73, 27, 10, 219, 130, 115, 188, 74, 114, 5, 177, 199, 83, 183, 106, 87, 204, 238, 231, 72, 45, 240, 39, 174, 25, 98, 53, 187, 156, 159, 244, 38\n ];\n assert_eq(encrypted_note_log_from_typescript, log);\n }\n\n #[test]\n unconstrained fn test_encrypted_note_log_of_finalized_partial_note_matches_typescript() {\n // All the values in this test were copied over from `tagged_log.test.ts`\n let contract_address = AztecAddress::from_field(0x10f48cd9eff7ae5b209c557c70de2e657ee79166868676b787e9417e19260e04);\n let storage_slot = 0x0fe46be583b71f4ab5b70c2657ff1d05cccf1d292a9369628d1a194f944e6599;\n let ovsk_app = 0x03a6513d6def49f41d20373d2cec894c23e7492794b08fc50c0e8a1bd2512612;\n let ovpk_m = OvpkM {\n inner: Point {\n x: 0x1961448682803198631f299340e4206bb12809d4bebbf012b30f59af73ba1a15,\n y: 0x133674060c3925142aceb4f1dcd9f9137d0217d37ff8729ee5ceaa6e2790353d,\n is_infinite: false\n }\n };\n let ivpk_m = IvpkM {\n inner: Point {\n x: 0x260cd3904f6df16e974c29944fdc839e40fb5cf293f03df2eb370851d3a527bc,\n y: 0x0eef2964fe6640e84c82b5d2915892409b38e9e25d39f68dd79edb725c55387f,\n is_infinite: false\n }\n };\n\n let note_value = 0x301640ceea758391b2e161c92c0513f129020f4125256afdae2646ce31099f5c;\n let note_public_value1 = 0x14172339287e8d281545c177313f02b6aa2fedfd628cfd8b7f11a136fd0d6557;\n let note_public_value2 = 0x0834d81e3f73c7e2809b08ae38600ffc76a2554473eeab6de7bff4b33a84feac;\n let note = MockNoteBuilder::new(note_value).contract_address(contract_address).storage_slot(storage_slot).build();\n\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"getRandomField\").returns(eph_sk);\n\n let recipient = AztecAddress::from_field(0x10ee41ee4b62703b16f61e03cb0d88c4b306a9eb4a6ceeb2aff13428541689a2);\n let num_public_values: u8 = 2;\n\n // First we compute the encrypted log without the public values\n let log_without_public_values: [u8; 449] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n note,\n num_public_values\n );\n\n // Then we \"append\" the public values to the log by copying both the original log and the current log into a new byte array\n let mut log: [u8; 513] = [0; 513];\n for i in 0..449 {\n log[i] = log_without_public_values[i];\n }\n let note_public_value1_bytes: [u8; 32] = note_public_value1.to_be_bytes();\n let note_public_value2_bytes: [u8; 32] = note_public_value2.to_be_bytes();\n for i in 0..32 {\n log[449 + i] = note_public_value1_bytes[i];\n log[481 + i] = note_public_value2_bytes[i];\n }\n\n // The following value was generated by `tagged_log.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let encrypted_note_log_of_finalized_partial_from_typescript = [\n 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, 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, 2, 141, 70, 12, 14, 67, 77, 132, 110, 193, 234, 40, 110, 64, 144, 235, 86, 55, 111, 242, 123, 221, 193, 170, 202, 225, 216, 86, 84, 159, 112, 31, 167, 126, 79, 51, 186, 47, 71, 253, 172, 99, 112, 241, 59, 197, 241, 107, 186, 232, 87, 187, 230, 171, 62, 228, 234, 42, 51, 145, 146, 238, 242, 42, 71, 206, 13, 244, 66, 111, 195, 20, 203, 98, 148, 204, 242, 145, 183, 156, 29, 141, 54, 44, 220, 194, 35, 229, 16, 32, 204, 211, 49, 142, 112, 82, 202, 116, 241, 254, 146, 42, 217, 20, 189, 70, 228, 182, 171, 205, 104, 27, 99, 171, 28, 91, 244, 21, 30, 130, 240, 5, 72, 174, 124, 97, 197, 157, 248, 193, 23, 193, 76, 46, 141, 144, 70, 211, 45, 67, 167, 218, 129, 140, 104, 190, 41, 110, 249, 209, 68, 106, 135, 164, 80, 235, 63, 101, 80, 32, 13, 38, 99, 145, 91, 11, 173, 151, 231, 247, 65, 153, 117, 229, 167, 64, 239, 182, 126, 235, 83, 4, 169, 8, 8, 160, 4, 235, 252, 21, 96, 84, 161, 69, 145, 145, 215, 254, 161, 117, 246, 198, 65, 89, 179, 194, 90, 19, 121, 12, 202, 114, 80, 195, 14, 60, 128, 105, 142, 100, 86, 90, 108, 157, 219, 22, 172, 20, 121, 195, 25, 159, 236, 2, 70, 75, 42, 37, 34, 2, 17, 149, 20, 176, 32, 18, 204, 56, 117, 121, 34, 15, 3, 88, 123, 64, 68, 74, 233, 63, 59, 131, 222, 194, 192, 167, 110, 217, 10, 128, 73, 129, 172, 205, 103, 212, 60, 151, 141, 10, 151, 222, 151, 180, 43, 91, 148, 201, 110, 165, 10, 238, 32, 134, 235, 99, 216, 200, 182, 31, 22, 156, 18, 209, 222, 172, 239, 193, 212, 86, 99, 62, 70, 182, 45, 175, 241, 91, 202, 179, 225, 236, 95, 71, 66, 151, 225, 203, 53, 216, 85, 102, 130, 6, 8, 25, 180, 86, 58, 140, 198, 105, 102, 177, 42, 94, 115, 247, 145, 147, 24, 231, 39, 73, 27, 10, 219, 130, 115, 188, 74, 114, 5, 177, 199, 83, 183, 106, 87, 204, 238, 231, 72, 45, 240, 39, 174, 25, 98, 53, 187, 156, 159, 244, 38, 20, 23, 35, 57, 40, 126, 141, 40, 21, 69, 193, 119, 49, 63, 2, 182, 170, 47, 237, 253, 98, 140, 253, 139, 127, 17, 161, 54, 253, 13, 101, 87, 8, 52, 216, 30, 63, 115, 199, 226, 128, 155, 8, 174, 56, 96, 15, 252, 118, 162, 85, 68, 115, 238, 171, 109, 231, 191, 244, 179, 58, 132, 254, 172\n ];\n assert_eq(encrypted_note_log_of_finalized_partial_from_typescript, log);\n }\n}\n"},"122":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/encrypted_note_emission.nr","source":"use crate::{\n context::PrivateContext, note::{note_emission::NoteEmission, note_interface::NoteInterface},\n keys::{getters::{get_public_keys, get_ovsk_app}, public_keys::{OvpkM, IvpkM}},\n encrypted_logs::payload::compute_encrypted_note_log, oracle::logs_traits::LensForEncryptedLog\n};\nuse dep::protocol_types::{hash::sha256_to_field, address::AztecAddress, abis::note_hash::NoteHash};\n\nfn compute_raw_note_log<Note, let N: u32, let M: u32>(\n context: PrivateContext,\n note: Note,\n ovsk_app: Field,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n num_public_values: u8 // Number of values to be appended to the log in public (used in partial note flow).\n) -> (u32, [u8; M], Field) where Note: NoteInterface<N>, [Field; N]: LensForEncryptedLog<N, M> {\n let note_header = note.get_header();\n let note_hash_counter = note_header.note_hash_counter;\n let storage_slot = note_header.storage_slot;\n\n // TODO(#8589): use typesystem to skip this check when not needed\n let note_exists = context.note_hashes.storage.any(|n: NoteHash| n.counter == note_hash_counter);\n assert(note_exists, \"Can only emit a note log for an existing note.\");\n\n let contract_address: AztecAddress = context.this_address();\n\n let encrypted_log: [u8; M] = compute_encrypted_note_log(\n contract_address,\n storage_slot,\n ovsk_app,\n ovpk,\n ivpk,\n recipient,\n note,\n num_public_values\n );\n let log_hash = sha256_to_field(encrypted_log);\n\n (note_hash_counter, encrypted_log, log_hash)\n}\n\nunconstrained fn compute_raw_note_log_unconstrained<Note, let N: u32, let M: u32>(\n context: PrivateContext,\n note: Note,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress,\n num_public_values: u8 // Number of values to be appended to the log in public (used in partial note flow).\n) -> (u32, [u8; M], Field) where Note: NoteInterface<N>, [Field; N]: LensForEncryptedLog<N, M> {\n let ovsk_app = get_ovsk_app(ovpk.hash());\n compute_raw_note_log(context, note, ovsk_app, ovpk, ivpk, recipient, num_public_values)\n}\n\npub fn encode_and_encrypt_note<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(AztecAddress, AztecAddress, &mut PrivateContext)](NoteEmission<Note>) -> () where Note: NoteInterface<N>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovpk = get_public_keys(ov).ovpk_m;\n let ivpk = get_public_keys(iv).ivpk_m;\n let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n // Number of public values is always 0 here because `encode_and_encrypt_note(...)` is only called\n // in the non-partial note flow.\n let num_public_values = 0;\n let (note_hash_counter, encrypted_log, log_hash) = compute_raw_note_log(*context, e.note, ovsk_app, ovpk, ivpk, iv, num_public_values);\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n\npub fn encode_and_encrypt_note_unconstrained<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n ov: AztecAddress,\n iv: AztecAddress\n) -> fn[(AztecAddress, AztecAddress, &mut PrivateContext)](NoteEmission<Note>) -> () where Note: NoteInterface<N>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n // Note: We could save a lot of gates by obtaining the following keys in an unconstrained context but this\n // function is currently not used anywhere so we are not optimizing it.\n let ovpk = get_public_keys(ov).ovpk_m;\n let ivpk = get_public_keys(iv).ivpk_m;\n\n // Number of public values is always 0 here because `encode_and_encrypt_note_unconstrained(...)` is only called\n // in the non-partial note flow.\n let num_public_values = 0;\n\n // See the comment in `encode_and_encrypt_note_with_keys_unconstrained` for why having note hash counter\n // and log hash unconstrained here is fine.\n let (note_hash_counter, encrypted_log, log_hash) = unsafe {\n compute_raw_note_log_unconstrained(*context, e.note, ovpk, ivpk, iv, num_public_values)\n };\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n let ovsk_app: Field = context.request_ovsk_app(ovpk.hash());\n\n // Number of public values is always 0 here because `encode_and_encrypt_note_unconstrained(...)` is only called\n // in the non-partial note flow.\n let num_public_values = 0;\n\n let (note_hash_counter, encrypted_log, log_hash) = compute_raw_note_log(*context, e.note, ovsk_app, ovpk, ivpk, recipient, num_public_values);\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n\npub fn encode_and_encrypt_note_with_keys_unconstrained<Note, let N: u32, let M: u32>(\n context: &mut PrivateContext,\n ovpk: OvpkM,\n ivpk: IvpkM,\n recipient: AztecAddress\n) -> fn[(&mut PrivateContext, OvpkM, IvpkM, AztecAddress)](NoteEmission<Note>) -> () where Note: NoteInterface<N>, [Field; N]: LensForEncryptedLog<N, M> {\n | e: NoteEmission<Note> | {\n // Number of public values is always 0 here because `encode_and_encrypt_note_with_keys_unconstrained(...)` is only called\n // in the non-partial note flow.\n let num_public_values = 0;\n\n // Having the log hash be unconstrained here is fine because the way this works is we send the log hash\n // to the kernel, and it gets included as part of its public inputs. Then we send the tx to the sequencer,\n // which includes the kernel proof and the log preimages. The sequencer computes the hashes of the logs\n // and checks that they are the ones in the public inputs of the kernel, and drops the tx otherwise (proposing\n // the block on L1 would later fail if it didn't because of txs effects hash mismatch).\n // So if we don't constrain the log hash, then a malicious sender can compute the correct log, submit a bad\n // log hash to the kernel, and then submit the bad log preimage to the sequencer. All checks will pass, but\n // the submitted log will not be the one that was computed by the app.\n // In the unconstrained case, we don't care about the log at all because we don't do anything with it,\n // and because it's unconstrained: it could be anything. So if a sender chooses to broadcast the tx with a log\n // that is different from the one that was used in the circuit, then they'll be able to, but they were already\n // able to change the log before anyway, so the end result is the same. It's important here that we do not\n // return the log from this function to the app, otherwise it could try to do stuff with it and then that might\n // be wrong.\n // Regarding the note hash counter, this is used for squashing. The kernel assumes that a given note can have\n // more than one log and removes all of the matching ones, so all a malicious sender could do is either: cause\n // for the log to be deleted when it shouldn't have (which is fine - they can already make the content be\n // whatever), or cause for the log to not be deleted when it should have (which is also fine - it'll be a log\n // for a note that doesn't exist).\n let (note_hash_counter, encrypted_log, log_hash) = unsafe {\n compute_raw_note_log_unconstrained(*context, e.note, ovpk, ivpk, recipient, num_public_values)\n };\n context.emit_raw_note_log(note_hash_counter, encrypted_log, log_hash);\n }\n}\n"},"123":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/outgoing_body.nr","source":"use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, constants::GENERATOR_INDEX__SYMMETRIC_KEY,\n hash::poseidon2_hash_with_separator\n};\nuse std::aes128::aes128_encrypt;\n\nuse crate::{keys::public_keys::IvpkM, utils::point::point_to_bytes};\n\npub struct EncryptedLogOutgoingBody {\n eph_sk: Scalar,\n recipient: AztecAddress,\n recipient_ivpk: IvpkM,\n}\n\nimpl EncryptedLogOutgoingBody {\n pub fn new(eph_sk: Scalar, recipient: AztecAddress, recipient_ivpk: IvpkM) -> Self {\n Self { eph_sk, recipient, recipient_ivpk }\n }\n\n /// Encrypts ephemeral secret key and recipient's ivpk --> with this information the recipient of outgoing will\n /// be able to derive the key with which the incoming log can be decrypted.\n pub fn compute_ciphertext(self, ovsk_app: Scalar, eph_pk: Point) -> [u8; 144] {\n // Again, we could compute `eph_pk` here, but we keep the interface more similar\n // and also make it easier to optimise it later as we just pass it along\n\n let mut buffer = [0 as u8; 128];\n\n let serialized_eph_sk_high: [u8; 32] = self.eph_sk.hi.to_be_bytes();\n let serialized_eph_sk_low: [u8; 32] = self.eph_sk.lo.to_be_bytes();\n\n let address_bytes: [u8; 32] = self.recipient.to_field().to_be_bytes();\n let serialized_recipient_ivpk = point_to_bytes(self.recipient_ivpk.to_point());\n\n for i in 0..32 {\n buffer[i] = serialized_eph_sk_high[i];\n buffer[i + 32] = serialized_eph_sk_low[i];\n buffer[i + 64] = address_bytes[i];\n }\n for i in 0..32 {\n buffer[i + 96] = serialized_recipient_ivpk[i];\n }\n\n // We compute the symmetric key using poseidon.\n let full_key: [u8; 32] = poseidon2_hash_with_separator(\n [ovsk_app.hi, ovsk_app.lo, eph_pk.x, eph_pk.y],\n GENERATOR_INDEX__SYMMETRIC_KEY as Field\n ).to_be_bytes();\n\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(buffer, iv, sym_key).as_array()\n }\n}\n\nmod test {\n use crate::{encrypted_logs::outgoing_body::EncryptedLogOutgoingBody, keys::public_keys::IvpkM};\n use dep::protocol_types::{address::AztecAddress, scalar::Scalar};\n use std::embedded_curve_ops::fixed_base_scalar_mul as derive_public_key;\n\n #[test]\n unconstrained fn test_encrypted_log_outgoing_body_matches_typescript() {\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000d0d302ee245dfaf2807e604eec4715fe,\n hi: 0x000000000000000000000000000000000f096b423017226a18461115fa8d34bb\n };\n let recipient_ivsk = Scalar {\n lo: 0x000000000000000000000000000000004828f8f95676ebb481df163f87fd4022,\n hi: 0x000000000000000000000000000000000f4d97c25d578f9348251a71ca17ae31\n };\n let sender_ovsk_app = Scalar {\n lo: 0x0000000000000000000000000000000074d2e28c6bc5176ac02cf7c7d36a444e,\n hi: 0x00000000000000000000000000000000089c6887cb1446d86c64e81afc78048b\n };\n\n let eph_pk = derive_public_key(eph_sk);\n let recipient_ivpk = IvpkM { inner: derive_public_key(recipient_ivsk) };\n\n let recipient = AztecAddress::from_field(0xdeadbeef);\n\n let body = EncryptedLogOutgoingBody::new(eph_sk, recipient, recipient_ivpk);\n\n let ciphertext = body.compute_ciphertext(sender_ovsk_app, eph_pk);\n\n // The following value was generated by `encrypted_log_outgoing_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let outgoing_body_ciphertext_from_typescript = [\n 127, 182, 227, 75, 192, 197, 54, 47, 168, 134, 233, 148, 251, 46, 86, 12, 73, 50, 238, 50, 31, 174, 27, 202, 110, 77, 161, 197, 244, 124, 17, 100, 143, 150, 232, 14, 156, 248, 43, 177, 16, 82, 244, 103, 88, 74, 84, 200, 15, 65, 187, 14, 163, 60, 91, 22, 104, 31, 211, 190, 124, 121, 79, 92, 239, 65, 185, 106, 51, 178, 168, 137, 84, 43, 79, 158, 151, 152, 83, 42, 170, 13, 106, 209, 254, 74, 39, 145, 73, 215, 17, 234, 196, 89, 30, 58, 120, 127, 88, 69, 121, 61, 18, 206, 89, 118, 243, 238, 177, 71, 73, 47, 147, 4, 155, 25, 173, 248, 206, 52, 17, 180, 122, 186, 106, 191, 252, 102, 197, 91, 16, 39, 94, 91, 224, 30, 168, 177, 26, 144, 5, 124, 128, 6\n ];\n\n assert_eq(outgoing_body_ciphertext_from_typescript, ciphertext);\n }\n}\n"},"124":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/header.nr","source":"use dep::protocol_types::{address::AztecAddress, scalar::Scalar, point::Point};\n\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::ToPoint};\n\nuse std::aes128::aes128_encrypt;\n\npub struct EncryptedLogHeader {\n address: AztecAddress,\n}\n\nimpl EncryptedLogHeader {\n fn new(address: AztecAddress) -> Self {\n EncryptedLogHeader { address }\n }\n\n fn compute_ciphertext<T>(self, secret: Scalar, pk: T) -> [u8; 48] where T: ToPoint {\n let full_key = point_to_symmetric_key(secret, pk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n\n let input: [u8; 32] = self.address.to_field().to_be_bytes();\n aes128_encrypt(input, iv, sym_key).as_array()\n }\n}\n\n#[test]\nunconstrained fn test_encrypted_log_header_matches_noir() {\n let address = AztecAddress::from_field(0xdeadbeef);\n let header = EncryptedLogHeader::new(address);\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = crate::keys::public_keys::IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let ciphertext = header.compute_ciphertext(secret, point);\n\n // The following value was generated by `encrypted_log_header.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let expected_header_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 194, 44, 7, 131, 160, 83, 64, 181, 98, 38, 153, 214, 62, 171, 253, 161, 111, 191, 28, 247, 216, 26, 222, 171, 176, 218, 48, 209, 73, 89, 200, 209\n ];\n\n assert_eq(ciphertext, expected_header_ciphertext_from_typescript);\n}\n"},"125":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/encrypted_logs/incoming_body.nr","source":"use crate::note::note_interface::NoteInterface;\nuse crate::event::event_interface::EventInterface;\nuse dep::protocol_types::{scalar::Scalar};\n\nuse std::aes128::aes128_encrypt;\nuse crate::keys::{point_to_symmetric_key::point_to_symmetric_key, public_keys::IvpkM};\n\npub struct EncryptedLogIncomingBody<let N: u32> {\n plaintext: [u8; N * 32 + 64]\n}\n\nimpl<let N: u32> EncryptedLogIncomingBody<N> {\n pub fn from_note<T>(note: T, storage_slot: Field) -> Self where T: NoteInterface<N> {\n let mut plaintext = note.to_be_bytes(storage_slot);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn from_event<T>(event: T, randomness: Field) -> Self where T: EventInterface<N> {\n let mut plaintext = event.private_to_be_bytes(randomness);\n EncryptedLogIncomingBody { plaintext }\n }\n\n pub fn compute_ciphertext(self, eph_sk: Scalar, ivpk: IvpkM) -> [u8] {\n let full_key = point_to_symmetric_key(eph_sk, ivpk.to_point());\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n\n for i in 0..16 {\n sym_key[i] = full_key[i];\n iv[i] = full_key[i + 16];\n }\n aes128_encrypt(self.plaintext, iv, sym_key)\n }\n}\n\nmod test {\n use dep::protocol_types::{\n address::AztecAddress, scalar::Scalar, point::Point, traits::Serialize,\n abis::event_selector::EventSelector\n };\n\n use crate::{\n note::{note_header::NoteHeader, note_interface::{NoteInterface, NullifiableNote}},\n encrypted_logs::incoming_body::EncryptedLogIncomingBody, event::event_interface::EventInterface,\n context::PrivateContext, keys::public_keys::IvpkM\n };\n\n struct AddressNote {\n address: AztecAddress,\n owner: AztecAddress,\n randomness: Field,\n header: NoteHeader,\n }\n\n global ADDRESS_NOTE_LEN: u32 = 3;\n\n impl NullifiableNote for AddressNote {\n fn compute_nullifier(\n _self: Self,\n _context: &mut PrivateContext,\n _note_hash_for_nullify: Field\n ) -> Field {\n 1\n }\n\n unconstrained fn compute_nullifier_without_context(_self: Self) -> Field {\n 1\n }\n }\n\n struct AddressNoteHidingPoint {\n inner: Point\n }\n\n impl NoteInterface<ADDRESS_NOTE_LEN> for AddressNote {\n\n fn get_note_type_id() -> Field {\n 1\n }\n\n fn get_header(self) -> NoteHeader {\n self.header\n }\n\n fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n fn serialize_content(self) -> [Field; ADDRESS_NOTE_LEN] {\n [self.address.to_field(), self.owner.to_field(), self.randomness]\n }\n\n fn deserialize_content(fields: [Field; ADDRESS_NOTE_LEN]) -> Self {\n AddressNote {\n address: AztecAddress::from_field(fields[0]),\n owner: AztecAddress::from_field(fields[1]),\n randomness: fields[2],\n header: NoteHeader::empty()\n }\n }\n\n fn to_be_bytes(self, storage_slot: Field) -> [u8; ADDRESS_NOTE_LEN * 32 + 64] {\n let serialized_note = self.serialize_content();\n\n let mut buffer: [u8; ADDRESS_NOTE_LEN * 32 + 64] = [0; ADDRESS_NOTE_LEN * 32 + 64];\n\n let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes();\n let note_type_id_bytes: [u8; 32] = AddressNote::get_note_type_id().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = storage_slot_bytes[i];\n buffer[32 + i] = note_type_id_bytes[i];\n }\n\n for i in 0..serialized_note.len() {\n let bytes: [u8; 32] = serialized_note[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n buffer\n }\n\n fn compute_note_hash(_self: Self) -> Field {\n crate::generators::Ga1.x\n }\n }\n\n impl AddressNote {\n pub fn new(address: AztecAddress, owner: AztecAddress, randomness: Field) -> Self {\n AddressNote { address, owner, randomness, header: NoteHeader::empty() }\n }\n }\n\n #[test]\n unconstrained fn test_encrypted_note_log_incoming_body_matches_typescript() {\n // All the values in this test were copied over from `encrypted_note_log_incoming_body.test.ts`\n let note = AddressNote::new(\n AztecAddress::from_field(0x1),\n AztecAddress::from_field(0x2),\n 3\n );\n\n let storage_slot = 2;\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n // 1. `EncryptedLogIncomingBody::from_note` calls `note.to_be_bytes(storage_slot)` function which serializes\n // the note to bytes - note that in the case of `AddressNote` the `to_be_bytes` function was automatically\n // implemented by Aztec macros.\n let body = EncryptedLogIncomingBody::from_note(note, storage_slot);\n\n // 2. `body.compute_ciphertext(...)` function then derives symmetric key from `eph_sk` and `ivpk` and encrypts\n // the note plaintext using AES-128.\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_note_log_incoming_body.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let note_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 27, 176, 228, 74, 242, 190, 138, 48, 33, 93, 46, 37, 223, 130, 25, 245, 188, 163, 159, 223, 187, 24, 139, 206, 131, 154, 159, 130, 37, 17, 158, 114, 242, 141, 124, 193, 232, 54, 146, 96, 145, 100, 125, 234, 57, 43, 95, 115, 183, 39, 121, 232, 134, 229, 148, 25, 46, 77, 87, 127, 95, 7, 77, 188, 37, 234, 245, 142, 232, 87, 252, 28, 67, 67, 90, 214, 254, 89, 47, 68, 66, 187, 227, 8, 59, 162, 25, 141, 97, 141, 217, 197, 115, 15, 212, 202, 157, 41, 150, 62, 219, 57, 224, 92, 185, 212, 142, 94, 146, 41, 178, 145, 68, 169, 23, 185, 206, 138, 70, 47, 176, 210, 165, 236, 23, 206, 229, 108\n ];\n\n assert_eq(note_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..note_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], note_body_ciphertext_from_typescript[i]);\n }\n }\n\n struct TestEvent {\n value0: Field,\n value1: Field,\n value2: Field,\n }\n\n impl Serialize<3> for TestEvent {\n fn serialize(self) -> [Field; 3] {\n [self.value0, self.value1, self.value2]\n }\n }\n\n global TEST_EVENT_LEN: u32 = 3;\n\n impl EventInterface<TEST_EVENT_LEN> for TestEvent {\n fn get_event_type_id() -> EventSelector {\n comptime\n {\n EventSelector::from_signature(\"TestEvent(Field,Field,Field)\")\n }\n }\n\n fn private_to_be_bytes(self, randomness: Field) -> [u8; TEST_EVENT_LEN * 32 + 64] {\n let mut buffer: [u8; TEST_EVENT_LEN * 32 + 64] = [0; TEST_EVENT_LEN * 32 + 64];\n\n let randomness_bytes: [u8; 32] = randomness.to_be_bytes();\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = randomness_bytes[i];\n buffer[32 + i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn to_be_bytes(self) -> [u8; TEST_EVENT_LEN * 32 + 32] {\n let mut buffer: [u8; TEST_EVENT_LEN * 32 + 32] = [0; TEST_EVENT_LEN * 32 + 32];\n\n let event_type_id_bytes: [u8; 32] = TestEvent::get_event_type_id().to_field().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = event_type_id_bytes[i];\n }\n\n let serialized_event = self.serialize();\n\n for i in 0..serialized_event.len() {\n let bytes: [u8; 32] = serialized_event[i].to_be_bytes();\n for j in 0..32 {\n buffer[32 + i * 32 + j] = bytes[j];\n }\n }\n\n buffer\n }\n\n fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n }\n\n #[test]\n unconstrained fn test_encrypted_log_event_incoming_body() {\n let test_event = TestEvent { value0: 1, value1: 2, value2: 3 };\n\n let eph_sk = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n\n let ivpk = IvpkM {\n inner: Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n }\n };\n\n let randomness = 2;\n\n let body = EncryptedLogIncomingBody::from_event(test_event, randomness);\n\n let ciphertext = body.compute_ciphertext(eph_sk, ivpk);\n\n // The following value was generated by `encrypted_event_log_incoming_body.test.ts`\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let event_body_ciphertext_from_typescript = [\n 226, 240, 253, 6, 28, 52, 19, 131, 33, 132, 178, 212, 245, 62, 14, 190, 147, 228, 160, 190, 146, 61, 95, 203, 124, 153, 68, 168, 17, 150, 92, 0, 99, 214, 85, 64, 191, 78, 157, 131, 149, 96, 236, 253, 96, 172, 157, 30, 201, 247, 40, 80, 60, 188, 158, 251, 242, 103, 197, 79, 165, 195, 10, 160, 255, 35, 167, 152, 25, 233, 77, 145, 214, 243, 210, 119, 0, 20, 29, 95, 15, 63, 33, 190, 184, 67, 254, 96, 128, 243, 220, 228, 201, 130, 86, 163, 52, 127, 111, 10, 212, 7, 160, 16, 87, 13, 39, 11, 5, 1, 164, 65, 8, 56, 82, 245, 13, 68, 176, 90, 100, 69, 243, 78, 117, 188, 221, 34, 178, 31, 155, 89, 143, 176, 129, 118, 36, 236, 64, 179, 52, 239, 184, 51, 51, 199, 221, 49, 81, 197, 17, 199, 192, 99, 49, 168, 157, 164, 190, 33, 240, 182, 214, 173, 7, 156, 102, 95, 65, 217, 225, 123, 42, 21, 124, 144\n ];\n\n assert_eq(event_body_ciphertext_from_typescript.len(), ciphertext.len());\n\n for i in 0..event_body_ciphertext_from_typescript.len() {\n assert_eq(ciphertext[i], event_body_ciphertext_from_typescript[i]);\n }\n }\n}\n"},"129":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_getter/mod.nr","source":"use dep::protocol_types::{constants::{MAX_NOTE_HASH_READ_REQUESTS_PER_CALL, GET_NOTES_ORACLE_RETURN_LENGTH}};\nuse crate::context::PrivateContext;\nuse crate::note::{\n constants::{GET_NOTE_ORACLE_RETURN_LENGTH, VIEW_NOTE_ORACLE_RETURN_LENGTH},\n note_getter_options::{NoteGetterOptions, Select, Sort, SortOrder, NoteStatus, PropertySelector},\n note_interface::{NoteInterface, NullifiableNote}, note_viewer_options::NoteViewerOptions,\n utils::compute_note_hash_for_read_request\n};\nuse crate::oracle;\nuse crate::utils::comparison::compare;\n\npub use crate::note::constants::MAX_NOTES_PER_PAGE;\n\nmod test;\n\nfn extract_property_value_from_selector<let N: u32>(\n serialized_note: [Field; N],\n selector: PropertySelector\n) -> Field {\n // Selectors use PropertySelectors in order to locate note properties inside the serialized note.\n // This allows easier packing and custom (de)serialization schemas. A note property is located\n // inside the serialized note using the index inside the array, a byte offset and a length.\n let value: [u8; 32] = serialized_note[selector.index].to_be_bytes();\n let offset = selector.offset;\n let length = selector.length;\n let mut value_field = 0 as Field;\n let mut acc: Field = 1;\n for i in 0..32 {\n if i < length {\n value_field += value[31 + offset - i] as Field * acc;\n acc = acc * 256;\n }\n }\n value_field\n}\n\nfn check_note_header<Note, let N: u32>(\n context: PrivateContext,\n storage_slot: Field,\n note: Note\n) where Note: NoteInterface<N> {\n let header = note.get_header();\n let contract_address = context.this_address();\n assert(header.contract_address.eq(contract_address), \"Mismatch note header contract address.\");\n assert(header.storage_slot == storage_slot, \"Mismatch note header storage slot.\");\n}\n\nfn check_note_fields<let N: u32>(\n serialized_note: [Field; N],\n selects: BoundedVec<Option<Select>, N>\n) {\n for i in 0..selects.len {\n let select = selects.get_unchecked(i).unwrap_unchecked();\n let value_field = extract_property_value_from_selector(serialized_note, select.property_selector);\n\n assert(\n compare(value_field, select.comparator, select.value.to_field()), \"Mismatch return note field.\"\n );\n }\n}\n\nfn check_notes_order<let N: u32>(\n fields_0: [Field; N],\n fields_1: [Field; N],\n sorts: BoundedVec<Option<Sort>, N>\n) {\n for i in 0..sorts.len {\n let sort = sorts.get_unchecked(i).unwrap_unchecked();\n let field_0 = extract_property_value_from_selector(fields_0, sort.property_selector);\n let field_1 = extract_property_value_from_selector(fields_1, sort.property_selector);\n let eq = field_0 == field_1;\n let lt = field_0.lt(field_1);\n if sort.order == SortOrder.ASC {\n assert(eq | lt, \"Return notes not sorted in ascending order.\");\n } else if !eq {\n assert(!lt, \"Return notes not sorted in descending order.\");\n }\n }\n}\n\npub fn get_note<Note, let N: u32>(\n context: &mut PrivateContext,\n storage_slot: Field\n) -> (Note, Field) where Note: NoteInterface<N> + NullifiableNote {\n let note = unsafe {\n get_note_internal(storage_slot)\n };\n\n // Constraining that we got a valid note from the oracle is fairly straightforward: all we need to do is check that\n // the metadata is correct, and that the note exists.\n check_note_header(*context, storage_slot, note);\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n context.push_note_hash_read_request(note_hash_for_read_request);\n\n (note, note_hash_for_read_request)\n}\n\npub fn get_notes<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N> + NullifiableNote + Eq {\n let opt_notes = unsafe {\n get_notes_internal(storage_slot, options)\n };\n\n // We apply the constraints in a separate function instead of inlining them here to make it easier to test that\n // these checks correctly reject bad notes.\n constrain_get_notes_internal(context, storage_slot, opt_notes, options)\n}\n\nunconstrained fn apply_preprocessor<Note, PREPROCESSOR_ARGS>(\n notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor: fn([Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL], PREPROCESSOR_ARGS) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n preprocessor_args: PREPROCESSOR_ARGS\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] {\n preprocessor(notes, preprocessor_args)\n}\n\nfn constrain_get_notes_internal<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n context: &mut PrivateContext,\n storage_slot: Field,\n opt_notes: [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL],\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> (BoundedVec<Note, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>, BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL>) where Note: NoteInterface<N> + NullifiableNote + Eq {\n // The filter is applied first to avoid pushing note read requests for notes we're not interested in. Note that\n // while the filter function can technically mutate the contents of the notes (as opposed to simply removing some),\n // the private kernel will later validate that these note actually exist, so transformations would cause for that\n // check to fail.\n let filter_fn = options.filter;\n let filter_args = options.filter_args;\n let filtered_notes = filter_fn(opt_notes, filter_args);\n\n let notes = crate::utils::collapse_array(filtered_notes);\n let mut note_hashes: BoundedVec<Field, MAX_NOTE_HASH_READ_REQUESTS_PER_CALL> = BoundedVec::new();\n\n // We have now collapsed the sparse array of Options into a BoundedVec. This is a more ergonomic type and also\n // results in reduced gate counts when setting a limit value, since we guarantee that the limit is an upper bound\n // for the runtime length, and can therefore have fewer loop iterations.\n assert(notes.len() <= options.limit, \"Got more notes than limit.\");\n\n let mut prev_fields = [0; N];\n for i in 0..options.limit {\n if i < notes.len() {\n let note = notes.get_unchecked(i);\n let fields = note.serialize_content();\n check_note_header(*context, storage_slot, note);\n check_note_fields(fields, options.selects);\n if i != 0 {\n check_notes_order(prev_fields, fields, options.sorts);\n }\n prev_fields = fields;\n\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1410): test to ensure\n // failure if malicious oracle injects 0 nonce here for a \"pre-existing\" note.\n context.push_note_hash_read_request(note_hash_for_read_request);\n note_hashes.push(note_hash_for_read_request);\n };\n }\n\n (notes, note_hashes)\n}\n\nunconstrained fn get_note_internal<Note, let N: u32>(storage_slot: Field) -> Note where Note: NoteInterface<N> {\n let placeholder_note = [Option::none()];\n let placeholder_fields = [0; GET_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n oracle::notes::get_notes(\n storage_slot,\n 0,\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n 1, // limit\n 0, // offset\n NoteStatus.ACTIVE,\n placeholder_note,\n placeholder_fields,\n placeholder_note_length\n )[0].expect(f\"Failed to get a note\") // Notice: we don't allow dummies to be returned from get_note (singular).\n}\n\nunconstrained fn get_notes_internal<Note, let N: u32, PREPROCESSOR_ARGS, FILTER_ARGS>(\n storage_slot: Field,\n options: NoteGetterOptions<Note, N, PREPROCESSOR_ARGS, FILTER_ARGS>\n) -> [Option<Note>; MAX_NOTE_HASH_READ_REQUESTS_PER_CALL] where Note: NoteInterface<N> {\n // This function simply performs some transformations from NoteGetterOptions into the types required by the oracle.\n\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTE_HASH_READ_REQUESTS_PER_CALL];\n let placeholder_fields = [0; GET_NOTES_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let opt_notes = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n apply_preprocessor(opt_notes, options.preprocessor, options.preprocessor_args)\n}\n\nunconstrained pub fn view_notes<Note, let N: u32>(\n storage_slot: Field,\n options: NoteViewerOptions<Note, N>\n) -> BoundedVec<Note, MAX_NOTES_PER_PAGE> where Note: NoteInterface<N> {\n let (num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order) = flatten_options(options.selects, options.sorts);\n let placeholder_opt_notes = [Option::none(); MAX_NOTES_PER_PAGE];\n let placeholder_fields = [0; VIEW_NOTE_ORACLE_RETURN_LENGTH];\n let placeholder_note_length = [0; N];\n\n let notes_array = oracle::notes::get_notes(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n options.limit,\n options.offset,\n options.status,\n placeholder_opt_notes,\n placeholder_fields,\n placeholder_note_length\n );\n\n let mut notes = BoundedVec::new();\n for i in 0..notes_array.len() {\n if notes_array[i].is_some() {\n notes.push(notes_array[i].unwrap_unchecked());\n }\n }\n\n notes\n}\n\nunconstrained fn flatten_options<let N: u32>(\n selects: BoundedVec<Option<Select>, N>,\n sorts: BoundedVec<Option<Sort>, N>\n) -> (u8, [u8; N], [u8; N], [u8; N], [Field; N], [u8; N], [u8; N], [u8; N], [u8; N], [u8; N]) {\n let mut num_selects = 0;\n let mut select_by_indexes = [0; N];\n let mut select_by_offsets = [0; N];\n let mut select_by_lengths = [0; N];\n let mut select_values = [0; N];\n let mut select_comparators = [0; N];\n\n for i in 0..selects.len {\n let select = selects.get(i);\n if select.is_some() {\n select_by_indexes[num_selects] = select.unwrap_unchecked().property_selector.index;\n select_by_offsets[num_selects] = select.unwrap_unchecked().property_selector.offset;\n select_by_lengths[num_selects] = select.unwrap_unchecked().property_selector.length;\n select_values[num_selects] = select.unwrap_unchecked().value;\n select_comparators[num_selects] = select.unwrap_unchecked().comparator;\n num_selects += 1;\n };\n }\n\n let mut sort_by_indexes = [0; N];\n let mut sort_by_offsets = [0; N];\n let mut sort_by_lengths = [0; N];\n let mut sort_order = [0; N];\n for i in 0..sorts.len {\n let sort = sorts.get(i);\n if sort.is_some() {\n sort_by_indexes[i] = sort.unwrap_unchecked().property_selector.index;\n sort_by_offsets[i] = sort.unwrap_unchecked().property_selector.offset;\n sort_by_lengths[i] = sort.unwrap_unchecked().property_selector.length;\n sort_order[i] = sort.unwrap_unchecked().order;\n };\n }\n\n (\n num_selects, select_by_indexes, select_by_offsets, select_by_lengths, select_values, select_comparators, sort_by_indexes, sort_by_offsets, sort_by_lengths, sort_order\n )\n}\n"},"131":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/utils.nr","source":"use crate::{\n context::PrivateContext,\n note::{note_header::NoteHeader, note_interface::{NullifiableNote, NoteInterface}}\n};\n\nuse dep::protocol_types::{\n hash::{\n compute_unique_note_hash, compute_siloed_note_hash as compute_siloed_note_hash,\n compute_siloed_nullifier as compute_siloed_nullifier_from_preimage\n},\n utils::arr_copy_slice\n};\n\npub fn compute_siloed_nullifier<Note, let N: u32>(\n note_with_header: Note,\n context: &mut PrivateContext\n) -> Field where Note: NoteInterface<N> + NullifiableNote {\n let header = note_with_header.get_header();\n let note_hash_for_nullify = compute_note_hash_for_nullify(note_with_header);\n let inner_nullifier = note_with_header.compute_nullifier(context, note_hash_for_nullify);\n\n compute_siloed_nullifier_from_preimage(header.contract_address, inner_nullifier)\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_read_request<Note, let N: u32>(note: Note) -> Field where Note: NoteInterface<N> + NullifiableNote {\n let note_hash = note.compute_note_hash();\n let nonce = note.get_header().nonce;\n let counter = note.get_header().note_hash_counter;\n\n if counter != 0 {\n note_hash\n } else {\n compute_unique_note_hash(nonce, note_hash)\n }\n}\n\n// TODO(#7775): make this not impossible to understand\npub fn compute_note_hash_for_nullify_internal<Note, let N: u32>(\n note: Note,\n note_hash_for_read_request: Field\n) -> Field where Note: NoteInterface<N> + NullifiableNote {\n let header = note.get_header();\n\n if header.note_hash_counter != 0 {\n if header.nonce == 0 {\n // Case 1: Transient note\n note_hash_for_read_request\n } else {\n // Case 2: Non-revertible note, nullified by a revertible nullifier\n let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash_for_read_request);\n compute_siloed_note_hash(header.contract_address, unique_note_hash)\n }\n } else {\n // Case 3: Note from a previous transaction\n // note_hash_for_read_request is already the unique_note_hash in this case\n compute_siloed_note_hash(header.contract_address, note_hash_for_read_request)\n }\n}\n\n// TODO(#7775): nuke this commented out code - kept it around as it contains comments which might be helpful when tackling #7775\n// pub fn compute_note_hash_for_nullify<Note, let N: u32, let M: u32>(note: Note) -> Field where Note: NoteInterface<N> {\n// let header = note.get_header();\n// // There are 3 cases for reading a note intended for consumption:\n// // 1. The note was inserted in this transaction, is revertible, or is not nullified by a revertible nullifier in\n// // the same transaction: (note_hash_counter != 0) & (nonce == 0)\n// // 2. The note was inserted in this transaction, is non-revertible, and is nullified by a revertible nullifier in\n// // the same transaction: (note_hash_counter != 0) & (nonce != 0)\n// // 3. The note was inserted in a previous transaction: (note_hash_counter == 0) & (nonce != 0)\n\n// let note_hash = note.compute_note_hiding_point().x;\n\n// if header.nonce == 0 {\n// // Case 1.\n// // If a note is transient, we just read the note_hash (kernel will hash it with nonce and silo by contract address).\n// note_hash\n// } else {\n// // Case 2: If a note is non-revertible, and is nullified by a revertible nullifier, we cannot squash them in the\n// // private reset circuit. Because if the tx reverts, we will have to keep the note hash and throw away the\n// // nullifier.\n// // And if the tx does not revert, both will be emitted. In which case, the nullifier must be created in the app\n// // from the siloed note hash.\n// // The kernel circuit will check that a nullifier with non-zero note_nonce is linked to a note hash, whose\n// // siloed note hash matches the note hash specified in the nullifier.\n\n// // Case 3: If a note is not from the current transaction, that means we are reading a settled note (from\n// // tree) created in a previous TX. So we need the siloed_note_hash which has already been hashed with\n// // nonce and then contract address. This hash will match the existing leaf in the note hash\n// // tree, so the kernel can just perform a membership check directly on this hash/leaf.\n// let unique_note_hash = compute_unique_note_hash(header.nonce, note_hash);\n// compute_siloed_note_hash(header.contract_address, unique_note_hash)\n// // IMPORTANT NOTE ON REDUNDANT SILOING BY CONTRACT ADDRESS: The note hash computed above is\n// // \"siloed\" by contract address. When a note hash is computed solely for the purpose of\n// // nullification, it is not strictly necessary to silo the note hash before computing\n// // its nullifier. In other words, it is NOT NECESSARY for protocol security that a nullifier\n// // be computed from a siloed note hash. After all, persistable note hashes and nullifiers are\n// // siloed by the kernel circuit. That being said, the siloed note hash computed above CAN be\n// // used for nullifier computation, and this achieves the (arguably unnecessary) property that\n// // nullifiers are computed from a note hash's fully-computed note hash tree leaf.\n// }\n// }\n\npub fn compute_note_hash_for_nullify<Note, let N: u32>(note: Note) -> Field where Note: NoteInterface<N> + NullifiableNote {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n compute_note_hash_for_nullify_internal(note, note_hash_for_read_request)\n}\n\npub fn compute_note_hash_and_optionally_a_nullifier<T, let N: u32, let S: u32>(\n deserialize_content: fn([Field; N]) -> T,\n note_header: NoteHeader,\n compute_nullifier: bool,\n serialized_note: [Field; S]\n) -> [Field; 4] where T: NoteInterface<N> + NullifiableNote {\n let mut note = deserialize_content(arr_copy_slice(serialized_note, [0; N], 0));\n note.set_header(note_header);\n\n let note_hash = note.compute_note_hash();\n let unique_note_hash = compute_unique_note_hash(note_header.nonce, note_hash);\n let siloed_note_hash = compute_siloed_note_hash(note_header.contract_address, unique_note_hash);\n\n let inner_nullifier = if compute_nullifier {\n note.compute_nullifier_without_context()\n } else {\n 0\n };\n // docs:start:compute_note_hash_and_optionally_a_nullifier_returns\n [note_hash, unique_note_hash, siloed_note_hash, inner_nullifier]\n // docs:end:compute_note_hash_and_optionally_a_nullifier_returns\n}\n"},"132":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/lifecycle.nr","source":"use crate::context::{PrivateContext, PublicContext};\nuse crate::note::{\n note_header::NoteHeader, note_interface::{NoteInterface, NullifiableNote},\n utils::{compute_note_hash_for_read_request, compute_note_hash_for_nullify_internal},\n note_emission::NoteEmission\n};\nuse crate::oracle::notes::{notify_created_note, notify_nullified_note};\n\npub fn create_note<Note, let N: u32>(\n context: &mut PrivateContext,\n storage_slot: Field,\n note: &mut Note\n) -> NoteEmission<Note> where Note: NoteInterface<N> + NullifiableNote {\n let contract_address = (*context).this_address();\n let note_hash_counter = context.side_effect_counter;\n\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter };\n note.set_header(header);\n let note_hash = note.compute_note_hash();\n\n let serialized_note = Note::serialize_content(*note);\n assert(\n notify_created_note(\n storage_slot,\n Note::get_note_type_id(),\n serialized_note,\n note_hash,\n note_hash_counter\n )\n == 0\n );\n\n context.push_note_hash(note_hash);\n\n NoteEmission::new(*note)\n}\n\npub fn create_note_hash_from_public<Note, let N: u32>(\n context: &mut PublicContext,\n storage_slot: Field,\n note: &mut Note\n) where Note: NoteInterface<N> + NullifiableNote {\n let contract_address = (*context).this_address();\n // Public note hashes are transient, but have no side effect counters, so we just need note_hash_counter != 0\n let header = NoteHeader { contract_address, storage_slot, nonce: 0, note_hash_counter: 1 };\n note.set_header(header);\n let note_hash = note.compute_note_hash();\n\n context.push_note_hash(note_hash);\n}\n\n// Note: This function is currently totally unused.\npub fn destroy_note<Note, let N: u32>(\n context: &mut PrivateContext,\n note: Note\n) where Note: NoteInterface<N> + NullifiableNote {\n let note_hash_for_read_request = compute_note_hash_for_read_request(note);\n\n destroy_note_unsafe(context, note, note_hash_for_read_request)\n}\n\npub fn destroy_note_unsafe<Note, let N: u32>(\n context: &mut PrivateContext,\n note: Note,\n note_hash_for_read_request: Field\n) where Note: NoteInterface<N> + NullifiableNote {\n let note_hash_for_nullify = compute_note_hash_for_nullify_internal(note, note_hash_for_read_request);\n let nullifier = note.compute_nullifier(context, note_hash_for_nullify);\n\n let note_hash_counter = note.get_header().note_hash_counter;\n let notification_note_hash = if (note_hash_counter == 0) {\n // Counter is zero, so we're nullifying a settled note and we don't populate the note_hash with real value.\n 0\n } else {\n // A non-zero note hash counter implies that we're nullifying a pending note (i.e. one that has not yet been\n // persisted in the trees and is instead in the pending new note hashes array). In such a case we populate its\n // hash with real value to inform the kernel which note we're nullifyng so that it can either squash both\n // the note and the nullifier if it's an inner note hash, or check that the it matches a pending note if it's\n // a siloed note hash.\n note_hash_for_nullify\n };\n\n let nullifier_counter = context.side_effect_counter;\n assert(notify_nullified_note(nullifier, notification_note_hash, nullifier_counter) == 0);\n\n context.push_nullifier_for_note_hash(nullifier, notification_note_hash)\n}\n\n"},"133":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/note/note_emission.nr","source":"/**\n * A note emission struct containing the information required for emitting a note.\n * The exact `emit` logic is passed in by the application code\n */\npub struct NoteEmission<Note> {\n note: Note\n}\n\nimpl<Note> NoteEmission<Note> {\n pub fn new(note: Note) -> Self {\n Self { note }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](Self) -> ()) {\n _emit(self);\n }\n\n pub fn discard(_self: Self) {}\n}\n\n/**\n * A struct wrapping note emission in `Option<T>`.\n * This is the struct provided to application codes, which can be used to emit\n * only when a note was actually inserted.\n * It is fairly common to have cases where a function conditionally inserts,\n * and this allows us to keep the same API for emission in both cases (e.g. inserting\n * a change note in a token's transfer function only when there is \"change\" left).\n */\npub struct OuterNoteEmission<Note> {\n emission: Option<NoteEmission<Note>>,\n}\n\nimpl<Note> OuterNoteEmission<Note> {\n pub fn new(emission: Option<NoteEmission<Note>>) -> Self {\n Self { emission }\n }\n\n pub fn emit<Env>(self, _emit: fn[Env](NoteEmission<Note>) -> ()) {\n if self.emission.is_some() {\n _emit(self.emission.unwrap());\n }\n }\n\n pub fn discard(_self: Self) {}\n}\n"},"141":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/hash.nr","source":"use dep::protocol_types::{\n address::{AztecAddress, EthAddress},\n constants::{GENERATOR_INDEX__SECRET_HASH, GENERATOR_INDEX__MESSAGE_NULLIFIER, GENERATOR_INDEX__FUNCTION_ARGS},\n point::Point, traits::Hash,\n hash::{sha256_to_field, poseidon2_hash_with_separator, poseidon2_hash_with_separator_slice}\n};\nuse crate::oracle::logs_traits::ToBytesForUnencryptedLog;\n\npub use dep::protocol_types::hash::{compute_siloed_nullifier, pedersen_hash};\n\npub fn pedersen_commitment<let N: u32>(inputs: [Field; N], hash_index: u32) -> Point {\n std::hash::pedersen_commitment_with_separator(inputs, hash_index)\n}\n\npub fn compute_secret_hash(secret: Field) -> Field {\n poseidon2_hash_with_separator([secret], GENERATOR_INDEX__SECRET_HASH)\n}\n\npub fn compute_unencrypted_log_hash<T, let N: u32, let M: u32>(\n contract_address: AztecAddress,\n log: T\n) -> Field where T: ToBytesForUnencryptedLog<N, M> {\n let message_bytes: [u8; N] = log.to_be_bytes_arr();\n // can't use N - not in scope error\n let n = message_bytes.len();\n let mut hash_bytes = [0; M];\n // Address is converted to 32 bytes in ts\n let address_bytes = contract_address.to_be_bytes_arr();\n for i in 0..32 {\n hash_bytes[i] = address_bytes[i];\n }\n let len_bytes: [u8; 4] = (n as Field).to_be_bytes();\n for i in 0..4 {\n hash_bytes[32 + i] = len_bytes[i];\n }\n for i in 0..n {\n hash_bytes[36 + i] = message_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\npub fn compute_message_hash(\n sender: EthAddress,\n chain_id: Field,\n recipient: AztecAddress,\n version: Field,\n content: Field,\n secret_hash: Field\n) -> Field {\n let mut hash_bytes = [0 as u8; 192];\n let sender_bytes: [u8; 32] = sender.to_field().to_be_bytes();\n let chain_id_bytes: [u8; 32] = chain_id.to_be_bytes();\n let recipient_bytes: [u8; 32] = recipient.to_field().to_be_bytes();\n let version_bytes: [u8; 32] = version.to_be_bytes();\n let content_bytes: [u8; 32] = content.to_be_bytes();\n let secret_hash_bytes: [u8; 32] = secret_hash.to_be_bytes();\n\n for i in 0..32 {\n hash_bytes[i] = sender_bytes[i];\n hash_bytes[i + 32] = chain_id_bytes[i];\n hash_bytes[i + 64] = recipient_bytes[i];\n hash_bytes[i + 96] = version_bytes[i];\n hash_bytes[i + 128] = content_bytes[i];\n hash_bytes[i + 160] = secret_hash_bytes[i];\n }\n\n sha256_to_field(hash_bytes)\n}\n\n// The nullifier of a l1 to l2 message is the hash of the message salted with the secret and index of the message hash\n// in the L1 to L2 message tree\npub fn compute_message_nullifier(message_hash: Field, secret: Field, leaf_index: Field) -> Field {\n poseidon2_hash_with_separator(\n [message_hash, secret, leaf_index],\n GENERATOR_INDEX__MESSAGE_NULLIFIER\n )\n}\n\npub struct ArgsHasher {\n fields: [Field],\n}\n\nimpl Hash for ArgsHasher {\n fn hash(self) -> Field {\n hash_args(self.fields)\n }\n}\n\nimpl ArgsHasher {\n pub fn new() -> Self {\n Self { fields: [] }\n }\n\n pub fn add(&mut self, field: Field) {\n self.fields = self.fields.push_back(field);\n }\n\n pub fn add_multiple<let N: u32>(&mut self, fields: [Field; N]) {\n for i in 0..N {\n self.fields = self.fields.push_back(fields[i]);\n }\n }\n}\n\npub fn hash_args_array<let N: u32>(args: [Field; N]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\npub fn hash_args(args: [Field]) -> Field {\n if args.len() == 0 {\n 0\n } else {\n poseidon2_hash_with_separator_slice(args, GENERATOR_INDEX__FUNCTION_ARGS)\n }\n}\n\n#[test]\nunconstrained fn compute_var_args_hash() {\n let mut input = ArgsHasher::new();\n for i in 0..100 {\n input.add(i as Field);\n }\n let hash = input.hash();\n dep::std::println(hash);\n assert(hash == 0x19b0d74feb06ebde19edd85a28986c97063e84b3b351a8b666c7cac963ce655f);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_array() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = [\n 0x20660de09f35f876e3e69d227b2a35166ad05f09d82d06366ec9b6f65a51fec2,\n 0x1b52bfe3b8689761916f76dc3d38aa8810860db325cd39ca611eed980091f01c,\n 0x2e559c4045c378a56ad13b9edb1e8de4e7ad3b3aa35cc7ba9ec77f7a68fa43a4,\n 0x25d0f689c4a4178a29d59306f2675824d19be6d25e44fa03b03f49c263053dd2,\n 0x2d513a722d6f352dc0961f156afdc5e31495b9f0e35cb069261a8e55e2df67fd\n ];\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0095b2d17ab72f4b27a341f7ac63e49ec73935ae8c9181a0ac02023eb12f3284);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_addr() {\n let contract_address = AztecAddress::from_field(0x233a3e0df23b2b15b324194cb4a151f26c0b7333250781d34cc269d85dc334c6);\n let log = AztecAddress::from_field(0x26aa302d4715fd8a687453cb26d616b0768027bd54bcae56b09d908ecd9f8303);\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0083ab647dfb26e7ddee90a0f4209d049d4660cab42000c544b986aaa84c55a3);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"dummy\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x00629e88ebd6374f44aa6cfe07e251ecf07213ebc7267e8f6b578ae57ffd6c20);\n}\n\n#[test]\nunconstrained fn compute_unenc_log_hash_longer_str() {\n let contract_address = AztecAddress::from_field(0x1b401e1146c5c507962287065c81f0ef7590adae3802c533d7549d6bf0a41bd8);\n let log = \"Hello this is a string\";\n let hash = compute_unencrypted_log_hash(contract_address, log);\n assert(hash == 0x0098637962f7d34fa202b7ffad8a07a238c5d1fd897b82a108f7f467fa73b841);\n}\n"},"149":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/initializer.nr","source":"use dep::protocol_types::{\n address::AztecAddress, hash::poseidon2_hash_with_separator, constants::GENERATOR_INDEX__CONSTRUCTOR,\n abis::function_selector::FunctionSelector\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext}, oracle::get_contract_instance::get_contract_instance,\n oracle::get_contract_instance::get_contract_instance_avm\n};\n\npub fn mark_as_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn mark_as_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier((*context).this_address());\n context.push_nullifier(init_nullifier);\n}\n\npub fn assert_is_initialized_public(context: &mut PublicContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n assert(context.nullifier_exists(init_nullifier, context.this_address()), \"Not initialized\");\n}\n\npub fn assert_is_initialized_private(context: &mut PrivateContext) {\n let init_nullifier = compute_unsiloed_contract_initialization_nullifier(context.this_address());\n context.push_nullifier_read_request(init_nullifier);\n}\n\nfn compute_unsiloed_contract_initialization_nullifier(address: AztecAddress) -> Field {\n address.to_field()\n}\n\npub fn assert_initialization_matches_address_preimage_public(context: PublicContext) {\n let address = context.this_address();\n let instance = get_contract_instance_avm(address).unwrap();\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn assert_initialization_matches_address_preimage_private(context: PrivateContext) {\n let address = context.this_address();\n let instance = get_contract_instance(address);\n let expected_init = compute_initialization_hash(context.selector(), context.get_args_hash());\n assert(instance.initialization_hash == expected_init, \"Initialization hash does not match\");\n assert(\n (instance.deployer.is_zero()) | (instance.deployer == context.msg_sender()), \"Initializer address is not the contract deployer\"\n );\n}\n\npub fn compute_initialization_hash(init_selector: FunctionSelector, init_args_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [init_selector.to_field(), init_args_hash],\n GENERATOR_INDEX__CONSTRUCTOR\n )\n}\n"},"151":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/logs.nr","source":"use dep::protocol_types::{address::AztecAddress, point::Point};\n\n// = 480 + 32 * N bytes\n#[oracle(emitEncryptedNoteLog)]\nunconstrained fn emit_encrypted_note_log_oracle<let M: u32>(_note_hash_counter: u32, _encrypted_note: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_note_log<let M: u32>(\n note_hash_counter: u32,\n encrypted_note: [u8; M],\n counter: u32\n) {\n emit_encrypted_note_log_oracle(note_hash_counter, encrypted_note, counter)\n}\n\n#[oracle(emitEncryptedEventLog)]\nunconstrained fn emit_encrypted_event_log_oracle<let M: u32>(_contract_address: AztecAddress, _randomness: Field, _encrypted_event: [u8; M], _counter: u32) {}\n\nunconstrained pub fn emit_encrypted_event_log<let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n encrypted_event: [u8; M],\n counter: u32\n) {\n emit_encrypted_event_log_oracle(contract_address, randomness, encrypted_event, counter)\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedNoteLog)]\nunconstrained fn compute_encrypted_note_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _storage_slot: Field,\n _note_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_note_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_note_log_oracle(\n contract_address,\n storage_slot,\n note_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n// = 480 + 32 * N bytes\n#[oracle(computeEncryptedEventLog)]\nunconstrained fn compute_encrypted_event_log_oracle<let N: u32, let M: u32>(\n _contract_address: AztecAddress,\n _randomness: Field,\n _event_type_id: Field,\n _ovsk_app: Field,\n _ovpk_m: Point,\n _ivpk_m: Point,\n _recipient: AztecAddress,\n _preimage: [Field; N]\n) -> [u8; M] {}\n\nunconstrained pub fn compute_encrypted_event_log<let N: u32, let M: u32>(\n contract_address: AztecAddress,\n randomness: Field,\n event_type_id: Field,\n ovsk_app: Field,\n ovpk_m: Point,\n ivpk_m: Point,\n recipient: AztecAddress,\n preimage: [Field; N]\n) -> [u8; M] {\n compute_encrypted_event_log_oracle(\n contract_address,\n randomness,\n event_type_id,\n ovsk_app,\n ovpk_m,\n ivpk_m,\n recipient,\n preimage\n )\n}\n\n#[oracle(emitUnencryptedLog)]\nunconstrained fn emit_unencrypted_log_oracle_private<T>(_contract_address: AztecAddress, _message: T, _counter: u32) -> Field {}\n\nunconstrained pub fn emit_unencrypted_log_private_internal<T>(\n contract_address: AztecAddress,\n message: T,\n counter: u32\n) -> Field {\n emit_unencrypted_log_oracle_private(contract_address, message, counter)\n}\n\n#[oracle(emitContractClassUnencryptedLog)]\nunconstrained fn emit_contract_class_unencrypted_log_private<let N: u32>(\n contract_address: AztecAddress,\n message: [Field; N],\n counter: u32\n) -> Field {}\n\nunconstrained pub fn emit_contract_class_unencrypted_log_private_internal<let N: u32>(contract_address: AztecAddress, message: [Field; N], counter: u32) -> Field {\n emit_contract_class_unencrypted_log_private(contract_address, message, counter)\n}\n"},"153":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/returns.nr","source":"#[oracle(packReturns)]\nunconstrained fn pack_returns_oracle(_returns: [Field]) -> Field {}\n\nunconstrained pub fn pack_returns(returns: [Field]) {\n let _unused = pack_returns_oracle(returns);\n}\n\n#[oracle(unpackReturns)]\nunconstrained fn unpack_returns_oracle<let N: u32>(_return_hash: Field) -> [Field; N] {}\n\nunconstrained pub fn unpack_returns<let N: u32>(return_hash: Field) -> [Field; N] {\n unpack_returns_oracle(return_hash)\n}\n"},"155":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/key_validation_request.nr","source":"use dep::protocol_types::abis::validation_requests::{KeyValidationRequest, key_validation_request::KEY_VALIDATION_REQUEST_LENGTH};\n\n#[oracle(getKeyValidationRequest)]\nunconstrained fn get_key_validation_request_oracle(\n _pk_m_hash: Field,\n _key_index: Field\n) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {}\n\nunconstrained fn get_key_validation_request_internal(\n npk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n let result = get_key_validation_request_oracle(npk_m_hash, key_index);\n KeyValidationRequest::deserialize(result)\n}\n\nunconstrained pub fn get_key_validation_request(\n pk_m_hash: Field,\n key_index: Field\n) -> KeyValidationRequest {\n get_key_validation_request_internal(pk_m_hash, key_index)\n}\n"},"159":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/unsafe_rand.nr","source":"#[oracle(getRandomField)]\nunconstrained fn rand_oracle() -> Field {}\n\n// Called `unsafe_rand` because we do not constrain in circuit that we are dealing with an actual random value.\n// Instead we just trust our PXE.\nunconstrained pub fn unsafe_rand() -> Field {\n rand_oracle()\n}\n"},"161":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/call_private_function.nr","source":"use dep::protocol_types::{abis::function_selector::FunctionSelector, address::AztecAddress, utils::reader::Reader};\n\n#[oracle(callPrivateFunction)]\nunconstrained fn call_private_function_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _start_side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) -> [Field; 2] {}\n\nunconstrained pub fn call_private_function_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n start_side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) -> (u32, Field) {\n let fields = call_private_function_oracle(\n contract_address,\n function_selector,\n args_hash,\n start_side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n\n let mut reader = Reader::new(fields);\n let end_side_effect_counter = reader.read_u32();\n let returns_hash = reader.read();\n\n (end_side_effect_counter, returns_hash)\n}\n"},"162":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/keys.nr","source":"use crate::keys::{PublicKeys, public_keys::{NpkM, IvpkM, OvpkM, TpkM}};\nuse dep::protocol_types::{address::{AztecAddress, PartialAddress}, point::Point};\n\n#[oracle(getPublicKeysAndPartialAddress)]\nunconstrained fn get_public_keys_and_partial_address_oracle(_address: AztecAddress) -> [Field; 13] {}\n\nunconstrained pub fn get_public_keys_and_partial_address(address: AztecAddress) -> (PublicKeys, PartialAddress) {\n let result = get_public_keys_and_partial_address_oracle(address);\n\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: result[0], y: result[1], is_infinite: result[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: result[3], y: result[4], is_infinite: result[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: result[6], y: result[7], is_infinite: result[8] as bool } },\n tpk_m: TpkM { inner: Point { x: result[9], y: result[10], is_infinite: result[11] as bool } }\n };\n\n let partial_address = PartialAddress::from_field(result[12]);\n\n (keys, partial_address)\n}\n"},"164":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/notes.nr","source":"use crate::note::{note_header::NoteHeader, note_interface::NoteInterface};\n\nuse dep::protocol_types::{address::AztecAddress, utils::arr_copy_slice};\n\n#[oracle(notifyCreatedNote)]\nunconstrained fn notify_created_note_oracle<let N: u32>(\n _storage_slot: Field,\n _note_type_id: Field,\n _serialized_note: [Field; N],\n _note_hash: Field,\n _counter: u32\n) -> Field {}\n\nunconstrained pub fn notify_created_note<let N: u32>(\n storage_slot: Field,\n note_type_id: Field,\n serialized_note: [Field; N],\n note_hash: Field,\n counter: u32\n) -> Field {\n notify_created_note_oracle(storage_slot, note_type_id, serialized_note, note_hash, counter)\n}\n\n#[oracle(notifyNullifiedNote)]\nunconstrained fn notify_nullified_note_oracle(_nullifier: Field, _note_hash: Field, _counter: u32) -> Field {}\n\nunconstrained pub fn notify_nullified_note(nullifier: Field, note_hash: Field, counter: u32) -> Field {\n notify_nullified_note_oracle(nullifier, note_hash, counter)\n}\n\n#[oracle(getNotes)]\nunconstrained fn get_notes_oracle<let N: u32, let S: u32>(\n _storage_slot: Field,\n _num_selects: u8,\n _select_by_indexes: [u8; N],\n _select_by_offsets: [u8; N],\n _select_by_lengths: [u8; N],\n _select_values: [Field; N],\n _select_comparators: [u8; N],\n _sort_by_indexes: [u8; N],\n _sort_by_offsets: [u8; N],\n _sort_by_lengths: [u8; N],\n _sort_order: [u8; N],\n _limit: u32,\n _offset: u32,\n _status: u8,\n _return_size: u32,\n _placeholder_fields: [Field; S]\n) -> [Field; S] {}\n\nunconstrained fn get_notes_oracle_wrapper<let N: u32, let S: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; N],\n select_by_offsets: [u8; N],\n select_by_lengths: [u8; N],\n select_values: [Field; N],\n select_comparators: [u8; N],\n sort_by_indexes: [u8; N],\n sort_by_offsets: [u8; N],\n sort_by_lengths: [u8; N],\n sort_order: [u8; N],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_fields: [Field; S]\n) -> [Field; S] {\n let return_size = placeholder_fields.len() as u32;\n get_notes_oracle(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n return_size,\n placeholder_fields\n )\n}\n\nunconstrained pub fn get_notes<Note, let N: u32, let M: u32, let S: u32, let NS: u32>(\n storage_slot: Field,\n num_selects: u8,\n select_by_indexes: [u8; M],\n select_by_offsets: [u8; M],\n select_by_lengths: [u8; M],\n select_values: [Field; M],\n select_comparators: [u8; M],\n sort_by_indexes: [u8; M],\n sort_by_offsets: [u8; M],\n sort_by_lengths: [u8; M],\n sort_order: [u8; M],\n limit: u32,\n offset: u32,\n status: u8,\n mut placeholder_opt_notes: [Option<Note>; S], // TODO: Remove it and use `limit` to initialize the note array.\n placeholder_fields: [Field; NS], // TODO: Remove it and use `limit` to initialize the note array.\n _placeholder_note_length: [Field; N] // Turbofish hack? Compiler breaks calculating read_offset unless we add this parameter\n) -> [Option<Note>; S] where Note: NoteInterface<N> {\n let fields = get_notes_oracle_wrapper(\n storage_slot,\n num_selects,\n select_by_indexes,\n select_by_offsets,\n select_by_lengths,\n select_values,\n select_comparators,\n sort_by_indexes,\n sort_by_offsets,\n sort_by_lengths,\n sort_order,\n limit,\n offset,\n status,\n placeholder_fields\n );\n let num_notes = fields[0] as u32;\n let contract_address = AztecAddress::from_field(fields[1]);\n for i in 0..placeholder_opt_notes.len() {\n if i < num_notes {\n // lengths named as per typescript.\n let return_header_length: u32 = 2; // num_notes & contract_address.\n let extra_preimage_length: u32 = 2; // nonce & note_hash_counter.\n let read_offset: u32 = return_header_length + i * (N + extra_preimage_length);\n let nonce = fields[read_offset];\n let note_hash_counter = fields[read_offset + 1] as u32;\n let header = NoteHeader { contract_address, nonce, storage_slot, note_hash_counter };\n let serialized_note = arr_copy_slice(fields, [0; N], read_offset + 2);\n let mut note = Note::deserialize_content(serialized_note);\n note.set_header(header);\n placeholder_opt_notes[i] = Option::some(note);\n };\n }\n placeholder_opt_notes\n}\n\n// Only ever use this in private!\n#[oracle(checkNullifierExists)]\nunconstrained fn check_nullifier_exists_oracle(_inner_nullifier: Field) -> Field {}\n\n// Only ever use this in private!\nunconstrained pub fn check_nullifier_exists(inner_nullifier: Field) -> bool {\n check_nullifier_exists_oracle(inner_nullifier) == 1\n}\n"},"165":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/get_contract_instance.nr","source":"use dep::protocol_types::{\n address::AztecAddress, contract_instance::ContractInstance, constants::CONTRACT_INSTANCE_LENGTH,\n utils::reader::Reader\n};\n\n#[oracle(getContractInstance)]\nunconstrained fn get_contract_instance_oracle(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {}\n\n// Returns a ContractInstance plus a boolean indicating whether the instance was found.\n#[oracle(avmOpcodeGetContractInstance)]\nunconstrained fn get_contract_instance_oracle_avm(_address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {}\n\nunconstrained fn get_contract_instance_internal(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n get_contract_instance_oracle(address)\n}\n\nunconstrained pub fn get_contract_instance_internal_avm(address: AztecAddress) -> [Field; CONTRACT_INSTANCE_LENGTH + 1] {\n get_contract_instance_oracle_avm(address)\n}\n\npub fn get_contract_instance(address: AztecAddress) -> ContractInstance {\n let instance = unsafe {\n ContractInstance::deserialize(get_contract_instance_internal(address))\n };\n // The to_address function combines all values in the instance object to produce an address, so by checking that we\n // get the expected address we validate the entire struct.\n assert_eq(instance.to_address(), address);\n\n instance\n}\n\npub fn get_contract_instance_avm(address: AztecAddress) -> Option<ContractInstance> {\n let mut reader = Reader::new(get_contract_instance_internal_avm(address));\n let found = reader.read();\n if found == 0 {\n Option::none()\n } else {\n Option::some(reader.read_struct(ContractInstance::deserialize))\n }\n}\n"},"166":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/oracle/enqueue_public_function_call.nr","source":"use dep::protocol_types::{abis::{function_selector::FunctionSelector}, address::AztecAddress};\n\n#[oracle(enqueuePublicFunctionCall)]\nunconstrained fn enqueue_public_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn enqueue_public_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n enqueue_public_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(setPublicTeardownFunctionCall)]\nunconstrained fn set_public_teardown_function_call_oracle(\n _contract_address: AztecAddress,\n _function_selector: FunctionSelector,\n _args_hash: Field,\n _side_effect_counter: u32,\n _is_static_call: bool,\n _is_delegate_call: bool\n) {}\n\nunconstrained pub fn set_public_teardown_function_call_internal(\n contract_address: AztecAddress,\n function_selector: FunctionSelector,\n args_hash: Field,\n side_effect_counter: u32,\n is_static_call: bool,\n is_delegate_call: bool\n) {\n set_public_teardown_function_call_oracle(\n contract_address,\n function_selector,\n args_hash,\n side_effect_counter,\n is_static_call,\n is_delegate_call\n );\n}\n\n#[oracle(notifySetMinRevertibleSideEffectCounter)]\nunconstrained fn notify_set_min_revertible_side_effect_counter_oracle(_counter: u32) {}\n\nunconstrained pub fn notify_set_min_revertible_side_effect_counter(counter: u32) {\n notify_set_min_revertible_side_effect_counter_oracle(counter);\n}\n"},"189":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/state_vars/private_immutable.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__INITIALIZATION_NULLIFIER, hash::poseidon2_hash_with_separator};\n\nuse crate::context::{PrivateContext, UnconstrainedContext};\nuse crate::note::{\n lifecycle::create_note, note_getter::{get_note, view_notes},\n note_interface::{NoteInterface, NullifiableNote}, note_viewer_options::NoteViewerOptions,\n note_emission::NoteEmission\n};\nuse crate::oracle::notes::check_nullifier_exists;\nuse crate::state_vars::storage::Storage;\n\n// docs:start:struct\npub struct PrivateImmutable<Note, Context> {\n context: Context,\n storage_slot: Field,\n}\n// docs:end:struct\n\nimpl<T, Context> Storage<T> for PrivateImmutable<T, Context> {}\n\nimpl<Note, Context> PrivateImmutable<Note, Context> {\n // docs:start:new\n pub fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n // docs:end:new\n\n // The following computation is leaky, in that it doesn't hide the storage slot that has been initialized, nor does it hide the contract address of this contract.\n // When this initialization nullifier is emitted, an observer could do a dictionary or rainbow attack to learn the preimage of this nullifier to deduce the storage slot and contract address.\n // For some applications, leaking the details that a particular state variable of a particular contract has been initialized will be unacceptable.\n // Under such circumstances, such application developers might wish to _not_ use this state variable type.\n // This is especially dangerous for initial assignment to elements of a `Map<AztecAddress, PrivateImmutable>` type (for example), because the storage slot often also identifies an actor.\n // e.g. the initial assignment to `my_map.at(msg.sender)` will leak: `msg.sender`, the fact that an element of `my_map` was assigned-to for the first time, and the contract_address.\n pub fn compute_initialization_nullifier(self) -> Field {\n poseidon2_hash_with_separator(\n [self.storage_slot],\n GENERATOR_INDEX__INITIALIZATION_NULLIFIER\n )\n }\n}\n\nimpl<Note> PrivateImmutable<Note, &mut PrivateContext> {\n // docs:start:initialize\n pub fn initialize<let N: u32>(\n self,\n note: &mut Note\n ) -> NoteEmission<Note> where Note: NoteInterface<N> + NullifiableNote {\n // Nullify the storage slot.\n let nullifier = self.compute_initialization_nullifier();\n self.context.push_nullifier(nullifier);\n\n create_note(self.context, self.storage_slot, note)\n }\n // docs:end:initialize\n\n // docs:start:get_note\n pub fn get_note<let N: u32>(self) -> Note where Note: NoteInterface<N> + NullifiableNote {\n let storage_slot = self.storage_slot;\n get_note(self.context, storage_slot).0\n }\n // docs:end:get_note\n}\n\nimpl<Note> PrivateImmutable<Note, UnconstrainedContext> {\n // docs:start:is_initialized\n unconstrained pub fn is_initialized(self) -> bool {\n let nullifier = self.compute_initialization_nullifier();\n check_nullifier_exists(nullifier)\n }\n // docs:end:is_initialized\n\n // view_note does not actually use the context, but it calls oracles that are only available in private\n // docs:start:view_note\n unconstrained pub fn view_note<let N: u32>(self) -> Note where Note: NoteInterface<N> + NullifiableNote {\n let mut options = NoteViewerOptions::new();\n view_notes(self.storage_slot, options.set_limit(1)).get(0)\n }\n // docs:end:view_note\n}\n"},"193":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/utils/point.nr","source":"use dep::protocol_types::point::Point;\n\n// I am storing the modulus divided by 2 plus 1 here because full modulus would throw \"String literal too large\" error\n// Full modulus is 21888242871839275222246405745257275088548364400416034343698204186575808495617\nglobal BN254_FR_MODULUS_DIV_2: Field = 10944121435919637611123202872628637544274182200208017171849102093287904247808;\n\n/// Converts a public key to a byte array.\n///\n/// We don't serialize the point at infinity flag because this function is used in situations where we do not want\n/// to waste the extra byte (encrypted log).\npub fn point_to_bytes(pk: Point) -> [u8; 32] {\n // Note that there is 1 more free bit in the 32 bytes (254 bits currently occupied by the x coordinate, 1 bit for\n // the \"sign\") so it's possible to use that last bit as an \"is_infinite\" flag if desired in the future.\n assert(!pk.is_infinite, \"Cannot serialize point at infinity as bytes.\");\n\n let mut result: [u8; 32] = pk.x.to_be_bytes();\n\n // We store only a \"sign\" of the y coordinate because the rest can be derived from the x coordinate. To get\n // the sign we check if the y coordinate is less or equal than the curve's order minus 1 divided by 2.\n // Ideally we'd do `y <= MOD_DIV_2`, but there's no `lte` function, so instead we do `!(y > MOD_DIV_2)`, which is\n // equivalent, and then rewrite that as `!(MOD_DIV_2 < y)`, since we also have no `gt` function.\n if !BN254_FR_MODULUS_DIV_2.lt(pk.y) {\n // y is <= (modulus - 1) / 2 so we set the sign bit to 1\n // Here we leverage that field fits into 254 bits (log2(Fr.MODULUS) < 254) and given that we serialize Fr to 32\n // bytes and we use big-endian the 2 most significant bits are never populated. Hence we can use one of\n // the bits as a sign bit.\n result[0] += 128;\n }\n\n result\n}\n\nmod test {\n use dep::protocol_types::point::Point;\n use crate::utils::point::point_to_bytes;\n\n #[test]\n unconstrained fn test_point_to_bytes_positive_sign() {\n let p = Point {\n x: 0x1af41f5de96446dc3776a1eb2d98bb956b7acd9979a67854bec6fa7c2973bd73,\n y: 0x07fc22c7f2c7057571f137fe46ea9c95114282bc95d37d71ec4bfb88de457d4a,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_positive_sign = [\n 154, 244, 31, 93, 233, 100, 70, 220, 55, 118, 161, 235, 45, 152, 187, 149, 107, 122, 205, 153, 121, 166, 120, 84, 190, 198, 250, 124, 41, 115, 189, 115\n ];\n\n assert_eq(expected_compressed_point_positive_sign, compressed_point);\n }\n\n #[test]\n unconstrained fn test_point_to_bytes_negative_sign() {\n let p = Point {\n x: 0x247371652e55dd74c9af8dbe9fb44931ba29a9229994384bd7077796c14ee2b5,\n y: 0x26441aec112e1ae4cee374f42556932001507ad46e255ffb27369c7e3766e5c0,\n is_infinite: false\n };\n\n let compressed_point = point_to_bytes(p);\n\n let expected_compressed_point_negative_sign = [\n 36, 115, 113, 101, 46, 85, 221, 116, 201, 175, 141, 190, 159, 180, 73, 49, 186, 41, 169, 34, 153, 148, 56, 75, 215, 7, 119, 150, 193, 78, 226, 181\n ];\n\n assert_eq(expected_compressed_point_negative_sign, compressed_point);\n }\n}\n"},"211":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/abis/validation_requests/key_validation_request.nr","source":"use crate::{traits::{Empty, Serialize, Deserialize}, point::Point};\npub use crate::constants::KEY_VALIDATION_REQUEST_LENGTH;\n\npub struct KeyValidationRequest {\n pk_m: Point,\n sk_app: Field, // not a grumpkin scalar because it's output of poseidon2\n}\n\nimpl Eq for KeyValidationRequest {\n fn eq(self, request: KeyValidationRequest) -> bool {\n (request.pk_m.eq(self.pk_m)) & (request.sk_app.eq(self.sk_app))\n }\n}\n\nimpl Empty for KeyValidationRequest {\n fn empty() -> Self {\n KeyValidationRequest { pk_m: Point::empty(), sk_app: 0 }\n }\n}\n\nimpl Serialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn serialize(self) -> [Field; KEY_VALIDATION_REQUEST_LENGTH] {\n [\n self.pk_m.x,\n self.pk_m.y,\n self.pk_m.is_infinite as Field,\n self.sk_app\n ]\n }\n}\n\nimpl Deserialize<KEY_VALIDATION_REQUEST_LENGTH> for KeyValidationRequest {\n fn deserialize(fields: [Field; KEY_VALIDATION_REQUEST_LENGTH]) -> Self {\n Self { pk_m: Point { x: fields[0], y: fields[1], is_infinite: fields[2] as bool }, sk_app: fields[3] }\n }\n}\n"},"24":{"path":"std/embedded_curve_ops.nr","source":"use crate::ops::arith::{Add, Sub, Neg};\nuse crate::cmp::Eq;\n\n/// A point on the embedded elliptic curve\n/// By definition, the base field of the embedded curve is the scalar field of the proof system curve, i.e the Noir Field.\n/// x and y denotes the Weierstrass coordinates of the point, if is_infinite is false.\npub struct EmbeddedCurvePoint {\n x: Field,\n y: Field,\n is_infinite: bool\n}\n\nimpl EmbeddedCurvePoint {\n /// Elliptic curve point doubling operation\n /// returns the doubled point of a point P, i.e P+P\n fn double(self) -> EmbeddedCurvePoint {\n embedded_curve_add(self, self)\n }\n\n /// Returns the null element of the curve; 'the point at infinity'\n fn point_at_infinity() -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n }\n}\n\nimpl Add for EmbeddedCurvePoint {\n /// Adds two points P+Q, using the curve addition formula, and also handles point at infinity\n fn add(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n embedded_curve_add(self, other)\n }\n}\n\nimpl Sub for EmbeddedCurvePoint {\n /// Points subtraction operation, using addition and negation\n fn sub(self, other: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n self + other.neg()\n }\n}\n\nimpl Neg for EmbeddedCurvePoint {\n /// Negates a point P, i.e returns -P, by negating the y coordinate.\n /// If the point is at infinity, then the result is also at infinity.\n fn neg(self) -> EmbeddedCurvePoint {\n EmbeddedCurvePoint { x: self.x, y: -self.y, is_infinite: self.is_infinite }\n }\n}\n\nimpl Eq for EmbeddedCurvePoint {\n /// Checks whether two points are equal\n fn eq(self: Self, b: EmbeddedCurvePoint) -> bool {\n (self.is_infinite & b.is_infinite)\n | ((self.is_infinite == b.is_infinite) & (self.x == b.x) & (self.y == b.y))\n }\n}\n\n/// Scalar for the embedded curve represented as low and high limbs\n/// By definition, the scalar field of the embedded curve is base field of the proving system curve.\n/// It may not fit into a Field element, so it is represented with two Field elements; its low and high limbs.\npub struct EmbeddedCurveScalar {\n lo: Field,\n hi: Field,\n}\n\nimpl EmbeddedCurveScalar {\n pub fn new(lo: Field, hi: Field) -> Self {\n EmbeddedCurveScalar { lo, hi }\n }\n\n #[field(bn254)]\n fn from_field(scalar: Field) -> EmbeddedCurveScalar {\n let (a,b) = crate::field::bn254::decompose(scalar);\n EmbeddedCurveScalar { lo: a, hi: b }\n }\n\n //Bytes to scalar: take the first (after the specified offset) 16 bytes of the input as the lo value, and the next 16 bytes as the hi value\n #[field(bn254)]\n fn from_bytes(bytes: [u8; 64], offset: u32) -> EmbeddedCurveScalar {\n let mut v = 1;\n let mut lo = 0 as Field;\n let mut hi = 0 as Field;\n for i in 0..16 {\n lo = lo + (bytes[offset+31 - i] as Field) * v;\n hi = hi + (bytes[offset+15 - i] as Field) * v;\n v = v * 256;\n }\n let sig_s = crate::embedded_curve_ops::EmbeddedCurveScalar { lo, hi };\n sig_s\n }\n}\n\nimpl Eq for EmbeddedCurveScalar {\n fn eq(self, other: Self) -> bool {\n (other.hi == self.hi) & (other.lo == self.lo)\n }\n}\n\n// Computes a multi scalar multiplication over the embedded curve.\n// For bn254, We have Grumpkin and Baby JubJub.\n// For bls12-381, we have JubJub and Bandersnatch.\n//\n// The embedded curve being used is decided by the \n// underlying proof system.\n// docs:start:multi_scalar_mul\npub fn multi_scalar_mul<let N: u32>(\n points: [EmbeddedCurvePoint; N],\n scalars: [EmbeddedCurveScalar; N]\n) -> EmbeddedCurvePoint\n// docs:end:multi_scalar_mul\n{\n let point_array = multi_scalar_mul_array_return(points, scalars);\n EmbeddedCurvePoint { x: point_array[0], y: point_array[1], is_infinite: point_array[2] as bool }\n}\n\n#[foreign(multi_scalar_mul)]\nfn multi_scalar_mul_array_return<let N: u32>(points: [EmbeddedCurvePoint; N], scalars: [EmbeddedCurveScalar; N]) -> [Field; 3] {}\n\n#[foreign(multi_scalar_mul)]\npub(crate) fn multi_scalar_mul_slice(points: [EmbeddedCurvePoint], scalars: [EmbeddedCurveScalar]) -> [Field; 3] {}\n\n// docs:start:fixed_base_scalar_mul\npub fn fixed_base_scalar_mul(scalar: EmbeddedCurveScalar) -> EmbeddedCurvePoint\n// docs:end:fixed_base_scalar_mul\n{\n let g1 = EmbeddedCurvePoint { x: 1, y: 17631683881184975370165255887551781615748388533673675138860, is_infinite: false };\n multi_scalar_mul([g1], [scalar])\n}\n\n/// This function only assumes that the points are on the curve\n/// It handles corner cases around the infinity point causing some overhead compared to embedded_curve_add_not_nul and embedded_curve_add_unsafe\n// This is a hack because returning an `EmbeddedCurvePoint` from a foreign function in brillig returns a [BrilligVariable::SingleAddr; 2] rather than BrilligVariable::BrilligArray\n// as is defined in the brillig bytecode format. This is a workaround which allows us to fix this without modifying the serialization format.\n// docs:start:embedded_curve_add\npub fn embedded_curve_add(point1: EmbeddedCurvePoint, point2: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n // docs:end:embedded_curve_add\n let x_coordinates_match = point1.x == point2.x;\n let y_coordinates_match = point1.y == point2.y;\n let double_predicate = (x_coordinates_match & y_coordinates_match);\n let infinity_predicate = (x_coordinates_match & !y_coordinates_match);\n let point1_1 = EmbeddedCurvePoint { x: point1.x + (x_coordinates_match as Field), y: point1.y, is_infinite: x_coordinates_match };\n // point1_1 is guaranteed to have a different abscissa than point2\n let mut result = embedded_curve_add_unsafe(point1_1, point2);\n result.is_infinite = x_coordinates_match;\n\n // dbl if x_match, y_match\n let double = embedded_curve_add_unsafe(point1, point1);\n result = if double_predicate { double } else { result };\n\n // infinity if x_match, !y_match\n if point1.is_infinite {\n result= point2;\n }\n if point2.is_infinite {\n result = point1;\n }\n let mut result_is_infinity = infinity_predicate & (!point1.is_infinite & !point2.is_infinite);\n result.is_infinite = result_is_infinity | (point1.is_infinite & point2.is_infinite);\n result\n}\n\n#[foreign(embedded_curve_add)]\nfn embedded_curve_add_array_return(_point1: EmbeddedCurvePoint, _point2: EmbeddedCurvePoint) -> [Field; 3] {}\n\n/// This function assumes that:\n/// The points are on the curve, and\n/// The points don't share an x-coordinate, and\n/// Neither point is the infinity point.\n/// If it is used with correct input, the function ensures the correct non-zero result is returned.\n/// Except for points on the curve, the other assumptions are checked by the function. It will cause assertion failure if they are not respected.\npub fn embedded_curve_add_not_nul(point1: EmbeddedCurvePoint, point2: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n assert(point1.x != point2.x);\n assert(!point1.is_infinite);\n assert(!point2.is_infinite);\n embedded_curve_add_unsafe(point1, point2)\n}\n\n/// Unsafe ec addition\n/// If the inputs are the same, it will perform a doubling, but only if point1 and point2 are the same variable.\n/// If they have the same value but are different variables, the result will be incorrect because in this case\n/// it assumes (but does not check) that the points' x-coordinates are not equal.\n/// It also assumes neither point is the infinity point.\npub fn embedded_curve_add_unsafe(point1: EmbeddedCurvePoint, point2: EmbeddedCurvePoint) -> EmbeddedCurvePoint {\n let point_array = embedded_curve_add_array_return(point1, point2);\n let x = point_array[0];\n let y = point_array[1];\n\n EmbeddedCurvePoint { x, y, is_infinite: false }\n}\n"},"25":{"path":"std/field/bn254.nr","source":"use crate::runtime::is_unconstrained;\n\n// The low and high decomposition of the field modulus\nglobal PLO: Field = 53438638232309528389504892708671455233;\nglobal PHI: Field = 64323764613183177041862057485226039389;\n\nglobal TWO_POW_128: Field = 0x100000000000000000000000000000000;\n\n// Decomposes a single field into two 16 byte fields.\nfn compute_decomposition(x: Field) -> (Field, Field) {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n\n let mut low: Field = 0;\n let mut high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n low += (x_bytes[i] as Field) * offset;\n high += (x_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n\n (low, high)\n}\n\nunconstrained pub(crate) fn decompose_hint(x: Field) -> (Field, Field) {\n compute_decomposition(x)\n}\n\nfn compute_lt(x: Field, y: Field, num_bytes: u32) -> bool {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..num_bytes {\n if (!done) {\n let x_byte = x_bytes[num_bytes - 1 - i];\n let y_byte = y_bytes[num_bytes - 1 - i];\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nfn compute_lte(x: Field, y: Field, num_bytes: u32) -> bool {\n if x == y {\n true\n } else {\n compute_lt(x, y, num_bytes)\n }\n}\n\nunconstrained fn lt_32_hint(x: Field, y: Field) -> bool {\n compute_lt(x, y, 32)\n}\n\nunconstrained fn lte_16_hint(x: Field, y: Field) -> bool {\n compute_lte(x, y, 16)\n}\n\n// Assert that (alo > blo && ahi >= bhi) || (alo <= blo && ahi > bhi)\nfn assert_gt_limbs(a: (Field, Field), b: (Field, Field)) {\n let (alo, ahi) = a;\n let (blo, bhi) = b;\n unsafe {\n let borrow = lte_16_hint(alo, blo);\n\n let rlo = alo - blo - 1 + (borrow as Field) * TWO_POW_128;\n let rhi = ahi - bhi - (borrow as Field);\n\n rlo.assert_max_bit_size(128);\n rhi.assert_max_bit_size(128);\n }\n}\n\n/// Decompose a single field into two 16 byte fields.\npub fn decompose(x: Field) -> (Field, Field) {\n if is_unconstrained() {\n compute_decomposition(x)\n } else {\n unsafe {\n // Take hints of the decomposition\n let (xlo, xhi) = decompose_hint(x);\n\n // Range check the limbs\n xlo.assert_max_bit_size(128);\n xhi.assert_max_bit_size(128);\n\n // Check that the decomposition is correct\n assert_eq(x, xlo + TWO_POW_128 * xhi);\n\n // Assert that the decomposition of P is greater than the decomposition of x\n assert_gt_limbs((PLO, PHI), (xlo, xhi));\n (xlo, xhi)\n }\n }\n}\n\npub fn assert_gt(a: Field, b: Field) {\n if is_unconstrained() {\n assert(compute_lt(b, a, 32));\n } else {\n // Decompose a and b\n let a_limbs = decompose(a);\n let b_limbs = decompose(b);\n\n // Assert that a_limbs is greater than b_limbs\n assert_gt_limbs(a_limbs, b_limbs)\n }\n}\n\npub fn assert_lt(a: Field, b: Field) {\n assert_gt(b, a);\n}\n\npub fn gt(a: Field, b: Field) -> bool {\n if is_unconstrained() {\n compute_lt(b, a, 32)\n } else if a == b {\n false\n } else {\n // Take a hint of the comparison and verify it\n unsafe {\n if lt_32_hint(a, b) {\n assert_gt(b, a);\n false\n } else {\n assert_gt(a, b);\n true\n }\n }\n }\n}\n\npub fn lt(a: Field, b: Field) -> bool {\n gt(b, a)\n}\n\nmod tests {\n // TODO: Allow imports from \"super\"\n use crate::field::bn254::{decompose, compute_lt, assert_gt, gt, TWO_POW_128, compute_lte, PLO, PHI};\n\n #[test]\n fn check_decompose() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n unconstrained fn check_decompose_unconstrained() {\n assert_eq(decompose(TWO_POW_128), (0, 1));\n assert_eq(decompose(TWO_POW_128 + 0x1234567890), (0x1234567890, 1));\n assert_eq(decompose(0x1234567890), (0x1234567890, 0));\n }\n\n #[test]\n fn check_compute_lt() {\n assert(compute_lt(0, 1, 16));\n assert(compute_lt(0, 0x100, 16));\n assert(compute_lt(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lt(0, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_compute_lte() {\n assert(compute_lte(0, 1, 16));\n assert(compute_lte(0, 0x100, 16));\n assert(compute_lte(0x100, TWO_POW_128 - 1, 16));\n assert(!compute_lte(0, TWO_POW_128, 16));\n\n assert(compute_lte(0, 0, 16));\n assert(compute_lte(0x100, 0x100, 16));\n assert(compute_lte(TWO_POW_128 - 1, TWO_POW_128 - 1, 16));\n assert(compute_lte(TWO_POW_128, TWO_POW_128, 16));\n }\n\n #[test]\n fn check_assert_gt() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n unconstrained fn check_assert_gt_unconstrained() {\n assert_gt(1, 0);\n assert_gt(0x100, 0);\n assert_gt((0 - 1), (0 - 2));\n assert_gt(TWO_POW_128, 0);\n assert_gt(0 - 1, 0);\n }\n\n #[test]\n fn check_gt() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n unconstrained fn check_gt_unconstrained() {\n assert(gt(1, 0));\n assert(gt(0x100, 0));\n assert(gt((0 - 1), (0 - 2)));\n assert(gt(TWO_POW_128, 0));\n assert(!gt(0, 0));\n assert(!gt(0, 0x100));\n assert(gt(0 - 1, 0 - 2));\n assert(!gt(0 - 2, 0 - 1));\n }\n\n #[test]\n fn check_plo_phi() {\n assert_eq(PLO + PHI * TWO_POW_128, 0);\n let p_bytes = crate::field::modulus_le_bytes();\n let mut p_low: Field = 0;\n let mut p_high: Field = 0;\n\n let mut offset = 1;\n for i in 0..16 {\n p_low += (p_bytes[i] as Field) * offset;\n p_high += (p_bytes[i + 16] as Field) * offset;\n offset *= 256;\n }\n assert_eq(p_low, PLO);\n assert_eq(p_high, PHI);\n }\n}\n"},"26":{"path":"std/field/mod.nr","source":"mod bn254;\nuse bn254::lt as bn254_lt;\n\nimpl Field {\n /// Asserts that `self` can be represented in `bit_size` bits.\n ///\n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{bit_size}`.\n // docs:start:assert_max_bit_size\n pub fn assert_max_bit_size(self, bit_size: u32) {\n // docs:end:assert_max_bit_size\n crate::assert_constant(bit_size);\n assert(bit_size < modulus_num_bits() as u32);\n self.__assert_max_bit_size(bit_size);\n }\n\n #[builtin(apply_range_constraint)]\n fn __assert_max_bit_size(self, bit_size: u32) {}\n\n /// Decomposes `self` into its little endian bit decomposition as a `[u1; N]` array.\n /// This slice will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_le_bits)]\n // docs:start:to_le_bits\n pub fn to_le_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_le_bits\n\n /// Decomposes `self` into its big endian bit decomposition as a `[u1; N]` array.\n /// This array will be zero padded should not all bits be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^N` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `N` equal to or greater than the number of bits necessary to represent the `Field` modulus\n /// (e.g. 254 for the BN254 field) allow for multiple bit decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n #[builtin(to_be_bits)]\n // docs:start:to_be_bits\n pub fn to_be_bits<let N: u32>(self: Self) -> [u1; N] {}\n // docs:end:to_be_bits\n\n /// Decomposes `self` into its little endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_le_bytes\n pub fn to_le_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_le_radix(256)\n }\n // docs:end:to_le_bytes\n\n /// Decomposes `self` into its big endian byte decomposition as a `[u8]` slice of length `byte_size`.\n /// This slice will be zero padded should not all bytes be necessary to represent `self`.\n /// \n /// # Failures\n /// Causes a constraint failure for `Field` values exceeding `2^{8*byte_size}` as the resulting slice will not\n /// be able to represent the original `Field`.\n ///\n /// # Safety\n /// Values of `byte_size` equal to or greater than the number of bytes necessary to represent the `Field` modulus\n /// (e.g. 32 for the BN254 field) allow for multiple byte decompositions. This is due to how the `Field` will\n /// wrap around due to overflow when verifying the decomposition.\n // docs:start:to_be_bytes\n pub fn to_be_bytes<let N: u32>(self: Self) -> [u8; N] {\n self.to_be_radix(256)\n }\n // docs:end:to_be_bytes\n\n // docs:start:to_le_radix\n pub fn to_le_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_le_radix(radix)\n }\n // docs:end:to_le_radix\n\n // docs:start:to_be_radix\n pub fn to_be_radix<let N: u32>(self: Self, radix: u32) -> [u8; N] {\n crate::assert_constant(radix);\n self.__to_be_radix(radix)\n }\n // docs:end:to_be_radix\n\n // `_radix` must be less than 256\n #[builtin(to_le_radix)]\n fn __to_le_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n #[builtin(to_be_radix)]\n fn __to_be_radix<let N: u32>(self, radix: u32) -> [u8; N] {}\n\n // Returns self to the power of the given exponent value.\n // Caution: we assume the exponent fits into 32 bits\n // using a bigger bit size impacts negatively the performance and should be done only if the exponent does not fit in 32 bits\n pub fn pow_32(self, exponent: Field) -> Field {\n let mut r: Field = 1;\n let b: [u1; 32] = exponent.to_le_bits();\n\n for i in 1..33 {\n r *= r;\n r = (b[32-i] as Field) * (r * self) + (1 - b[32-i] as Field) * r;\n }\n r\n }\n\n // Parity of (prime) Field element, i.e. sgn0(x mod p) = 0 if x `elem` {0, ..., p-1} is even, otherwise sgn0(x mod p) = 1.\n pub fn sgn0(self) -> u1 {\n self as u1\n }\n\n pub fn lt(self, another: Field) -> bool {\n if crate::compat::is_bn254() {\n bn254_lt(self, another)\n } else {\n lt_fallback(self, another)\n }\n }\n}\n\n#[builtin(modulus_num_bits)]\npub comptime fn modulus_num_bits() -> u64 {}\n\n#[builtin(modulus_be_bits)]\npub comptime fn modulus_be_bits() -> [u1] {}\n\n#[builtin(modulus_le_bits)]\npub comptime fn modulus_le_bits() -> [u1] {}\n\n#[builtin(modulus_be_bytes)]\npub comptime fn modulus_be_bytes() -> [u8] {}\n\n#[builtin(modulus_le_bytes)]\npub comptime fn modulus_le_bytes() -> [u8] {}\n\n// Convert a 32 byte array to a field element by modding\npub fn bytes32_to_field(bytes32: [u8; 32]) -> Field {\n // Convert it to a field element\n let mut v = 1;\n let mut high = 0 as Field;\n let mut low = 0 as Field;\n\n for i in 0..16 {\n high = high + (bytes32[15 - i] as Field) * v;\n low = low + (bytes32[16 + 15 - i] as Field) * v;\n v = v * 256;\n }\n // Abuse that a % p + b % p = (a + b) % p and that low < p\n low + high * v\n}\n\nfn lt_fallback(x: Field, y: Field) -> bool {\n let x_bytes: [u8; 32] = x.to_le_bytes();\n let y_bytes: [u8; 32] = y.to_le_bytes();\n let mut x_is_lt = false;\n let mut done = false;\n for i in 0..32 {\n if (!done) {\n let x_byte = x_bytes[32 - 1 - i] as u8;\n let y_byte = y_bytes[32 - 1 - i] as u8;\n let bytes_match = x_byte == y_byte;\n if !bytes_match {\n x_is_lt = x_byte < y_byte;\n done = true;\n }\n }\n }\n x_is_lt\n}\n\nmod tests {\n #[test]\n // docs:start:to_be_bits_example\n fn test_to_be_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_be_bits();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 1, 0]);\n }\n // docs:end:to_be_bits_example\n\n #[test]\n // docs:start:to_le_bits_example\n fn test_to_le_bits() {\n let field = 2;\n let bits: [u1; 8] = field.to_le_bits();\n assert_eq(bits, [0, 1, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bits_example\n\n #[test]\n // docs:start:to_be_bytes_example\n fn test_to_be_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_bytes();\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_bytes_example\n\n #[test]\n // docs:start:to_le_bytes_example\n fn test_to_le_bytes() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_bytes();\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_bytes_example\n\n #[test]\n // docs:start:to_be_radix_example\n fn test_to_be_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_be_radix(256);\n assert_eq(bits, [0, 0, 0, 0, 0, 0, 0, 2]);\n }\n // docs:end:to_be_radix_example\n\n #[test]\n // docs:start:to_le_radix_example\n fn test_to_le_radix() {\n let field = 2;\n let bits: [u8; 8] = field.to_le_radix(256);\n assert_eq(bits, [2, 0, 0, 0, 0, 0, 0, 0]);\n }\n // docs:end:to_le_radix_example\n}\n"},"273":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/traits.nr","source":"use crate::utils::field::field_from_bytes;\nuse crate::meta::{derive_deserialize, derive_serialize};\n\n// Trait: is_empty\n//\n// The general is_empty trait checks if a data type is is empty,\n// and it defines empty for the basic data types as 0.\n//\n// If a Field is equal to zero, then it is regarded as zero.\n// We will go with this definition for now, however it can be problematic\n// if a value can actually be zero. In a future refactor, we can\n// use the optional type for safety. Doing it now would lead to a worse devex\n// and would make it harder to sync up with the cpp code.\n// Preferred over Default trait to convey intent, as default doesn't necessarily mean empty.\npub trait Empty {\n fn empty() -> Self;\n}\n\nimpl Empty for Field {\n fn empty() -> Self {\n 0\n }\n}\n\nimpl Empty for u1 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u8 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u32 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for u64 {\n fn empty() -> Self {\n 0\n }\n}\nimpl Empty for U128 {\n fn empty() -> Self {\n U128::from_integer(0)\n }\n}\n\npub fn is_empty<T>(item: T) -> bool where T: Empty + Eq {\n item.eq(T::empty())\n}\n\npub fn is_empty_array<T, let N: u32>(array: [T; N]) -> bool where T: Empty + Eq {\n array.all(|elem| is_empty(elem))\n}\n\npub trait Hash {\n fn hash(self) -> Field;\n}\n\npub trait ToField {\n fn to_field(self) -> Field;\n}\n\nimpl ToField for Field {\n fn to_field(self) -> Field {\n self\n }\n}\n\nimpl ToField for bool {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u1 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u8 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u32 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for u64 {\n fn to_field(self) -> Field {\n self as Field\n }\n}\nimpl ToField for U128 {\n fn to_field(self) -> Field {\n self.to_integer()\n }\n}\nimpl<let N: u32> ToField for str<N> {\n fn to_field(self) -> Field {\n assert(N < 32, \"String doesn't fit in a field, consider using Serialize instead\");\n field_from_bytes(self.as_bytes(), true)\n }\n}\n\npub trait FromField {\n fn from_field(value: Field) -> Self;\n}\n\nimpl FromField for Field {\n fn from_field(value: Field) -> Self {\n value\n }\n}\n\nimpl FromField for bool {\n fn from_field(value: Field) -> Self {\n value as bool\n }\n}\nimpl FromField for u1 {\n fn from_field(value: Field) -> Self {\n value as u1\n }\n}\nimpl FromField for u8 {\n fn from_field(value: Field) -> Self {\n value as u8\n }\n}\nimpl FromField for u32 {\n fn from_field(value: Field) -> Self {\n value as u32\n }\n}\nimpl FromField for u64 {\n fn from_field(value: Field) -> Self {\n value as u64\n }\n}\nimpl FromField for U128 {\n fn from_field(value: Field) -> Self {\n U128::from_integer(value)\n }\n}\n\n// docs:start:serialize\n#[derive_via(derive_serialize)]\npub trait Serialize<let N: u32> {\n fn serialize(self) -> [Field; N];\n}\n// docs:end:serialize\n\nimpl<let N: u32> Serialize<N> for [Field; N] {\n fn serialize(self) -> [Field; N] {\n self\n }\n}\n\nimpl<let N: u32> Serialize<N> for str<N> {\n fn serialize(self) -> [Field; N] {\n let bytes = self.as_bytes();\n let mut fields = [0; N];\n for i in 0..bytes.len() {\n fields[i] = bytes[i] as Field;\n }\n fields\n }\n}\n\n// docs:start:deserialize\n#[derive_via(derive_deserialize)]\npub trait Deserialize<let N: u32> {\n fn deserialize(fields: [Field; N]) -> Self;\n}\n// docs:end:deserialize\n\nimpl<let N: u32> Deserialize<N> for [Field; N] {\n fn deserialize(fields: [Field; N]) -> Self {\n fields\n }\n}\n"},"274":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/debug_log.nr","source":"// Utility function to console.log data in the acir simulator\n// WARNING: sometimes when using debug logs the ACVM errors with: `thrown: \"solver opcode resolution error: cannot solve opcode: expression has too many unknowns x155\"`\n\n#[oracle(debugLog)]\nunconstrained fn debug_log_oracle<let M: u32>(_msg: str<M>, args: [Field]) {}\n\n/// NOTE: call this with a str<N> msg of form\n/// \"some string with {0} and {1} ... {N}\"\n/// and an array of N field which will be formatted\n/// into the string in the simulator.\n/// Example:\n/// debug_log_format(\"get_2(slot:{0}) =>\\n\\t0:{1}\\n\\t1:{2}\", [storage_slot, note0_hash, note1_hash]);\n/// debug_log_format(\"whole array: {}\", [e1, e2, e3, e4]);\nunconstrained pub fn debug_log_format<let M: u32, let N: u32>(msg: str<M>, args: [Field; N]) {\n debug_log_oracle(msg, args.as_slice());\n}\n\n/// NOTE: call this with a str<N> msg of length > 1\n/// Example:\n/// `debug_log(\"blah blah this is a debug string\");`\nunconstrained pub fn debug_log<let N: u32>(msg: str<N>) {\n debug_log_format(msg, []);\n}\n"},"278":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/hash.nr","source":"use crate::{\n abis::{\n contract_class_function_leaf_preimage::ContractClassFunctionLeafPreimage,\n function_selector::FunctionSelector, log_hash::{LogHash, ScopedLogHash, ScopedEncryptedLogHash},\n note_hash::ScopedNoteHash, nullifier::ScopedNullifier\n},\n address::{AztecAddress, EthAddress},\n constants::{\n FUNCTION_TREE_HEIGHT, GENERATOR_INDEX__SILOED_NOTE_HASH, GENERATOR_INDEX__OUTER_NULLIFIER,\n GENERATOR_INDEX__VK, GENERATOR_INDEX__NOTE_HASH_NONCE, GENERATOR_INDEX__UNIQUE_NOTE_HASH,\n MAX_ENCRYPTED_LOGS_PER_TX, MAX_NOTE_ENCRYPTED_LOGS_PER_TX\n},\n merkle_tree::root::root_from_sibling_path,\n messaging::l2_to_l1_message::{L2ToL1Message, ScopedL2ToL1Message},\n recursion::verification_key::VerificationKey, traits::{is_empty, ToField},\n utils::field::field_from_bytes_32_trunc\n};\nuse super::utils::field::field_from_bytes;\n\npub fn sha256_to_field<let N: u32>(bytes_to_hash: [u8; N]) -> Field {\n let sha256_hashed = std::hash::sha256(bytes_to_hash);\n let hash_in_a_field = field_from_bytes_32_trunc(sha256_hashed);\n\n hash_in_a_field\n}\n\npub fn private_functions_root_from_siblings(\n selector: FunctionSelector,\n vk_hash: Field,\n function_leaf_index: Field,\n function_leaf_sibling_path: [Field; FUNCTION_TREE_HEIGHT]\n) -> Field {\n let function_leaf_preimage = ContractClassFunctionLeafPreimage { selector, vk_hash };\n let function_leaf = function_leaf_preimage.hash();\n root_from_sibling_path(function_leaf, function_leaf_index, function_leaf_sibling_path)\n}\n\nfn compute_note_hash_nonce(tx_hash: Field, note_index_in_tx: u32) -> Field {\n // Hashing tx hash with note index in tx is guaranteed to be unique\n poseidon2_hash_with_separator(\n [\n tx_hash,\n note_index_in_tx as Field\n ],\n GENERATOR_INDEX__NOTE_HASH_NONCE\n )\n}\n\npub fn compute_unique_note_hash(nonce: Field, note_hash: Field) -> Field {\n let inputs = [nonce, note_hash];\n poseidon2_hash_with_separator(inputs, GENERATOR_INDEX__UNIQUE_NOTE_HASH)\n}\n\npub fn compute_siloed_note_hash(app: AztecAddress, unique_note_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n unique_note_hash\n ],\n GENERATOR_INDEX__SILOED_NOTE_HASH\n )\n}\n\n/// Siloing in the context of Aztec refers to the process of hashing a note hash with a contract address (this way\n/// the note hash is scoped to a specific contract). This is used to prevent intermingling of notes between contracts.\npub fn silo_note_hash(note_hash: ScopedNoteHash, tx_hash: Field, note_index_in_tx: u32) -> Field {\n if note_hash.contract_address.is_zero() {\n 0\n } else {\n let nonce = compute_note_hash_nonce(tx_hash, note_index_in_tx);\n let unique_note_hash = compute_unique_note_hash(nonce, note_hash.value());\n compute_siloed_note_hash(note_hash.contract_address, unique_note_hash)\n }\n}\n\npub fn compute_siloed_nullifier(app: AztecAddress, nullifier: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n app.to_field(),\n nullifier\n ],\n GENERATOR_INDEX__OUTER_NULLIFIER\n )\n}\n\npub fn silo_nullifier(nullifier: ScopedNullifier) -> Field {\n if nullifier.contract_address.is_zero() {\n nullifier.value() // Return value instead of 0 because the first nullifier's contract address is zero.\n } else {\n compute_siloed_nullifier(nullifier.contract_address, nullifier.value())\n }\n}\n\npub fn silo_encrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n // We assume contract address has already been masked\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n accumulate_sha256([log_hash.contract_address.to_field(), log_hash.log_hash.value])\n }\n}\n\npub fn mask_encrypted_log_hash(scoped_log: ScopedEncryptedLogHash) -> AztecAddress {\n if scoped_log.contract_address.is_zero() {\n AztecAddress::from_field(0)\n } else if (scoped_log.log_hash.randomness == 0) {\n scoped_log.contract_address\n } else {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [scoped_log.contract_address.to_field(), scoped_log.log_hash.randomness],\n 0\n )\n )\n }\n}\n\nfn compute_siloed_unencrypted_log_hash(address: AztecAddress, log_hash: Field) -> Field {\n accumulate_sha256([address.to_field(), log_hash])\n}\n\npub fn silo_unencrypted_log_hash(log_hash: ScopedLogHash) -> Field {\n if log_hash.contract_address.is_zero() {\n 0\n } else {\n compute_siloed_unencrypted_log_hash(log_hash.contract_address, log_hash.value())\n }\n}\n\npub fn merkle_hash(left: Field, right: Field) -> Field {\n poseidon2_hash([left, right])\n}\n\npub fn stdlib_recursion_verification_key_compress_native_vk(_vk: VerificationKey) -> Field {\n // Original cpp code\n // stdlib::recursion::verification_key<CT::bn254>::compress_native(private_call.vk, GeneratorIndex::VK);\n // The above cpp method is only ever called on verification key, so it has been special cased here\n let _hash_index = GENERATOR_INDEX__VK;\n 0\n}\n\npub fn compute_l2_to_l1_hash(\n contract_address: AztecAddress,\n recipient: EthAddress,\n content: Field,\n rollup_version_id: Field,\n chain_id: Field\n) -> Field {\n let mut bytes: BoundedVec<u8, 160> = BoundedVec::new();\n\n let inputs = [contract_address.to_field(), rollup_version_id, recipient.to_field(), chain_id, content];\n for i in 0..inputs.len() {\n // TODO are bytes be in fr.to_buffer() ?\n let item_bytes: [u8; 32] = inputs[i].to_be_bytes();\n for j in 0..32 {\n bytes.push(item_bytes[j]);\n }\n }\n\n sha256_to_field(bytes.storage)\n}\n\npub fn silo_l2_to_l1_message(msg: ScopedL2ToL1Message, rollup_version_id: Field, chain_id: Field) -> Field {\n if msg.contract_address.is_zero() {\n 0\n } else {\n compute_l2_to_l1_hash(\n msg.contract_address,\n msg.message.recipient,\n msg.message.content,\n rollup_version_id,\n chain_id\n )\n }\n}\n\n// Computes sha256 hash of 2 input hashes.\n//\n// NB: This method now takes in two 31 byte fields - it assumes that any input\n// is the result of a sha_to_field hash and => is truncated\n//\n// TODO(Jan and David): This is used for the encrypted_log hashes.\n// Can we check to see if we can just use hash_to_field or pedersen_compress here?\n//\npub fn accumulate_sha256(input: [Field; 2]) -> Field {\n // This is a note about the cpp code, since it takes an array of Fields\n // instead of a U128.\n // 4 Field elements when converted to bytes will usually\n // occupy 4 * 32 = 128 bytes.\n // However, this function is making the assumption that each Field\n // only occupies 128 bits.\n //\n // TODO(David): This does not seem to be getting guaranteed anywhere in the code?\n\n // Concatentate two fields into 32x2 = 64 bytes\n // accumulate_sha256 assumes that the inputs are pre-truncated 31 byte numbers\n let mut hash_input_flattened = [0; 64];\n for offset in 0..input.len() {\n let input_as_bytes: [u8; 32] = input[offset].to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n\n sha256_to_field(hash_input_flattened)\n}\n\n// Computes the final logs hash for a tx.\n// NB: this assumes MAX_ENCRYPTED_LOGS_PER_TX == MAX_UNENCRYPTED_LOGS_PER_TX\n// to avoid doubling code, since we can't define the byte len to be 32*N directly.\npub fn compute_tx_logs_hash(logs: [LogHash; MAX_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn compute_tx_note_logs_hash(logs: [LogHash; MAX_NOTE_ENCRYPTED_LOGS_PER_TX]) -> Field {\n // Convert each field element into a byte array and append the bytes to `hash_input_flattened`\n let mut hash_input_flattened = [0; MAX_NOTE_ENCRYPTED_LOGS_PER_TX * 32];\n for offset in 0..MAX_NOTE_ENCRYPTED_LOGS_PER_TX {\n let input_as_bytes: [u8; 32] = logs[offset].value.to_be_bytes();\n for byte_index in 0..32 {\n hash_input_flattened[offset * 32 + byte_index] = input_as_bytes[byte_index];\n }\n }\n // Ideally we would push to a slice then hash, but there is no sha_slice\n // Hardcode to 256 bytes for now\n let mut hash = sha256_to_field(hash_input_flattened);\n // Not having a 0 value hash for empty logs causes issues with empty txs\n // used for padding. Returning early is currently unsupported.\n // We always provide sorted logs here, so 0 being empty means all are empty.\n if is_empty(logs[0]) {\n hash = 0;\n }\n hash\n}\n\npub fn pedersen_hash<let N: u32>(inputs: [Field; N], hash_index: u32) -> Field {\n std::hash::pedersen_hash_with_separator(inputs, hash_index)\n}\n\npub fn poseidon2_hash<let N: u32>(inputs: [Field; N]) -> Field {\n std::hash::poseidon2::Poseidon2::hash(inputs, N)\n}\n\n#[no_predicates]\npub fn poseidon2_hash_with_separator<let N: u32, T>(\n inputs: [Field; N],\n separator: T\n) -> Field where T: ToField {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of N + 1\n let in_len = N + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\npub fn poseidon2_hash_with_separator_slice<T>(inputs: [Field], separator: T) -> Field where T: ToField {\n let in_len = inputs.len() + 1;\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n sponge.absorb(separator.to_field());\n\n for i in 0..inputs.len() {\n sponge.absorb(inputs[i]);\n }\n\n sponge.squeeze()\n}\n\n#[no_predicates]\npub fn poseidon2_hash_bytes<let N: u32>(inputs: [u8; N]) -> Field {\n // We manually hash the inputs here, since we cannot express with the type system a constant size inputs array of Math.ceil(N/31)\n let mut in_len = N / 31;\n let mut has_padding = false;\n if N % 31 != 0 {\n in_len += 1;\n has_padding = true;\n }\n\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = std::hash::poseidon2::Poseidon2::new(iv);\n\n let mut current_field = [0; 31];\n for i in 0..inputs.len() {\n let index = i % 31;\n current_field[index] = inputs[i];\n if index == 30 {\n sponge.absorb(field_from_bytes(current_field, false));\n current_field = [0; 31];\n }\n }\n if has_padding {\n sponge.absorb(field_from_bytes(current_field, false));\n }\n\n sponge.squeeze()\n}\n\n#[test]\nfn smoke_sha256_to_field() {\n let full_buffer = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,\n 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,\n 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,\n 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,\n 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,\n 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,\n 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,\n 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159\n ];\n let result = sha256_to_field(full_buffer);\n\n assert(result == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184c7);\n\n // to show correctness of the current ver (truncate one byte) vs old ver (mod full bytes):\n let result_bytes = std::hash::sha256(full_buffer);\n let truncated_field = crate::utils::field::field_from_bytes_32_trunc(result_bytes);\n assert(truncated_field == result);\n let mod_res = result + (result_bytes[31] as Field);\n assert(mod_res == 0x448ebbc9e1a31220a2f3830c18eef61b9bd070e5084b7fa2a359fe729184e0);\n}\n\n#[test]\nfn compute_l2_l1_hash() {\n // All zeroes\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(0), EthAddress::zero(), 0, 0, 0);\n assert(hash_result == 0xb393978842a0fa3d3e1470196f098f473f9678e72463cb65ec4ab5581856c2);\n\n // Non-zero case\n let hash_result = compute_l2_to_l1_hash(AztecAddress::from_field(1), EthAddress::from_field(3), 5, 2, 4);\n assert(hash_result == 0x3f88c1044a05e5340ed20466276500f6d45ca5603913b9091e957161734e16);\n}\n\n#[test]\nfn silo_l2_to_l1_message_matches_typescript() {\n let version = 4;\n let chainId = 5;\n\n let hash = silo_l2_to_l1_message(\n ScopedL2ToL1Message {\n message: L2ToL1Message { recipient: EthAddress::from_field(1), content: 2, counter: 0 },\n contract_address: AztecAddress::from_field(3)\n },\n version,\n chainId\n );\n\n // The following value was generated by `l2_to_l1_message.test.ts`\n let hash_from_typescript = 0x00c6155d69febb9d5039b374dd4f77bf57b7c881709aa524a18acaa0bd57476a;\n\n assert_eq(hash, hash_from_typescript);\n}\n"},"284":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/point.nr","source":"pub use dep::std::embedded_curve_ops::EmbeddedCurvePoint as Point;\nuse crate::{traits::{Deserialize, Empty, Hash, Serialize}, hash::poseidon2_hash};\n\nglobal POINT_LENGTH: u32 = 3;\n\nimpl Serialize<POINT_LENGTH> for Point {\n fn serialize(self: Self) -> [Field; POINT_LENGTH] {\n [self.x, self.y, self.is_infinite as Field]\n }\n}\n\nimpl Hash for Point {\n fn hash(self) -> Field {\n poseidon2_hash(self.serialize())\n }\n}\n\nimpl Empty for Point {\n /// Note: Does not return a valid point on curve - instead represents an empty/\"unpopulated\" point struct (e.g.\n /// empty/unpopulated value in an array of points).\n fn empty() -> Self {\n Point { x: 0, y: 0, is_infinite: false }\n }\n}\n\nimpl Deserialize<POINT_LENGTH> for Point {\n fn deserialize(serialized: [Field; POINT_LENGTH]) -> Point {\n Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool }\n }\n}\n"},"285":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/contract_instance.nr","source":"use crate::{\n address::{aztec_address::AztecAddress, partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n contract_class_id::ContractClassId, constants::CONTRACT_INSTANCE_LENGTH,\n traits::{Deserialize, Hash, Serialize}\n};\n\npub struct ContractInstance {\n salt : Field,\n deployer: AztecAddress,\n contract_class_id : ContractClassId,\n initialization_hash : Field,\n public_keys_hash : PublicKeysHash,\n}\n\nimpl Eq for ContractInstance {\n fn eq(self, other: Self) -> bool {\n self.public_keys_hash.eq(other.public_keys_hash)\n & self.initialization_hash.eq(other.initialization_hash)\n & self.contract_class_id.eq(other.contract_class_id)\n & self.salt.eq(other.salt)\n }\n}\n\nimpl Serialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn serialize(self) -> [Field; CONTRACT_INSTANCE_LENGTH] {\n [\n self.salt,\n self.deployer.to_field(),\n self.contract_class_id.to_field(),\n self.initialization_hash,\n self.public_keys_hash.to_field()\n ]\n }\n}\n\nimpl Deserialize<CONTRACT_INSTANCE_LENGTH> for ContractInstance {\n fn deserialize(serialized: [Field; CONTRACT_INSTANCE_LENGTH]) -> Self {\n Self {\n salt: serialized[0],\n deployer: AztecAddress::from_field(serialized[1]),\n contract_class_id: ContractClassId::from_field(serialized[2]),\n initialization_hash: serialized[3],\n public_keys_hash: PublicKeysHash::from_field(serialized[4])\n }\n }\n}\n\nimpl Hash for ContractInstance {\n fn hash(self) -> Field {\n self.to_address().to_field()\n }\n}\n\nimpl ContractInstance {\n fn to_address(self) -> AztecAddress {\n AztecAddress::compute(\n self.public_keys_hash,\n PartialAddress::compute(\n self.contract_class_id,\n self.salt,\n self.initialization_hash,\n self.deployer\n )\n )\n }\n}\n"},"29":{"path":"std/hash/mod.nr","source":"mod poseidon;\nmod mimc;\nmod poseidon2;\nmod keccak;\nmod sha256;\nmod sha512;\n\nuse crate::default::Default;\nuse crate::uint128::U128;\nuse crate::collections::vec::Vec;\nuse crate::embedded_curve_ops::{EmbeddedCurvePoint, EmbeddedCurveScalar, multi_scalar_mul, multi_scalar_mul_slice};\nuse crate::meta::derive_via;\n\n// Kept for backwards compatibility\npub use sha256::{digest, sha256, sha256_compression, sha256_var};\n\n#[foreign(blake2s)]\n// docs:start:blake2s\npub fn blake2s<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake2s\n{}\n\n#[foreign(blake3)]\n// docs:start:blake3\npub fn blake3<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:blake3\n{}\n\n// docs:start:pedersen_commitment\npub fn pedersen_commitment<let N: u32>(input: [Field; N]) -> EmbeddedCurvePoint {\n // docs:end:pedersen_commitment\n pedersen_commitment_with_separator(input, 0)\n}\n\npub fn pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {\n __pedersen_hash_with_separator(input, separator)\n}\n\nfn pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let value = __pedersen_commitment_with_separator(input, separator);\n if (value[0] == 0) & (value[1] == 0) {\n EmbeddedCurvePoint { x: 0, y: 0, is_infinite: true }\n } else {\n EmbeddedCurvePoint { x: value[0], y: value[1], is_infinite: false }\n }\n}\n\n#[no_predicates]\nfn pedersen_commitment_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> EmbeddedCurvePoint {\n let mut points = [EmbeddedCurveScalar { lo: 0, hi: 0 }; N];\n for i in 0..N {\n // we use the unsafe version because the multi_scalar_mul will constrain the scalars.\n points[i] = from_field_unsafe(input[i]);\n }\n let generators = derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n multi_scalar_mul(generators, points)\n}\n\n#[no_predicates]\nfn pedersen_hash_with_separator_noir<let N: u32>(input: [Field; N], separator: u32) -> Field {\n let mut scalars: Vec<EmbeddedCurveScalar> = Vec::from_slice([EmbeddedCurveScalar { lo: 0, hi: 0 }; N].as_slice()); //Vec::new();\n\n for i in 0..N {\n scalars.set(i, from_field_unsafe(input[i]));\n }\n scalars.push(EmbeddedCurveScalar { lo: N as Field, hi: 0 as Field });\n let domain_generators :[EmbeddedCurvePoint; N]= derive_generators(\"DEFAULT_DOMAIN_SEPARATOR\".as_bytes(), separator);\n let mut vec_generators = Vec::new();\n for i in 0..N {\n vec_generators.push(domain_generators[i]);\n }\n let length_generator : [EmbeddedCurvePoint; 1] = derive_generators(\"pedersen_hash_length\".as_bytes(), 0);\n vec_generators.push(length_generator[0]);\n multi_scalar_mul_slice(vec_generators.slice, scalars.slice)[0]\n}\n\n// docs:start:pedersen_hash\npub fn pedersen_hash<let N: u32>(input: [Field; N]) -> Field\n// docs:end:pedersen_hash\n{\n __pedersen_hash_with_separator(input, 0)\n}\n\n#[foreign(pedersen_hash)]\nfn __pedersen_hash_with_separator<let N: u32>(input: [Field; N], separator: u32) -> Field {}\n\n#[foreign(pedersen_commitment)]\nfn __pedersen_commitment_with_separator<let N: u32>(input: [Field; N], separator: u32) -> [Field; 2] {}\n\n#[field(bn254)]\nfn derive_generators<let N: u32, let M: u32>(domain_separator_bytes: [u8; M], starting_index: u32) -> [EmbeddedCurvePoint; N] {\n crate::assert_constant(domain_separator_bytes);\n // TODO(https://github.com/noir-lang/noir/issues/5672): Add back assert_constant on starting_index\n __derive_generators(domain_separator_bytes, starting_index)\n}\n\n#[builtin(derive_pedersen_generators)]\n#[field(bn254)]\nfn __derive_generators<let N: u32, let M: u32>(\n domain_separator_bytes: [u8; M],\n starting_index: u32\n) -> [EmbeddedCurvePoint; N] {}\n\n#[field(bn254)]\n // Same as from_field but:\n // does not assert the limbs are 128 bits\n // does not assert the decomposition does not overflow the EmbeddedCurveScalar\n fn from_field_unsafe(scalar: Field) -> EmbeddedCurveScalar {\n let (xlo, xhi) = unsafe {\n crate::field::bn254::decompose_hint(scalar)\n };\n // Check that the decomposition is correct\n assert_eq(scalar, xlo + crate::field::bn254::TWO_POW_128 * xhi);\n EmbeddedCurveScalar { lo: xlo, hi: xhi }\n}\n\npub fn hash_to_field(inputs: [Field]) -> Field {\n let mut sum = 0;\n\n for input in inputs {\n let input_bytes: [u8; 32] = input.to_le_bytes();\n sum += crate::field::bytes32_to_field(blake2s(input_bytes));\n }\n\n sum\n}\n\n// docs:start:keccak256\npub fn keccak256<let N: u32>(input: [u8; N], message_size: u32) -> [u8; 32]\n// docs:end:keccak256\n{\n crate::hash::keccak::keccak256(input, message_size)\n}\n\n#[foreign(poseidon2_permutation)]\npub fn poseidon2_permutation<let N: u32>(_input: [Field; N], _state_length: u32) -> [Field; N] {}\n\n// Generic hashing support.\n// Partially ported and impacted by rust.\n\n// Hash trait shall be implemented per type.\n#[derive_via(derive_hash)]\npub trait Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher;\n}\n\n// docs:start:derive_hash\ncomptime fn derive_hash(s: StructDefinition) -> Quoted {\n let name = quote { Hash };\n let signature = quote { fn hash<H>(_self: Self, _state: &mut H) where H: std::hash::Hasher };\n let for_each_field = |name| quote { _self.$name.hash(_state); };\n crate::meta::make_trait_impl(s, name, signature, for_each_field, quote {}, |fields| fields)\n}\n// docs:end:derive_hash\n\n// Hasher trait shall be implemented by algorithms to provide hash-agnostic means.\n// TODO: consider making the types generic here ([u8], [Field], etc.)\npub trait Hasher {\n fn finish(self) -> Field;\n\n fn write(&mut self, input: Field);\n}\n\n// BuildHasher is a factory trait, responsible for production of specific Hasher.\npub trait BuildHasher<H> where H: Hasher {\n fn build_hasher(self) -> H;\n}\n\npub struct BuildHasherDefault<H>;\n\nimpl<H> BuildHasher<H> for BuildHasherDefault<H>\nwhere\n H: Hasher + Default {\n fn build_hasher(_self: Self) -> H {\n H::default()\n }\n}\n\nimpl<H> Default for BuildHasherDefault<H>\nwhere\n H: Hasher + Default {\n fn default() -> Self {\n BuildHasherDefault {}\n }\n}\n\nimpl Hash for Field {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self);\n }\n}\n\nimpl Hash for u1 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u8 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u16 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u32 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for u64 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i8 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i16 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i32 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for i64 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for bool {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self as Field);\n }\n}\n\nimpl Hash for () {\n fn hash<H>(_self: Self, _state: &mut H) where H: Hasher {}\n}\n\nimpl Hash for U128 {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n H::write(state, self.lo as Field);\n H::write(state, self.hi as Field);\n }\n}\n\nimpl<T, let N: u32> Hash for [T; N] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<T> Hash for [T] where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.len().hash(state);\n for elem in self {\n elem.hash(state);\n }\n }\n}\n\nimpl<A, B> Hash for (A, B) where A: Hash, B: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.0.hash(state);\n self.1.hash(state);\n }\n}\n\nimpl<A, B, C> Hash for (A, B, C) where A: Hash, B: Hash, C: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n }\n}\n\nimpl<A, B, C, D> Hash for (A, B, C, D) where A: Hash, B: Hash, C: Hash, D: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n }\n}\n\nimpl<A, B, C, D, E> Hash for (A, B, C, D, E) where A: Hash, B: Hash, C: Hash, D: Hash, E: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self.0.hash(state);\n self.1.hash(state);\n self.2.hash(state);\n self.3.hash(state);\n self.4.hash(state);\n }\n}\n\n// Some test vectors for Pedersen hash and Pedersen Commitment.\n// They have been generated using the same functions so the tests are for now useless\n// but they will be useful when we switch to Noir implementation.\n#[test]\nfn assert_pedersen() {\n assert_eq(\n pedersen_hash_with_separator([1], 1), 0x1b3f4b1a83092a13d8d1a59f7acb62aba15e7002f4440f2275edb99ebbc2305f\n );\n assert_eq(\n pedersen_commitment_with_separator([1], 1), EmbeddedCurvePoint {\n x: 0x054aa86a73cb8a34525e5bbed6e43ba1198e860f5f3950268f71df4591bde402,\n y: 0x209dcfbf2cfb57f9f6046f44d71ac6faf87254afc7407c04eb621a6287cac126,\n is_infinite: false\n }\n );\n\n assert_eq(\n pedersen_hash_with_separator([1, 2], 2), 0x26691c129448e9ace0c66d11f0a16d9014a9e8498ee78f4d69f0083168188255\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2], 2), EmbeddedCurvePoint {\n x: 0x2e2b3b191e49541fe468ec6877721d445dcaffe41728df0a0eafeb15e87b0753,\n y: 0x2ff4482400ad3a6228be17a2af33e2bcdf41be04795f9782bd96efe7e24f8778,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3], 3), 0x0bc694b7a1f8d10d2d8987d07433f26bd616a2d351bc79a3c540d85b6206dbe4\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3], 3), EmbeddedCurvePoint {\n x: 0x1fee4e8cf8d2f527caa2684236b07c4b1bad7342c01b0f75e9a877a71827dc85,\n y: 0x2f9fedb9a090697ab69bf04c8bc15f7385b3e4b68c849c1536e5ae15ff138fd1,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4], 4), 0xdae10fb32a8408521803905981a2b300d6a35e40e798743e9322b223a5eddc\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4], 4), EmbeddedCurvePoint {\n x: 0x07ae3e202811e1fca39c2d81eabe6f79183978e6f12be0d3b8eda095b79bdbc9,\n y: 0x0afc6f892593db6fbba60f2da558517e279e0ae04f95758587760ba193145014,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5], 5), 0xfc375b062c4f4f0150f7100dfb8d9b72a6d28582dd9512390b0497cdad9c22\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5], 5), EmbeddedCurvePoint {\n x: 0x1754b12bd475a6984a1094b5109eeca9838f4f81ac89c5f0a41dbce53189bb29,\n y: 0x2da030e3cfcdc7ddad80eaf2599df6692cae0717d4e9f7bfbee8d073d5d278f7,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6], 6), 0x1696ed13dc2730062a98ac9d8f9de0661bb98829c7582f699d0273b18c86a572\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6], 6), EmbeddedCurvePoint {\n x: 0x190f6c0e97ad83e1e28da22a98aae156da083c5a4100e929b77e750d3106a697,\n y: 0x1f4b60f34ef91221a0b49756fa0705da93311a61af73d37a0c458877706616fb,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7], 7), 0x128c0ff144fc66b6cb60eeac8a38e23da52992fc427b92397a7dffd71c45ede3\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7], 7), EmbeddedCurvePoint {\n x: 0x015441e9d29491b06563fac16fc76abf7a9534c715421d0de85d20dbe2965939,\n y: 0x1d2575b0276f4e9087e6e07c2cb75aa1baafad127af4be5918ef8a2ef2fea8fc,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), 0x2f960e117482044dfc99d12fece2ef6862fba9242be4846c7c9a3e854325a55c\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8], 8), EmbeddedCurvePoint {\n x: 0x1657737676968887fceb6dd516382ea13b3a2c557f509811cd86d5d1199bc443,\n y: 0x1f39f0cb569040105fa1e2f156521e8b8e08261e635a2b210bdc94e8d6d65f77,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), 0x0c96db0790602dcb166cc4699e2d306c479a76926b81c2cb2aaa92d249ec7be7\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9], 9), EmbeddedCurvePoint {\n x: 0x0a3ceae42d14914a432aa60ec7fded4af7dad7dd4acdbf2908452675ec67e06d,\n y: 0xfc19761eaaf621ad4aec9a8b2e84a4eceffdba78f60f8b9391b0bd9345a2f2,\n is_infinite: false\n }\n );\n assert_eq(\n pedersen_hash_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), 0x2cd37505871bc460a62ea1e63c7fe51149df5d0801302cf1cbc48beb8dff7e94\n );\n assert_eq(\n pedersen_commitment_with_separator([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 10), EmbeddedCurvePoint {\n x: 0x2fb3f8b3d41ddde007c8c3c62550f9a9380ee546fcc639ffbb3fd30c8d8de30c,\n y: 0x300783be23c446b11a4c0fabf6c91af148937cea15fcf5fb054abf7f752ee245,\n is_infinite: false\n }\n );\n}\n\n"},"3":{"path":"std/array/mod.nr","source":"use crate::cmp::{Eq, Ord};\nuse crate::convert::From;\nuse crate::runtime::is_unconstrained;\n\nmod check_shuffle;\nmod quicksort;\n\nimpl<T, let N: u32> [T; N] {\n /// Returns the length of this array.\n /// \n /// ```noir\n /// fn len(self) -> Field\n /// ```\n /// \n /// example\n /// \n /// ```noir\n /// fn main() {\n /// let array = [42, 42];\n /// assert(array.len() == 2);\n /// }\n /// ```\n #[builtin(array_len)]\n pub fn len(self) -> u32 {}\n\n /// Returns this array as a slice.\n /// \n /// ```noir\n /// let array = [1, 2];\n /// let slice = array.as_slice();\n /// assert_eq(slice, &[1, 2]);\n /// ```\n #[builtin(as_slice)]\n pub fn as_slice(self) -> [T] {}\n\n /// Applies a function to each element of this array, returning a new array containing the mapped elements.\n /// \n /// Example:\n /// \n /// ```rust\n /// let a = [1, 2, 3];\n /// let b = a.map(|a| a * 2);\n /// assert_eq(b, [2, 4, 6]);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> [U; N] {\n let first_elem = f(self[0]);\n let mut ret = [first_elem; N];\n\n for i in 1..self.len() {\n ret[i] = f(self[i]);\n }\n\n ret\n }\n\n /// Applies a function to each element of the array, returning the final accumulated value. The first\n /// parameter is the initial value.\n /// \n /// This is a left fold, so the given function will be applied to the accumulator and first element of\n /// the array, then the second, and so on. For a given call the expected result would be equivalent to:\n /// \n /// ```rust\n /// let a1 = [1];\n /// let a2 = [1, 2];\n /// let a3 = [1, 2, 3];\n /// \n /// let f = |a, b| a - b;\n /// a1.fold(10, f); //=> f(10, 1)\n /// a2.fold(10, f); //=> f(f(10, 1), 2)\n /// a3.fold(10, f); //=> f(f(f(10, 1), 2), 3)\n /// \n /// assert_eq(a3.fold(10, f), 10 - 1 - 2 - 3);\n /// ```\n pub fn fold<U, Env>(self, mut accumulator: U, f: fn[Env](U, T) -> U) -> U {\n for elem in self {\n accumulator = f(accumulator, elem);\n }\n accumulator\n }\n\n /// Same as fold, but uses the first element as the starting element.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn main() {\n /// let arr = [1, 2, 3, 4];\n /// let reduced = arr.reduce(|a, b| a + b);\n /// assert(reduced == 10);\n /// }\n /// ```\n pub fn reduce<Env>(self, f: fn[Env](T, T) -> T) -> T {\n let mut accumulator = self[0];\n for i in 1..self.len() {\n accumulator = f(accumulator, self[i]);\n }\n accumulator\n }\n\n /// Returns true if all the elements in this array satisfy the given predicate.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 2];\n /// let all = arr.all(|a| a == 2);\n /// assert(all);\n /// }\n /// ```\n pub fn all<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = true;\n for elem in self {\n ret &= predicate(elem);\n }\n ret\n }\n\n /// Returns true if any of the elements in this array satisfy the given predicate.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn main() {\n /// let arr = [2, 2, 2, 2, 5];\n /// let any = arr.any(|a| a == 5);\n /// assert(any);\n /// }\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n for elem in self {\n ret |= predicate(elem);\n }\n ret\n }\n}\n\nimpl<T, let N: u32> [T; N] where T: Ord + Eq {\n /// Returns a new sorted array. The original array remains untouched. Notice that this function will\n /// only work for arrays of fields or integers, not for any arbitrary type. This is because the sorting\n /// logic it uses internally is optimized specifically for these values. If you need a sort function to\n /// sort any type, you should use the `sort_via` function.\n /// \n /// Example:\n /// \n /// ```rust\n /// fn main() {\n /// let arr = [42, 32];\n /// let sorted = arr.sort();\n /// assert(sorted == [32, 42]);\n /// }\n /// ```\n pub fn sort(self) -> Self {\n self.sort_via(|a: T, b: T| a <= b)\n }\n}\n\nimpl<T, let N: u32> [T; N] where T: Eq {\n /// Returns a new sorted array by sorting it with a custom comparison function. \n /// The original array remains untouched. \n /// The ordering function must return true if the first argument should be sorted to be before the second argument or is equal to the second argument.\n /// \n /// Using this method with an operator like `<` that does not return `true` for equal values will result in an assertion failure for arrays with equal elements.\n /// \n /// Example:\n /// \n /// ```rust\n /// fn main() {\n /// let arr = [42, 32]\n /// let sorted_ascending = arr.sort_via(|a, b| a <= b);\n /// assert(sorted_ascending == [32, 42]); // verifies\n /// \n /// let sorted_descending = arr.sort_via(|a, b| a >= b);\n /// assert(sorted_descending == [32, 42]); // does not verify\n /// }\n /// ```\n pub fn sort_via<Env>(self, ordering: fn[Env](T, T) -> bool) -> Self {\n unsafe {\n // Safety: `sorted` array is checked to be:\n // a. a permutation of `input`'s elements\n // b. satisfying the predicate `ordering`\n let sorted = quicksort::quicksort(self, ordering);\n\n if !is_unconstrained() {\n for i in 0..N - 1 {\n assert(\n ordering(sorted[i], sorted[i + 1]), \"Array has not been sorted correctly according to `ordering`.\"\n );\n }\n check_shuffle::check_shuffle(self, sorted);\n }\n sorted\n }\n }\n}\n\nimpl<let N: u32> [u8; N] {\n /// Converts a byte array of type `[u8; N]` to a string. Note that this performs no UTF-8 validation -\n /// the given array is interpreted as-is as a string.\n /// \n /// Example:\n /// \n /// ```rust\n /// fn main() {\n /// let hi = [104, 105].as_str_unchecked();\n /// assert_eq(hi, \"hi\");\n /// }\n /// ```\n #[builtin(array_as_str_unchecked)]\n pub fn as_str_unchecked(self) -> str<N> {}\n}\n\nimpl<let N: u32> From<str<N>> for [u8; N] {\n /// Returns an array of the string bytes.\n fn from(s: str<N>) -> Self {\n s.as_bytes()\n }\n}\n"},"301":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/reader.nr","source":"pub struct Reader<let N: u32> {\n data: [Field; N],\n offset: u32,\n}\n\nimpl<let N: u32> Reader<N> {\n pub fn new(data: [Field; N]) -> Self {\n Self { data, offset: 0 }\n }\n\n pub fn read(&mut self) -> Field {\n let result = self.data[self.offset];\n self.offset += 1;\n result\n }\n\n pub fn read_u32(&mut self) -> u32 {\n self.read() as u32\n }\n\n pub fn read_bool(&mut self) -> bool {\n self.read() as bool\n }\n\n pub fn read_array<let K: u32>(&mut self, mut result: [Field; K]) -> [Field; K] {\n for i in 0..K {\n result[i] = self.data[self.offset + i];\n }\n self.offset += K;\n result\n }\n\n // TODO(#4394)\n pub fn read_struct<T, let K: u32>(&mut self, deserialise: fn([Field; K]) -> T) -> T {\n let result = deserialise(self.read_array([0; K]));\n result\n }\n\n pub fn read_struct_array<T, let K: u32, let C: u32>(&mut self, deserialise: fn([Field; K]) -> T, mut result: [T; C]) -> [T; C] {\n for i in 0..C {\n result[i] = self.read_struct(deserialise);\n }\n result\n }\n\n pub fn finish(self) {\n assert(self.offset == self.data.len(), \"Reader did not read all data\");\n }\n}\n"},"323":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/utils/mod.nr","source":"// general util packages/modules are usually bad practice\n// because there is no criteria for what we should not put in here.\n// Reducing the size of this package would be welcome.\n\nmod arrays;\nmod field;\nmod reader;\nmod uint256;\n\n// if predicate == true then return lhs, else return rhs\npub fn conditional_assign(predicate: bool, lhs: Field, rhs: Field) -> Field {\n if predicate { lhs } else { rhs }\n}\n\npub fn arr_copy_slice<T, let N: u32, let M: u32>(src: [T; N], mut dst: [T; M], offset: u32) -> [T; M] {\n let iterator_len = if N > M { M } else { N };\n for i in 0..iterator_len {\n dst[i] = src[i + offset];\n }\n dst\n}\n"},"337":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/aztec_address.nr","source":"use crate::{\n crate::address::{partial_address::PartialAddress, public_keys_hash::PublicKeysHash},\n constants::{AZTEC_ADDRESS_LENGTH, GENERATOR_INDEX__CONTRACT_ADDRESS_V1},\n hash::poseidon2_hash_with_separator, traits::{Empty, FromField, ToField, Serialize, Deserialize},\n utils\n};\n\n// Aztec address\npub struct AztecAddress {\n inner : Field\n}\n\nimpl Eq for AztecAddress {\n fn eq(self, other: Self) -> bool {\n self.to_field() == other.to_field()\n }\n}\n\nimpl Empty for AztecAddress {\n fn empty() -> Self {\n Self { inner: 0 }\n }\n}\n\nimpl ToField for AztecAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl FromField for AztecAddress {\n fn from_field(value: Field) -> AztecAddress {\n AztecAddress { inner: value }\n }\n}\n\nimpl Serialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn serialize(self: Self) -> [Field; AZTEC_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<AZTEC_ADDRESS_LENGTH> for AztecAddress {\n fn deserialize(fields: [Field; AZTEC_ADDRESS_LENGTH]) -> Self {\n FromField::from_field(fields[0])\n }\n}\n\nimpl AztecAddress {\n pub fn zero() -> Self {\n Self { inner: 0 }\n }\n\n pub fn compute(pub_keys_hash: PublicKeysHash, partial_address: PartialAddress) -> AztecAddress {\n AztecAddress::from_field(\n poseidon2_hash_with_separator(\n [pub_keys_hash.to_field(), partial_address.to_field()],\n GENERATOR_INDEX__CONTRACT_ADDRESS_V1\n )\n )\n }\n\n pub fn is_zero(self) -> bool {\n self.inner == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n\n pub fn conditional_assign(predicate: bool, lhs: Self, rhs: Self) -> Self {\n let result = utils::conditional_assign(predicate, rhs.to_field(), lhs.to_field());\n Self { inner: result }\n }\n}\n\n#[test]\nfn compute_address_from_partial_and_pub_keys_hash() {\n let pub_keys_hash = PublicKeysHash::from_field(1);\n let partial_address = PartialAddress::from_field(2);\n\n let address = AztecAddress::compute(pub_keys_hash, partial_address);\n let expected_computed_address_from_partial_and_pubkey = 0x23ce9be3fa3c846b0f9245cc796902e731d04f086e8a42473bb29e405fc98075;\n assert(address.to_field() == expected_computed_address_from_partial_and_pubkey);\n}\n\n#[test]\nfn from_field_to_field() {\n let address = AztecAddress { inner: 37 };\n assert_eq(FromField::from_field(address.to_field()), address);\n}\n\n#[test]\nfn serde() {\n let address = AztecAddress { inner: 37 };\n assert_eq(Deserialize::deserialize(address.serialize()), address);\n}\n"},"339":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/partial_address.nr","source":"use crate::{\n address::{salted_initialization_hash::SaltedInitializationHash, aztec_address::AztecAddress},\n constants::GENERATOR_INDEX__PARTIAL_ADDRESS, contract_class_id::ContractClassId,\n hash::poseidon2_hash_with_separator, traits::{ToField, Serialize, Deserialize}\n};\n\nglobal PARTIAL_ADDRESS_LENGTH: u32 = 1;\n\n// Partial address\npub struct PartialAddress {\n inner : Field\n}\n\nimpl ToField for PartialAddress {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl Serialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn serialize(self: Self) -> [Field; PARTIAL_ADDRESS_LENGTH] {\n [self.to_field()]\n }\n}\n\nimpl Deserialize<PARTIAL_ADDRESS_LENGTH> for PartialAddress {\n fn deserialize(fields: [Field; PARTIAL_ADDRESS_LENGTH]) -> Self {\n PartialAddress { inner: fields[0] }\n }\n}\n\nimpl PartialAddress {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(\n contract_class_id: ContractClassId,\n salt: Field,\n initialization_hash: Field,\n deployer: AztecAddress\n ) -> Self {\n PartialAddress::compute_from_salted_initialization_hash(\n contract_class_id,\n SaltedInitializationHash::compute(salt, initialization_hash, deployer)\n )\n }\n\n pub fn compute_from_salted_initialization_hash(\n contract_class_id: ContractClassId,\n salted_initialization_hash: SaltedInitializationHash\n ) -> Self {\n PartialAddress::from_field(\n poseidon2_hash_with_separator(\n [\n contract_class_id.to_field(),\n salted_initialization_hash.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn to_field(self) -> Field {\n self.inner\n }\n\n pub fn is_zero(self) -> bool {\n self.to_field() == 0\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"34":{"path":"std/hash/poseidon2.nr","source":"use crate::hash::Hasher;\nuse crate::default::Default;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field;3],\n state: [Field;4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n if message_size == N {\n Poseidon2::hash_internal(input, N, false)\n } else {\n Poseidon2::hash_internal(input, message_size, true)\n }\n }\n\n fn new(iv: Field) -> Poseidon2 {\n let mut result = Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::hash::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32, is_variable_length: bool) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv : Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n\n // In the case where the hash preimage is variable-length, we append `1` to the end of the input, to distinguish\n // from fixed-length hashes. (the combination of this additional field element + the hash IV ensures\n // fixed-length and variable-length hashes do not collide)\n if is_variable_length {\n sponge.absorb(1);\n }\n sponge.squeeze()\n }\n}\n\npub struct Poseidon2Hasher{\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv : Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n"},"340":{"path":"/usr/src/noir-projects/noir-protocol-circuits/crates/types/src/address/salted_initialization_hash.nr","source":"use crate::{\n address::{aztec_address::AztecAddress}, constants::GENERATOR_INDEX__PARTIAL_ADDRESS,\n hash::poseidon2_hash_with_separator, traits::ToField\n};\n\n// Salted initialization hash. Used in the computation of a partial address.\npub struct SaltedInitializationHash {\n inner: Field\n}\n\nimpl ToField for SaltedInitializationHash {\n fn to_field(self) -> Field {\n self.inner\n }\n}\n\nimpl SaltedInitializationHash {\n pub fn from_field(field: Field) -> Self {\n Self { inner: field }\n }\n\n pub fn compute(salt: Field, initialization_hash: Field, deployer: AztecAddress) -> Self {\n SaltedInitializationHash::from_field(\n poseidon2_hash_with_separator(\n [\n salt,\n initialization_hash,\n deployer.to_field()\n ],\n GENERATOR_INDEX__PARTIAL_ADDRESS\n )\n )\n }\n\n pub fn assert_is_zero(self) {\n assert(self.to_field() == 0);\n }\n}\n"},"35":{"path":"std/hash/sha256.nr","source":"use crate::runtime::is_unconstrained;\n\n// Implementation of SHA-256 mapping a byte array of variable length to\n// 32 bytes.\n\n// Deprecated in favour of `sha256_var`\n// docs:start:sha256\npub fn sha256<let N: u32>(input: [u8; N]) -> [u8; 32]\n// docs:end:sha256\n{\n crate::sha256::digest(input)\n}\n\n#[foreign(sha256_compression)]\npub fn sha256_compression(_input: [u32; 16], _state: [u32; 8]) -> [u32; 8] {}\n\n// SHA-256 hash function\n#[no_predicates]\npub fn digest<let N: u32>(msg: [u8; N]) -> [u8; 32] {\n sha256_var(msg, N as u64)\n}\n\n// Convert 64-byte array to array of 16 u32s\nfn msg_u8_to_u32(msg: [u8; 64]) -> [u32; 16] {\n let mut msg32: [u32; 16] = [0; 16];\n\n for i in 0..16 {\n let mut msg_field: Field = 0;\n for j in 0..4 {\n msg_field = msg_field * 256 + msg[64 - 4*(i + 1) + j] as Field;\n }\n msg32[15 - i] = msg_field as u32;\n }\n\n msg32\n}\n\nunconstrained fn build_msg_block_iter<let N: u32>(msg: [u8; N], message_size: u64, msg_start: u32) -> ([u8; 64], u64) {\n let mut msg_block: [u8; BLOCK_SIZE] = [0; BLOCK_SIZE];\n let mut msg_byte_ptr: u64 = 0; // Message byte pointer\n let mut msg_end = msg_start + BLOCK_SIZE;\n if msg_end > N {\n msg_end = N;\n }\n for k in msg_start..msg_end {\n if k as u64 < message_size {\n msg_block[msg_byte_ptr] = msg[k];\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n (msg_block, msg_byte_ptr)\n}\n\n// Verify the block we are compressing was appropriately constructed\nfn verify_msg_block<let N: u32>(\n msg: [u8; N],\n message_size: u64,\n msg_block: [u8; 64],\n msg_start: u32\n) -> u64 {\n let mut msg_byte_ptr: u64 = 0; // Message byte pointer\n let mut msg_end = msg_start + BLOCK_SIZE;\n let mut extra_bytes = 0;\n if msg_end > N {\n msg_end = N;\n extra_bytes = msg_end - N;\n }\n\n for k in msg_start..msg_end {\n if k as u64 < message_size {\n assert_eq(msg_block[msg_byte_ptr], msg[k]);\n msg_byte_ptr = msg_byte_ptr + 1;\n }\n }\n\n msg_byte_ptr\n}\n\nglobal BLOCK_SIZE = 64;\nglobal ZERO = 0;\n\n// Variable size SHA-256 hash\npub fn sha256_var<let N: u32>(msg: [u8; N], message_size: u64) -> [u8; 32] {\n let num_blocks = N / BLOCK_SIZE;\n let mut msg_block: [u8; BLOCK_SIZE] = [0; BLOCK_SIZE];\n let mut h: [u32; 8] = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225]; // Intermediate hash, starting with the canonical initial value\n let mut msg_byte_ptr = 0; // Pointer into msg_block\n\n for i in 0..num_blocks {\n let msg_start = BLOCK_SIZE * i;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n build_msg_block_iter(msg, message_size, msg_start)\n };\n if msg_start as u64 < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n // Verify the block we are compressing was appropriately constructed\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start as u64 < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start as u64 < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n\n // If the block is filled, compress it.\n // An un-filled block is handled after this loop.\n if msg_byte_ptr == 64 {\n h = sha256_compression(msg_u8_to_u32(msg_block), h);\n }\n }\n\n let modulo = N % BLOCK_SIZE;\n // Handle setup of the final msg block.\n // This case is only hit if the msg is less than the block size,\n // or our message cannot be evenly split into blocks.\n if modulo != 0 {\n let msg_start = BLOCK_SIZE * num_blocks;\n let (new_msg_block, new_msg_byte_ptr) = unsafe {\n build_msg_block_iter(msg, message_size, msg_start)\n };\n\n if msg_start as u64 < message_size {\n msg_block = new_msg_block;\n }\n\n if !is_unconstrained() {\n let new_msg_byte_ptr = verify_msg_block(msg, message_size, msg_block, msg_start);\n if msg_start as u64 < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n } else if msg_start as u64 < message_size {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n if msg_byte_ptr == BLOCK_SIZE as u64 {\n msg_byte_ptr = 0;\n }\n\n // This variable is used to get around the compiler under-constrained check giving a warning.\n // We want to check against a constant zero, but if it does not come from the circuit inputs\n // or return values the compiler check will issue a warning.\n let zero = msg_block[0] - msg_block[0];\n\n // Pad the rest such that we have a [u32; 2] block at the end representing the length\n // of the message, and a block of 1 0 ... 0 following the message (i.e. [1 << 7, 0, ..., 0]).\n msg_block[msg_byte_ptr] = 1 << 7;\n let last_block = msg_block;\n msg_byte_ptr = msg_byte_ptr + 1;\n\n unsafe {\n let (new_msg_block, new_msg_byte_ptr) = pad_msg_block(msg_block, msg_byte_ptr);\n msg_block = new_msg_block;\n if crate::runtime::is_unconstrained() {\n msg_byte_ptr = new_msg_byte_ptr;\n }\n }\n\n if !crate::runtime::is_unconstrained() {\n for i in 0..64 {\n assert_eq(msg_block[i], last_block[i]);\n }\n\n // If i >= 57, there aren't enough bits in the current message block to accomplish this, so\n // the 1 and 0s fill up the current block, which we then compress accordingly.\n // Not enough bits (64) to store length. Fill up with zeros.\n for _i in 57..64 {\n if msg_byte_ptr <= 63 & msg_byte_ptr >= 57 {\n assert_eq(msg_block[msg_byte_ptr], zero);\n msg_byte_ptr += 1;\n }\n }\n }\n\n if msg_byte_ptr >= 57 {\n h = sha256_compression(msg_u8_to_u32(msg_block), h);\n\n msg_byte_ptr = 0;\n }\n\n msg_block = unsafe {\n attach_len_to_msg_block(msg_block, msg_byte_ptr, message_size)\n };\n\n if !crate::runtime::is_unconstrained() {\n for i in 0..56 {\n let predicate = (i < msg_byte_ptr) as u8;\n let expected_byte = predicate * last_block[i];\n assert_eq(msg_block[i], expected_byte);\n }\n\n // We verify the message length was inserted correctly by reversing the byte decomposition.\n let len = 8 * message_size;\n let mut reconstructed_len: Field = 0;\n for i in 56..64 {\n reconstructed_len = 256 * reconstructed_len + msg_block[i] as Field;\n }\n assert_eq(reconstructed_len, len as Field);\n }\n\n hash_final_block(msg_block, h)\n}\n\nunconstrained fn pad_msg_block(mut msg_block: [u8; 64], mut msg_byte_ptr: u64) -> ([u8; 64], u64) {\n // If i >= 57, there aren't enough bits in the current message block to accomplish this, so\n // the 1 and 0s fill up the current block, which we then compress accordingly.\n if msg_byte_ptr >= 57 {\n // Not enough bits (64) to store length. Fill up with zeros.\n if msg_byte_ptr < 64 {\n for _ in 57..64 {\n if msg_byte_ptr <= 63 {\n msg_block[msg_byte_ptr] = 0;\n msg_byte_ptr += 1;\n }\n }\n }\n }\n (msg_block, msg_byte_ptr)\n}\n\nunconstrained fn attach_len_to_msg_block(mut msg_block: [u8; 64], mut msg_byte_ptr: u64, message_size: u64) -> [u8; 64] {\n let len = 8 * message_size;\n let len_bytes: [u8; 8] = (len as Field).to_be_bytes();\n for _i in 0..64 {\n // In any case, fill blocks up with zeros until the last 64 (i.e. until msg_byte_ptr = 56).\n if msg_byte_ptr < 56 {\n msg_block[msg_byte_ptr] = 0;\n msg_byte_ptr = msg_byte_ptr + 1;\n } else if msg_byte_ptr < 64 {\n for j in 0..8 {\n msg_block[msg_byte_ptr + j] = len_bytes[j];\n }\n msg_byte_ptr += 8;\n }\n }\n msg_block\n}\n\nfn hash_final_block(msg_block: [u8; 64], mut state: [u32; 8]) -> [u8; 32] {\n let mut out_h: [u8; 32] = [0; 32]; // Digest as sequence of bytes\n\n // Hash final padded block\n state = sha256_compression(msg_u8_to_u32(msg_block), state);\n\n // Return final hash as byte array\n for j in 0..8 {\n let h_bytes: [u8; 4] = (state[7 - j] as Field).to_le_bytes();\n for k in 0..4 {\n out_h[31 - 4*j - k] = h_bytes[k];\n }\n }\n\n out_h\n}\n"},"404":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_k_account_contract/src/main.nr","source":"// Account contract that uses ECDSA signatures for authentication on the same curve as Ethereum.\n// The signing key is stored in an immutable private note and should be different from the signing key.\nuse dep::aztec::macros::aztec;\n\n#[aztec]\ncontract EcdsaKAccount {\n use dep::aztec::prelude::{PrivateContext, PrivateImmutable};\n use dep::aztec::{\n encrypted_logs::encrypted_note_emission::encode_and_encrypt_note_with_keys,\n keys::getters::get_public_keys,\n macros::{storage::storage, functions::{private, initializer, view, noinitcheck}}\n };\n\n use dep::authwit::{\n entrypoint::{app::AppPayload, fee::FeePayload}, account::AccountActions,\n auth_witness::get_auth_witness\n };\n\n use dep::ecdsa_public_key_note::EcdsaPublicKeyNote;\n\n #[storage]\n struct Storage<Context> {\n public_key: PrivateImmutable<EcdsaPublicKeyNote, Context>,\n }\n\n // Creates a new account out of an ECDSA public key to use for signature verification\n #[private]\n #[initializer]\n fn constructor(signing_pub_key_x: [u8; 32], signing_pub_key_y: [u8; 32]) {\n let this = context.this_address();\n let this_keys = get_public_keys(this);\n // Not emitting outgoing for msg_sender here to not have to register keys for the contract through which we\n // deploy this (typically MultiCallEntrypoint). I think it's ok here as I feel the outgoing here is not that\n // important.\n\n let mut pub_key_note = EcdsaPublicKeyNote::new(signing_pub_key_x, signing_pub_key_y, this_keys.npk_m.hash());\n storage.public_key.initialize(&mut pub_key_note).emit(encode_and_encrypt_note_with_keys(&mut context, this_keys.ovpk_m, this_keys.ivpk_m, this));\n }\n\n // Note: If you globally change the entrypoint signature don't forget to update account_entrypoint.ts\n #[private]\n fn entrypoint(app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.entrypoint(app_payload, fee_payload, cancellable);\n }\n\n #[private]\n #[noinitcheck]\n #[view]\n fn verify_private_authwit(inner_hash: Field) -> Field {\n let actions = AccountActions::init(&mut context, is_valid_impl);\n actions.verify_private_authwit(inner_hash)\n }\n\n #[contract_library_method]\n fn is_valid_impl(context: &mut PrivateContext, outer_hash: Field) -> bool {\n // Load public key from storage\n let storage = Storage::init(context);\n let public_key = storage.public_key.get_note();\n\n // Load auth witness\n let witness: [Field; 64] = unsafe {\n get_auth_witness(outer_hash)\n };\n let mut signature: [u8; 64] = [0; 64];\n for i in 0..64 {\n signature[i] = witness[i] as u8;\n }\n\n // Verify payload signature using Ethereum's signing scheme\n // Note that noir expects the hash of the message/challenge as input to the ECDSA verification.\n let outer_hash_bytes: [u8; 32] = outer_hash.to_be_bytes();\n let hashed_message: [u8; 32] = std::hash::sha256(outer_hash_bytes);\n std::ecdsa_secp256k1::verify_signature(public_key.x, public_key.y, signature, hashed_message)\n }\n}\n\n"},"405":{"path":"/usr/src/noir-projects/noir-contracts/contracts/ecdsa_public_key_note/src/lib.nr","source":"use dep::aztec::prelude::{NoteHeader, NoteInterface, NullifiableNote, PrivateContext};\n\nuse dep::aztec::{\n note::utils::compute_note_hash_for_nullify, keys::getters::get_nsk_app,\n protocol_types::{constants::GENERATOR_INDEX__NOTE_NULLIFIER, hash::poseidon2_hash_with_separator},\n macros::notes::note_custom_interface, generators::Ga1 as Gx_1, generators::Ga2 as Gx_2,\n generators::Ga3 as Gy_1, generators::Ga4 as Gy_2, generators::Ga5 as Gnpk_m_hash, generators::G_slot\n};\n\nuse std::hash::from_field_unsafe;\n\nglobal ECDSA_PUBLIC_KEY_NOTE_LEN: u32 = 5;\n\n// Stores an ECDSA public key composed of two 32-byte elements\n// TODO: Do we need to include a nonce, in case we want to read/nullify/recreate with the same pubkey value?\n#[note_custom_interface]\npub struct EcdsaPublicKeyNote {\n x: [u8; 32],\n y: [u8; 32],\n // We store the npk_m_hash only to get the secret key to compute the nullifier\n npk_m_hash: Field,\n}\n\nimpl NoteInterface<ECDSA_PUBLIC_KEY_NOTE_LEN> for EcdsaPublicKeyNote {\n // Cannot use the automatic serialization since x and y don't fit. Serialize the note as 5 fields where:\n // [0] = x[0..31] (upper bound excluded)\n // [1] = x[31]\n // [2] = y[0..31]\n // [3] = y[31]\n // [4] = npk_m_hash\n fn serialize_content(self) -> [Field; ECDSA_PUBLIC_KEY_NOTE_LEN] {\n let mut x: Field = 0;\n let mut y: Field = 0;\n let mut mul: Field = 1;\n\n for i in 1..32 {\n let byte_x: Field = self.x[31 - i] as Field;\n x = x + (byte_x * mul);\n let byte_y: Field = self.y[31 - i] as Field;\n y = y + (byte_y * mul);\n mul *= 256;\n }\n\n let last_x = self.x[31] as Field;\n let last_y = self.y[31] as Field;\n\n [x, last_x, y, last_y, self.npk_m_hash]\n }\n\n // Cannot use the automatic deserialization for the aforementioned reasons\n fn deserialize_content(serialized_note: [Field; ECDSA_PUBLIC_KEY_NOTE_LEN]) -> EcdsaPublicKeyNote {\n let mut x: [u8; 32] = [0; 32];\n let mut y: [u8; 32] = [0; 32];\n\n let part_x:[u8; 32] = serialized_note[0].to_be_bytes();\n for i in 0..31 {\n x[i] = part_x[i + 1];\n }\n x[31] = serialized_note[1].to_be_bytes::<32>()[31];\n\n let part_y:[u8; 32] = serialized_note[2].to_be_bytes();\n for i in 0..31 {\n y[i] = part_y[i + 1];\n }\n y[31] = serialized_note[3].to_be_bytes::<32>()[31];\n\n EcdsaPublicKeyNote { x, y, npk_m_hash: serialized_note[4], header: NoteHeader::empty() }\n }\n\n fn to_be_bytes(self, storage_slot: Field) -> [u8; ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 64] {\n let serialized_note = self.serialize_content();\n\n let mut buffer: [u8; ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 64] = [0; ECDSA_PUBLIC_KEY_NOTE_LEN * 32 + 64];\n\n let storage_slot_bytes: [u8; 32] = storage_slot.to_be_bytes();\n let note_type_id_bytes: [u8; 32] = EcdsaPublicKeyNote::get_note_type_id().to_be_bytes();\n\n for i in 0..32 {\n buffer[i] = storage_slot_bytes[i];\n buffer[32 + i] = note_type_id_bytes[i];\n }\n\n for i in 0..serialized_note.len() {\n let bytes: [u8; 32] = serialized_note[i].to_be_bytes();\n for j in 0..32 {\n buffer[64 + i * 32 + j] = bytes[j];\n }\n }\n buffer\n }\n\n fn get_note_type_id() -> Field {\n comptime\n {\n let bytes = \"EcdsaPublicKeyNote\".as_bytes();\n let hash = aztec::protocol_types::hash::poseidon2_hash_bytes(bytes);\n let hash_bytes = hash.to_be_bytes::<4>();\n aztec::protocol_types::utils::field::field_from_bytes(hash_bytes, true)\n }\n }\n\n fn get_header(self) -> NoteHeader {\n self.header\n }\n\n fn set_header(&mut self, header: NoteHeader) {\n self.header = header;\n }\n\n fn compute_note_hash(self) -> Field {\n let serialized = self.serialize_content();\n std::embedded_curve_ops::multi_scalar_mul(\n [Gx_1, Gx_2, Gy_1, Gy_2, Gnpk_m_hash, G_slot],\n [\n from_field_unsafe(serialized[0]),\n from_field_unsafe(serialized[1]),\n from_field_unsafe(serialized[2]),\n from_field_unsafe(serialized[3]),\n from_field_unsafe(serialized[4]),\n from_field_unsafe(self.get_header().storage_slot)\n ]\n ).x\n }\n}\n\nimpl NullifiableNote for EcdsaPublicKeyNote {\n\n fn compute_nullifier(self, context: &mut PrivateContext, note_hash_for_nullify: Field) -> Field {\n let secret = context.request_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator(\n [\n note_hash_for_nullify,\n secret\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field\n )\n }\n\n unconstrained fn compute_nullifier_without_context(self) -> Field {\n let note_hash_for_nullify = compute_note_hash_for_nullify(self);\n let secret = get_nsk_app(self.npk_m_hash);\n poseidon2_hash_with_separator(\n [\n note_hash_for_nullify,\n secret\n ],\n GENERATOR_INDEX__NOTE_NULLIFIER as Field\n )\n }\n}\n\nimpl EcdsaPublicKeyNote {\n pub fn new(x: [u8; 32], y: [u8; 32], npk_m_hash: Field) -> Self {\n EcdsaPublicKeyNote { x, y, npk_m_hash, header: NoteHeader::empty() }\n }\n}\n"},"58":{"path":"std/option.nr","source":"use crate::hash::{Hash, Hasher};\nuse crate::cmp::{Ordering, Ord, Eq};\nuse crate::default::Default;\n\npub struct Option<T> {\n _is_some: bool,\n _value: T,\n}\n\nimpl<T> Option<T> {\n /// Constructs a None value\n pub fn none() -> Self {\n Self { _is_some: false, _value: crate::mem::zeroed() }\n }\n\n /// Constructs a Some wrapper around the given value\n pub fn some(_value: T) -> Self {\n Self { _is_some: true, _value }\n }\n\n /// True if this Option is None\n pub fn is_none(self) -> bool {\n !self._is_some\n }\n\n /// True if this Option is Some\n pub fn is_some(self) -> bool {\n self._is_some\n }\n\n /// Asserts `self.is_some()` and returns the wrapped value.\n pub fn unwrap(self) -> T {\n assert(self._is_some);\n self._value\n }\n\n /// Returns the inner value without asserting `self.is_some()`\n /// Note that if `self` is `None`, there is no guarantee what value will be returned,\n /// only that it will be of type `T`.\n pub fn unwrap_unchecked(self) -> T {\n self._value\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, returns the given default value.\n pub fn unwrap_or(self, default: T) -> T {\n if self._is_some { self._value } else { default }\n }\n\n /// Returns the wrapped value if `self.is_some()`. Otherwise, calls the given function to return\n /// a default value.\n pub fn unwrap_or_else<Env>(self, default: fn[Env]() -> T) -> T {\n if self._is_some {\n self._value\n } else {\n default()\n }\n }\n\n /// Asserts `self.is_some()` with a provided custom message and returns the contained `Some` value\n fn expect<let N: u32, MessageTypes>(self, message: fmtstr<N, MessageTypes>) -> T {\n assert(self.is_some(), message);\n self._value\n }\n\n /// If self is `Some(x)`, this returns `Some(f(x))`. Otherwise, this returns `None`.\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> Option<U> {\n if self._is_some {\n Option::some(f(self._value))\n } else {\n Option::none()\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns the given default value.\n pub fn map_or<U, Env>(self, default: U, f: fn[Env](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default\n }\n }\n\n /// If self is `Some(x)`, this returns `f(x)`. Otherwise, this returns `default()`.\n pub fn map_or_else<U, Env1, Env2>(self, default: fn[Env1]() -> U, f: fn[Env2](T) -> U) -> U {\n if self._is_some {\n f(self._value)\n } else {\n default()\n }\n }\n\n /// Returns None if self is None. Otherwise, this returns `other`.\n pub fn and(self, other: Self) -> Self {\n if self.is_none() {\n Option::none()\n } else {\n other\n }\n }\n\n /// If self is None, this returns None. Otherwise, this calls the given function\n /// with the Some value contained within self, and returns the result of that call.\n ///\n /// In some languages this function is called `flat_map` or `bind`.\n pub fn and_then<U, Env>(self, f: fn[Env](T) -> Option<U>) -> Option<U> {\n if self._is_some {\n f(self._value)\n } else {\n Option::none()\n }\n }\n\n /// If self is Some, return self. Otherwise, return `other`.\n pub fn or(self, other: Self) -> Self {\n if self._is_some { self } else { other }\n }\n\n /// If self is Some, return self. Otherwise, return `default()`.\n pub fn or_else<Env>(self, default: fn[Env]() -> Self) -> Self {\n if self._is_some { self } else { default() }\n }\n\n // If only one of the two Options is Some, return that option.\n // Otherwise, if both options are Some or both are None, None is returned.\n pub fn xor(self, other: Self) -> Self {\n if self._is_some {\n if other._is_some { Option::none() } else { self }\n } else if other._is_some {\n other\n } else {\n Option::none()\n }\n }\n\n /// Returns `Some(x)` if self is `Some(x)` and `predicate(x)` is true.\n /// Otherwise, this returns `None`\n pub fn filter<Env>(self, predicate: fn[Env](T) -> bool) -> Self {\n if self._is_some {\n if predicate(self._value) {\n self\n } else {\n Option::none()\n }\n } else {\n Option::none()\n }\n }\n\n /// Flattens an Option<Option<T>> into a Option<T>.\n /// This returns None if the outer Option is None. Otherwise, this returns the inner Option.\n pub fn flatten(option: Option<Option<T>>) -> Option<T> {\n if option._is_some {\n option._value\n } else {\n Option::none()\n }\n }\n}\n\nimpl<T> Default for Option<T> {\n fn default() -> Self {\n Option::none()\n }\n}\n\nimpl<T> Eq for Option<T> where T: Eq {\n fn eq(self, other: Self) -> bool {\n if self._is_some == other._is_some {\n if self._is_some {\n self._value == other._value\n } else {\n true\n }\n } else {\n false\n }\n }\n}\n\nimpl<T> Hash for Option<T> where T: Hash {\n fn hash<H>(self, state: &mut H) where H: Hasher {\n self._is_some.hash(state);\n if self._is_some {\n self._value.hash(state);\n }\n }\n}\n\n// For this impl we're declaring Option::none < Option::some\nimpl<T> Ord for Option<T> where T: Ord {\n fn cmp(self, other: Self) -> Ordering {\n if self._is_some {\n if other._is_some {\n self._value.cmp(other._value)\n } else {\n Ordering::greater()\n }\n } else if other._is_some {\n Ordering::less()\n } else {\n Ordering::equal()\n }\n }\n}\n"},"59":{"path":"std/panic.nr","source":"pub fn panic<T, U, let N: u32>(message: fmtstr<N, T>) -> U {\n assert(false, message);\n crate::mem::zeroed()\n}\n"},"7":{"path":"std/collections/bounded_vec.nr","source":"use crate::{cmp::Eq, convert::From};\n\n/// A `BoundedVec<T, MaxLen>` is a growable storage similar to a `Vec<T>` except that it\n/// is bounded with a maximum possible length. Unlike `Vec`, `BoundedVec` is not implemented\n/// via slices and thus is not subject to the same restrictions slices are (notably, nested\n/// slices - and thus nested vectors as well - are disallowed).\n/// \n/// Since a BoundedVec is backed by a normal array under the hood, growing the BoundedVec by\n/// pushing an additional element is also more efficient - the length only needs to be increased\n/// by one.\n/// \n/// For these reasons `BoundedVec<T, N>` should generally be preferred over `Vec<T>` when there\n/// is a reasonable maximum bound that can be placed on the vector.\n/// \n/// Example:\n/// \n/// ```noir\n/// let mut vector: BoundedVec<Field, 10> = BoundedVec::new();\n/// for i in 0..5 {\n/// vector.push(i);\n/// }\n/// assert(vector.len() == 5);\n/// assert(vector.max_len() == 10);\n/// ```\npub struct BoundedVec<T, let MaxLen: u32> {\n storage: [T; MaxLen],\n len: u32,\n}\n\nimpl<T, let MaxLen: u32> BoundedVec<T, MaxLen> {\n /// Creates a new, empty vector of length zero.\n ///\n /// Since this container is backed by an array internally, it still needs an initial value\n /// to give each element. To resolve this, each element is zeroed internally. This value\n /// is guaranteed to be inaccessible unless `get_unchecked` is used.\n ///\n /// Example:\n ///\n /// ```noir\n /// let empty_vector: BoundedVec<Field, 10> = BoundedVec::new();\n /// assert(empty_vector.len() == 0);\n /// ```\n ///\n /// Note that whenever calling `new` the maximum length of the vector should always be specified\n /// via a type signature:\n ///\n /// ```noir\n /// fn good() -> BoundedVec<Field, 10> {\n /// // Ok! MaxLen is specified with a type annotation\n /// let v1: BoundedVec<Field, 3> = BoundedVec::new();\n /// let v2 = BoundedVec::new();\n ///\n /// // Ok! MaxLen is known from the type of `good`'s return value\n /// v2\n /// }\n ///\n /// fn bad() {\n /// // Error: Type annotation needed\n /// // The compiler can't infer `MaxLen` from the following code:\n /// let mut v3 = BoundedVec::new();\n /// v3.push(5);\n /// }\n /// ```\n ///\n /// This defaulting of `MaxLen` (and numeric generics in general) to zero may change in future noir versions\n /// but for now make sure to use type annotations when using bounded vectors. Otherwise, you will receive a \n /// constraint failure at runtime when the vec is pushed to.\n pub fn new() -> Self {\n let zeroed = crate::mem::zeroed();\n BoundedVec { storage: [zeroed; MaxLen], len: 0 }\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this\n /// will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// let last = v.get(v.len() - 1);\n /// assert(first != last);\n /// }\n /// ```\n pub fn get(self, index: u32) -> T {\n assert(index < self.len, \"Attempted to read past end of BoundedVec\");\n self.get_unchecked(index)\n }\n\n /// Retrieves an element from the vector at the given index, starting from zero, without\n /// performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element,\n /// it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn sum_of_first_three<let N: u32>(v: BoundedVec<u32, N>) -> u32 {\n /// // Always ensure the length is larger than the largest\n /// // index passed to get_unchecked\n /// assert(v.len() > 2);\n /// let first = v.get_unchecked(0);\n /// let second = v.get_unchecked(1);\n /// let third = v.get_unchecked(2);\n /// first + second + third\n /// }\n /// ```\n pub fn get_unchecked(self, index: u32) -> T {\n self.storage[index]\n }\n\n /// Writes an element to the vector at the given index, starting from zero.\n /// \n /// If the given index is equal to or greater than the length of the vector, this will issue a constraint failure.\n /// \n /// Example:\n /// \n /// ```noir\n /// fn foo<let N: u32>(v: BoundedVec<u32, N>) {\n /// let first = v.get(0);\n /// assert(first != 42);\n /// v.set(0, 42);\n /// let new_first = v.get(0);\n /// assert(new_first == 42);\n /// }\n /// ```\n pub fn set(&mut self, index: u32, value: T) {\n assert(index < self.len, \"Attempted to write past end of BoundedVec\");\n self.set_unchecked(index, value)\n }\n\n /// Writes an element to the vector at the given index, starting from zero, without performing a bounds check.\n /// \n /// Since this function does not perform a bounds check on length before accessing the element, it is unsafe! Use at your own risk!\n /// \n /// Example:\n /// \n /// ```noir\n /// fn set_unchecked_example() {\n /// let mut vec: BoundedVec<u32, 5> = BoundedVec::new();\n /// vec.extend_from_array([1, 2]);\n /// \n /// // Here we're safely writing within the valid range of `vec`\n /// // `vec` now has the value [42, 2]\n /// vec.set_unchecked(0, 42);\n /// \n /// // We can then safely read this value back out of `vec`.\n /// // Notice that we use the checked version of `get` which would prevent reading unsafe values.\n /// assert_eq(vec.get(0), 42);\n /// \n /// // We've now written past the end of `vec`.\n /// // As this index is still within the maximum potential length of `v`,\n /// // it won't cause a constraint failure. \n /// vec.set_unchecked(2, 42);\n /// println(vec);\n /// \n /// // This will write past the end of the maximum potential length of `vec`,\n /// // it will then trigger a constraint failure.\n /// vec.set_unchecked(5, 42);\n /// println(vec);\n /// }\n /// ```\n pub fn set_unchecked(&mut self, index: u32, value: T) {\n self.storage[index] = value;\n }\n\n /// Pushes an element to the end of the vector. This increases the length\n /// of the vector by one.\n /// \n /// Panics if the new length of the vector will be greater than the max length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// \n /// v.push(1);\n /// v.push(2);\n /// \n /// // Panics with failed assertion \"push out of bounds\"\n /// v.push(3);\n /// ```\n pub fn push(&mut self, elem: T) {\n assert(self.len < MaxLen, \"push out of bounds\");\n\n self.storage[self.len] = elem;\n self.len += 1;\n }\n\n /// Returns the current length of this vector\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 4> = BoundedVec::new();\n /// assert(v.len() == 0);\n /// \n /// v.push(100);\n /// assert(v.len() == 1);\n /// \n /// v.push(200);\n /// v.push(300);\n /// v.push(400);\n /// assert(v.len() == 4);\n /// \n /// let _ = v.pop();\n /// let _ = v.pop();\n /// assert(v.len() == 2);\n /// ```\n pub fn len(self) -> u32 {\n self.len\n }\n\n /// Returns the maximum length of this vector. This is always\n /// equal to the `MaxLen` parameter this vector was initialized with.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.max_len() == 5);\n /// v.push(10);\n /// assert(v.max_len() == 5);\n /// ```\n pub fn max_len(_self: BoundedVec<T, MaxLen>) -> u32 {\n MaxLen\n }\n\n /// Returns the internal array within this vector.\n /// \n /// Since arrays in Noir are immutable, mutating the returned storage array will not mutate\n /// the storage held internally by this vector.\n /// \n /// Note that uninitialized elements may be zeroed out!\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 5> = BoundedVec::new();\n /// \n /// assert(v.storage() == [0, 0, 0, 0, 0]);\n /// \n /// v.push(57);\n /// assert(v.storage() == [57, 0, 0, 0, 0]);\n /// ```\n pub fn storage(self) -> [T; MaxLen] {\n self.storage\n }\n\n /// Pushes each element from the given array to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_array([2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_array<let Len: u32>(&mut self, array: [T; Len]) {\n let new_len = self.len + array.len();\n assert(new_len <= MaxLen, \"extend_from_array out of bounds\");\n for i in 0..array.len() {\n self.storage[self.len + i] = array[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the given slice to this vector.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut vec: BoundedVec<Field, 3> = BoundedVec::new();\n /// vec.extend_from_slice(&[2, 4]);\n /// \n /// assert(vec.len == 2);\n /// assert(vec.get(0) == 2);\n /// assert(vec.get(1) == 4);\n /// ```\n pub fn extend_from_slice(&mut self, slice: [T]) {\n let new_len = self.len + slice.len();\n assert(new_len <= MaxLen, \"extend_from_slice out of bounds\");\n for i in 0..slice.len() {\n self.storage[self.len + i] = slice[i];\n }\n self.len = new_len;\n }\n\n /// Pushes each element from the other vector to this vector. The length of\n /// the other vector is left unchanged.\n /// \n /// Panics if pushing each element would cause the length of this vector\n /// to exceed the maximum length.\n /// \n /// ```noir\n /// let mut v1: BoundedVec<Field, 5> = BoundedVec::new();\n /// let mut v2: BoundedVec<Field, 7> = BoundedVec::new();\n /// \n /// v2.extend_from_array([1, 2, 3]);\n /// v1.extend_from_bounded_vec(v2);\n /// \n /// assert(v1.storage() == [1, 2, 3, 0, 0]);\n /// assert(v2.storage() == [1, 2, 3, 0, 0, 0, 0]);\n /// ```\n pub fn extend_from_bounded_vec<let Len: u32>(&mut self, vec: BoundedVec<T, Len>) {\n let append_len = vec.len();\n let new_len = self.len + append_len;\n assert(new_len <= MaxLen, \"extend_from_bounded_vec out of bounds\");\n\n let mut exceeded_len = false;\n for i in 0..Len {\n exceeded_len |= i == append_len;\n if !exceeded_len {\n self.storage[self.len + i] = vec.get_unchecked(i);\n }\n }\n self.len = new_len;\n }\n\n /// Creates a new vector, populating it with values derived from an array input. \n /// The maximum length of the vector is determined based on the type signature.\n /// \n /// Example:\n /// \n /// ```noir\n /// let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array([1, 2, 3])\n /// ```\n pub fn from_array<let Len: u32>(array: [T; Len]) -> Self {\n assert(Len <= MaxLen, \"from array out of bounds\");\n let mut vec: BoundedVec<T, MaxLen> = BoundedVec::new();\n vec.extend_from_array(array);\n vec\n }\n\n /// Pops the element at the end of the vector. This will decrease the length\n /// of the vector by one.\n /// \n /// Panics if the vector is empty.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<Field, 2> = BoundedVec::new();\n /// v.push(1);\n /// v.push(2);\n /// \n /// let two = v.pop();\n /// let one = v.pop();\n /// \n /// assert(two == 2);\n /// assert(one == 1);\n ///\n /// // error: cannot pop from an empty vector\n /// let _ = v.pop();\n /// ```\n pub fn pop(&mut self) -> T {\n assert(self.len > 0);\n self.len -= 1;\n\n let elem = self.storage[self.len];\n self.storage[self.len] = crate::mem::zeroed();\n elem\n }\n\n /// Returns true if the given predicate returns true for any element\n /// in this vector.\n /// \n /// Example:\n /// \n /// ```noir\n /// let mut v: BoundedVec<u32, 3> = BoundedVec::new();\n /// v.extend_from_array([2, 4, 6]);\n /// \n /// let all_even = !v.any(|elem: u32| elem % 2 != 0);\n /// assert(all_even);\n /// ```\n pub fn any<Env>(self, predicate: fn[Env](T) -> bool) -> bool {\n let mut ret = false;\n let mut exceeded_len = false;\n for i in 0..MaxLen {\n exceeded_len |= i == self.len;\n if !exceeded_len {\n ret |= predicate(self.storage[i]);\n }\n }\n ret\n }\n\n /// Creates a new vector of equal size by calling a closure on each element in this vector. \n /// \n /// Example:\n /// \n /// ```noir\n /// let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n /// let result = vec.map(|value| value * 2);\n /// \n /// let expected = BoundedVec::from_array([2, 4, 6, 8]);\n /// assert_eq(result, expected);\n /// ```\n pub fn map<U, Env>(self, f: fn[Env](T) -> U) -> BoundedVec<U, MaxLen> {\n let mut ret = BoundedVec::new();\n ret.len = self.len();\n for i in 0..MaxLen {\n if i < self.len() {\n ret.storage[i] = f(self.get_unchecked(i));\n }\n }\n ret\n }\n}\n\nimpl<T, let MaxLen: u32> Eq for BoundedVec<T, MaxLen> where T: Eq {\n fn eq(self, other: BoundedVec<T, MaxLen>) -> bool {\n // TODO: https://github.com/noir-lang/noir/issues/4837\n //\n // We make the assumption that the user has used the proper interface for working with `BoundedVec`s\n // rather than directly manipulating the internal fields as this can result in an inconsistent internal state.\n\n (self.len == other.len) & (self.storage == other.storage)\n }\n}\n\nimpl<T, let MaxLen: u32, let Len: u32> From<[T; Len]> for BoundedVec<T, MaxLen> {\n fn from(array: [T; Len]) -> BoundedVec<T, MaxLen> {\n BoundedVec::from_array(array)\n }\n}\n\nmod bounded_vec_tests {\n\n mod get {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test(should_fail_with = \"Attempted to read past end of BoundedVec\")]\n fn panics_when_reading_elements_past_end_of_vec() {\n let vec: BoundedVec<Field, 5> = BoundedVec::new();\n\n crate::println(vec.get(0));\n }\n }\n\n mod set {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn set_updates_values_properly() {\n let mut vec = BoundedVec::from_array([0, 0, 0, 0, 0]);\n\n vec.set(0, 42);\n assert_eq(vec.storage, [42, 0, 0, 0, 0]);\n\n vec.set(1, 43);\n assert_eq(vec.storage, [42, 43, 0, 0, 0]);\n\n vec.set(2, 44);\n assert_eq(vec.storage, [42, 43, 44, 0, 0]);\n\n vec.set(1, 10);\n assert_eq(vec.storage, [42, 10, 44, 0, 0]);\n\n vec.set(0, 0);\n assert_eq(vec.storage, [0, 10, 44, 0, 0]);\n }\n\n #[test(should_fail_with = \"Attempted to write past end of BoundedVec\")]\n fn panics_when_writing_elements_past_end_of_vec() {\n let mut vec: BoundedVec<Field, 5> = BoundedVec::new();\n vec.set(0, 42);\n\n // Need to use println to avoid DIE removing the write operation.\n crate::println(vec.get(0));\n }\n }\n\n mod map {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn applies_function_correctly() {\n // docs:start:bounded-vec-map-example\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| value * 2);\n // docs:end:bounded-vec-map-example\n let expected = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn applies_function_that_changes_return_type() {\n let vec: BoundedVec<u32, 4> = BoundedVec::from_array([1, 2, 3, 4]);\n let result = vec.map(|value| (value * 2) as Field);\n let expected: BoundedVec<Field, 4> = BoundedVec::from_array([2, 4, 6, 8]);\n\n assert_eq(result, expected);\n }\n\n #[test]\n fn does_not_apply_function_past_len() {\n let vec: BoundedVec<u32, 3> = BoundedVec::from_array([0, 1]);\n let result = vec.map(|value| if value == 0 { 5 } else { value });\n let expected = BoundedVec::from_array([5, 1]);\n\n assert_eq(result, expected);\n assert_eq(result.storage()[2], 0);\n }\n }\n\n mod from_array {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty() {\n let empty_array: [Field; 0] = [];\n let bounded_vec = BoundedVec::from_array([]);\n\n assert_eq(bounded_vec.max_len(), 0);\n assert_eq(bounded_vec.len(), 0);\n assert_eq(bounded_vec.storage(), empty_array);\n }\n\n #[test]\n fn equal_len() {\n let array = [1, 2, 3];\n let bounded_vec = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 3);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage(), array);\n }\n\n #[test]\n fn max_len_greater_then_array_len() {\n let array = [1, 2, 3];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from_array(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 3);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n assert_eq(bounded_vec.storage()[2], 3);\n }\n\n #[test(should_fail_with=\"from array out of bounds\")]\n fn max_len_lower_then_array_len() {\n let _: BoundedVec<Field, 2> = BoundedVec::from_array([0; 3]);\n }\n }\n\n mod trait_from {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn simple() {\n let array = [1, 2];\n let bounded_vec: BoundedVec<Field, 10> = BoundedVec::from(array);\n\n assert_eq(bounded_vec.max_len(), 10);\n assert_eq(bounded_vec.len(), 2);\n assert_eq(bounded_vec.storage()[0], 1);\n assert_eq(bounded_vec.storage()[1], 2);\n }\n }\n\n mod trait_eq {\n use crate::collections::bounded_vec::BoundedVec;\n\n #[test]\n fn empty_equality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n\n assert_eq(bounded_vec1, bounded_vec2);\n }\n\n #[test]\n fn inequality() {\n let mut bounded_vec1: BoundedVec<Field, 3> = BoundedVec::new();\n let mut bounded_vec2: BoundedVec<Field, 3> = BoundedVec::new();\n bounded_vec1.push(1);\n bounded_vec2.push(2);\n\n assert(bounded_vec1 != bounded_vec2);\n }\n }\n}\n"},"73":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth_witness.nr","source":"#[oracle(getAuthWitness)]\nunconstrained fn get_auth_witness_oracle<let N: u32>(_message_hash: Field) -> [Field; N] {}\n\n/**\n * Oracle wrapper to fetch an `auth_witness` for a given `message_hash` from the PXE.\n * \n * @param message_hash The hash of the message for which the `auth_witness` is to be fetched.\n * @return The `auth_witness` for the given `message_hash` as Field array.\n */\nunconstrained pub fn get_auth_witness<let N: u32>(message_hash: Field) -> [Field; N] {\n get_auth_witness_oracle(message_hash)\n}\n"},"74":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/auth.nr","source":"use dep::aztec::protocol_types::{\n abis::function_selector::FunctionSelector, address::AztecAddress,\n constants::{\n GENERATOR_INDEX__AUTHWIT_INNER, GENERATOR_INDEX__AUTHWIT_OUTER, GENERATOR_INDEX__AUTHWIT_NULLIFIER,\n CANONICAL_AUTH_REGISTRY_ADDRESS\n},\n hash::poseidon2_hash_with_separator\n};\nuse dep::aztec::{context::{PrivateContext, PublicContext, gas::GasOpts}, hash::hash_args_array};\n\n/**\n * Authenticaion witness helper library\n *\n * Authentication Witness is a scheme for authenticating actions on Aztec, so users can allow third-parties\n * (e.g. protocols or other users) to execute an action on their behalf.\n *\n * This library provides helper functions to manage such witnesses.\n * The authentication witness, is some \"witness\" (data) that authenticates a `message_hash`.\n * The simplest example of an authentication witness, is a signature. The signature is the \"evidence\",\n * that the signer has seen the message, agrees with it, and has allowed it.\n * It does not need to be a signature. It could be any kind of \"proof\" that the message is allowed.\n * Another proof could be knowing some kind of secret, or having some kind of \"token\" that allows the message.\n *\n * The `message_hash` is a hash of the following structure:\n * hash(consumer, chain_id, version, inner_hash)\n * - consumer: the address of the contract that is \"consuming\" the message,\n * - chain_id: the chain id of the chain that the message is being consumed on,\n * - version: the version of the chain that the message is being consumed on,\n * - inner_hash: the hash of the \"inner\" message that is being consumed, this is the \"actual\" message or action.\n *\n * While the `inner_hash` could be anything, such as showing you signed a specific message, it will often be\n * a hash of the \"action\" to approve, along with who made the call. As part of this library, we provide a few\n * helper functions to deal with such messages.\n *\n * For example, we provide helper function that is used for checking that the message is an encoding of the current call.\n * This can be used to let some contract \"allow\" another contract to act on its behalf, as long as it can\n * show that it is acting on behalf of the contract.\n *\n * If we take a case of allowing a contract to transfer tokens on behalf of an account, the `inner_hash` can be\n * derived as:\n * inner_hash = hash(caller, \"transfer\", hash(to, amount))\n *\n * Where the `caller` would be the address of the contract that is trying to transfer the tokens, and `to` and `amount`\n * the arguments for the transfer.\n *\n * Note that we have both a `caller` and a `consumer`, the `consumer` will be the contract that is consuming the message,\n * in the case of the transfer, it would be the `Token` contract itself, while the caller, will be the actor that is\n * allowed to transfer the tokens.\n *\n *\n * The authentication mechanism works differently in public and private contexts. In private, we recall that everything\n * is executed on the user's device, so we can use `oracles` to \"ask\" the user (not contract) for information. In public\n * we cannot do this, since it is executed by the sequencer (someone else). Therefore we can instead use a \"registry\"\n * to store the messages that we have approved.\n *\n * A simple example would be a \"token\" that is being \"pulled\" from one account into another. We will first outline\n * how this would look in private, and then in public later.\n *\n * Say that a user `Alice` wants to deposit some tokens into a DeFi protocol (say a DEX).\n * `Alice` would make a `deposit` transaction, that she is executing using her account contract.\n * The account would call the `DeFi` contract to execute `deposit`, which would try to pull funds from the `Token`\n * contract. Since the `DeFi` contract is trying to pull funds from an account that is not its own, it needs to\n * convince the `Token` contract that it is allowed to do so.\n *\n * This is where the authentication witness comes in The `Token` contract computes a `message_hash` from the\n * `transfer` call, and then asks `Alice Account` contract to verify that the `DeFi` contract is allowed to\n * execute that call.\n *\n * `Alice Account` contract can then ask `Alice` if she wants to allow the `DeFi` contract to pull funds from her\n * account. If she does, she will sign the `message_hash` and return the signature to the `Alice Account` which\n * will validate it and return success to the `Token` contract which will then allow the `DeFi` contract to pull\n * funds from `Alice`.\n *\n * To ensure that the same \"approval\" cannot be used multiple times, we also compute a `nullifier` for the\n * authentication witness, and emit it from the `Token` contract (consumer).\n *\n * Note that we can do this flow as we are in private were we can do oracle calls out from contracts.\n *\n *\n * Person Contract Contract Contract\n * Alice Alice Account Token DeFi\n * | | | |\n * | Defi.deposit(Token, 1000) | |\n * |----------------->| | |\n * | | deposit(Token, 1000) |\n * | |---------------------------------------->|\n * | | | |\n * | | | transfer(Alice, Defi, 1000)\n * | | |<---------------------|\n * | | | |\n * | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | |<-----------------| |\n * | | | |\n * | Please give me AuthWit for DeFi | |\n * | calling transfer(Alice, Defi, 1000) | |\n * |<-----------------| | |\n * | | | |\n * | | | |\n * | AuthWit for transfer(Alice, Defi, 1000) |\n * |----------------->| | |\n * | | AuthWit validity | |\n * | |----------------->| |\n * | | | |\n * | | throw if invalid AuthWit |\n * | | | |\n * | | emit AuthWit nullifier |\n * | | | |\n * | | transfer(Alice, Defi, 1000) |\n * | | | |\n * | | | |\n * | | | success |\n * | | |--------------------->|\n * | | | |\n * | | | |\n * | | | deposit(Token, 1000)\n * | | | |\n * | | | |\n *\n *\n * If we instead were in public, we cannot do the same flow. Instead we would use an authentication registry to store\n * the messages that we have approved.\n *\n * To approve a message, `Alice Account` can make a `set_authorized` call to the registry, to set a `message_hash`\n * as authorized. This is essentially a mapping from `message_hash` to `true` for `Alice Contract`. Every account\n * has its own map in the registry, so `Alice` cannot approve a message for `Bob`.\n *\n * The `Token` contract can then try to \"spend\" the approval by calling `consume` on the registry. If the message\n * was approved, the value is updated to `false`, and we return the success flag. For more information on the\n * registry, see `main.nr` in `auth_registry_contract`.\n *\n * Person Contract Contract Contract Contract\n * Alice Alice Account Registry Token DeFi\n * | | | | |\n * | Registry.set_authorized(..., true) | | |\n * |----------------->| | | |\n * | | set_authorized(..., true) | |\n * | |------------------->| | |\n * | | | | |\n * | | set authorized to true | |\n * | | | | |\n * | | | | |\n * | Defi.deposit(Token, 1000) | | |\n * |----------------->| | | |\n * | | deposit(Token, 1000) | |\n * | |-------------------------------------------------------------->|\n * | | | | |\n * | | | transfer(Alice, Defi, 1000) |\n * | | | |<---------------------|\n * | | | | |\n * | | | Check if Defi may call transfer(Alice, Defi, 1000)\n * | | |<------------------| |\n * | | | | |\n * | | throw if invalid AuthWit | |\n * | | | | |\n * | | | | |\n * | | set authorized to false | |\n * | | | | |\n * | | | | |\n * | | | AuthWit validity | |\n * | | |------------------>| |\n * | | | | |\n * | | | | transfer(Alice, Defi, 1000)\n * | | | |<-------------------->|\n * | | | | |\n * | | | | success |\n * | | | |--------------------->|\n * | | | | |\n * | | | | deposit(Token, 1000)\n * | | | | |\n *\n *\n * --- FAQ ---\n * Q: Why are we using a success flag of `poseidon2_hash_bytes(\"IS_VALID()\")` instead of just returning a boolean?\n * A: We want to make sure that we don't accidentally return `true` if there is a collision in the function selector.\n * By returning a hash of `IS_VALID()`, it becomes very unlikely that there is both a collision and we return\n * a success flag.\n *\n * Q: Why are we using static calls?\n * A: We are using static calls to ensure that the account contract cannot re-enter. If it was a normal call, it\n * could make a new call and do a re-entry attack. Using a static ensures that it cannot update any state.\n *\n * Q: Would it not be cheaper to use a nullifier instead of updating state in public?\n * A: At a quick glance, a public state update + nullifier is 96 bytes, but two state updates are 128, so it would be\n * cheaper to use a nullifier, if this is the way it would always be done. However, if both the approval and the\n * consumption is done in the same transaction, then we will be able to squash the updates (only final tx state diff is posted to DA), and now it is cheaper.\n *\n * Q: Why is the chain id and the version part of the message hash?\n * A: The chain id and the version is part of the message hash to ensure that the message is only valid on a specific\n * chain to avoid a case where the same message could be used across multiple chains.\n */\n\nglobal IS_VALID_SELECTOR = 0x47dacd73; // 4 last bytes of poseidon2_hash_bytes(\"IS_VALID()\")\n\n/**\n * Assert that `on_behalf_of` have authorized the current call with a valid authentication witness\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit\npub fn assert_current_call_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress) {\n let inner_hash = compute_inner_authwit_hash([context.msg_sender().to_field(), context.selector().to_field(), context.args_hash]);\n assert_inner_hash_valid_authwit(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit\n\n/**\n * Assert that a specific `inner_hash` is valid for the `on_behalf_of` address\n *\n * Used as an internal function for `assert_current_call_valid_authwit` and can be used as a standalone function when\n * the `inner_hash` is from a different source, e.g., say a block of text etc.\n *\n * @param on_behalf_of The address that have authorized the current call\n * @param inner_hash The hash of the message to authorize\n */\npub fn assert_inner_hash_valid_authwit(context: &mut PrivateContext, on_behalf_of: AztecAddress, inner_hash: Field) {\n // We perform a static call here and not a standard one to ensure that the account contract cannot re-enter.\n let result: Field = context.static_call_private_function(\n on_behalf_of,\n comptime {\n FunctionSelector::from_signature(\"verify_private_authwit(Field)\")\n },\n [inner_hash]\n ).unpack_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n // Compute the nullifier, similar computation to the outer hash, but without the chain_id and version.\n // Those should already be handled in the verification, so we just need something to nullify, that allow same inner_hash for multiple actors.\n let nullifier = compute_authwit_nullifier(on_behalf_of, inner_hash);\n context.push_nullifier(nullifier);\n}\n\n/**\n * Assert that `on_behalf_of` have authorized the current call in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the current call\n */\n// docs:start:assert_current_call_valid_authwit_public\npub fn assert_current_call_valid_authwit_public(\n context: &mut PublicContext,\n on_behalf_of: AztecAddress\n) {\n let inner_hash = compute_inner_authwit_hash(\n [(*context).msg_sender().to_field(), (*context).selector().to_field(), (*context).get_args_hash()]\n );\n assert_inner_hash_valid_authwit_public(context, on_behalf_of, inner_hash);\n}\n// docs:end:assert_current_call_valid_authwit_public\n\n/**\n * Assert that `on_behalf_of` have authorized a speicifc `inner_hash` in the authentication registry\n *\n * Computing the `inner_hash` using the `msg_sender`, `selector` and `args_hash` and then making a call out to the\n * `on_behalf_of` contract to verify that the `inner_hash` is valid.\n *\n * Note that the authentication registry will take the `msg_sender` into account as the consumer, so this will only\n * work if the `msg_sender` is the same as the `consumer` when the `message_hash` was inserted into the registry.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n */\npub fn assert_inner_hash_valid_authwit_public(context: &mut PublicContext, on_behalf_of: AztecAddress, inner_hash: Field) {\n let result: Field = context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"consume((Field),Field)\")\n },\n [on_behalf_of.to_field(), inner_hash].as_slice(),\n GasOpts::default()\n ).deserialize_into();\n assert(result == IS_VALID_SELECTOR, \"Message not authorized by account\");\n}\n\n/**\n * Compute the `message_hash` from a function call to be used by an authentication witness\n *\n * Useful for when you need a non-account contract to approve during execution. For example if you need a contract\n * to make a call to nested contract, e.g., contract A wants to exit token T to L1 using bridge B, so it needs to allow\n * B to transfer T on its behalf.\n *\n * @param caller The address of the contract that is calling the function, in the example above, this would be B\n * @param consumer The address of the contract that is consuming the message, in the example above, this would be T\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param selector The function selector of the function that is being called\n * @param args The arguments of the function that is being called\n */\n// docs:start:compute_authwit_message_hash_from_call\npub fn compute_authwit_message_hash_from_call<let N: u32>(\n caller: AztecAddress,\n consumer: AztecAddress,\n chain_id: Field,\n version: Field,\n selector: FunctionSelector,\n args: [Field; N]\n) -> Field {\n let args_hash = hash_args_array(args);\n let inner_hash = compute_inner_authwit_hash([caller.to_field(), selector.to_field(), args_hash]);\n compute_authwit_message_hash(consumer, chain_id, version, inner_hash)\n}\n// docs:end:compute_authwit_message_hash_from_call\n\n/**\n * Computes the `inner_hash` of the authentication witness\n *\n * This is used internally, but also useful in cases where you want to compute the `inner_hash` for a specific message\n * that is not necessarily a call, but just some \"bytes\" or text.\n *\n * @param args The arguments to hash\n */\npub fn compute_inner_authwit_hash<let N: u32>(args: [Field; N]) -> Field {\n poseidon2_hash_with_separator(args, GENERATOR_INDEX__AUTHWIT_INNER)\n}\n\n/**\n * Computs the `authwit_nullifier` for a specific `on_behalf_of` and `inner_hash`\n *\n * Using the `on_behalf_of` and the `inner_hash` to ensure that the nullifier is siloed for a specific `on_behalf_of`.\n *\n * @param on_behalf_of The address that have authorized the `inner_hash`\n * @param inner_hash The hash of the message to authorize\n */\npub fn compute_authwit_nullifier(on_behalf_of: AztecAddress, inner_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [on_behalf_of.to_field(), inner_hash],\n GENERATOR_INDEX__AUTHWIT_NULLIFIER\n )\n}\n\n/**\n * Computes the `message_hash` for the authentication witness\n *\n * @param consumer The address of the contract that is consuming the message\n * @param chain_id The chain id of the chain that the message is being consumed on\n * @param version The version of the chain that the message is being consumed on\n * @param inner_hash The hash of the \"inner\" message that is being consumed\n */\npub fn compute_authwit_message_hash(consumer: AztecAddress, chain_id: Field, version: Field, inner_hash: Field) -> Field {\n poseidon2_hash_with_separator(\n [\n consumer.to_field(),\n chain_id,\n version,\n inner_hash\n ],\n GENERATOR_INDEX__AUTHWIT_OUTER\n )\n}\n\n/**\n * Helper function to set the authorization status of a message hash\n *\n * Wraps a public call to the authentication registry to set the authorization status of a `message_hash`\n *\n * @param message_hash The hash of the message to authorize\n * @param authorize True if the message should be authorized, false if it should be revoked\n */\npub fn set_authorized(context: &mut PublicContext, message_hash: Field, authorize: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_authorized(Field,bool)\")\n },\n [message_hash, authorize as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n\n/**\n * Helper function to reject all authwits\n *\n * Wraps a public call to the authentication registry to set the `reject_all` flag\n *\n * @param reject True if all authwits should be rejected, false otherwise\n */\npub fn set_reject_all(context: &mut PublicContext, reject: bool) {\n context.call_public_function(\n CANONICAL_AUTH_REGISTRY_ADDRESS,\n comptime {\n FunctionSelector::from_signature(\"set_reject_all(bool)\")\n },\n [context.this_address().to_field(), reject as Field].as_slice(),\n GasOpts::default()\n ).assert_empty();\n}\n"},"75":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/account.nr","source":"use dep::aztec::{\n context::PrivateContext,\n protocol_types::constants::{GENERATOR_INDEX__COMBINED_PAYLOAD, GENERATOR_INDEX__TX_NULLIFIER},\n hash::poseidon2_hash_with_separator\n};\n\nuse crate::entrypoint::{app::AppPayload, fee::FeePayload};\nuse crate::auth::{IS_VALID_SELECTOR, compute_authwit_message_hash};\n\npub struct AccountActions<Context> {\n context: Context,\n is_valid_impl: fn(&mut PrivateContext, Field) -> bool,\n}\n\nimpl<Context> AccountActions<Context> {\n pub fn init(context: Context, is_valid_impl: fn(&mut PrivateContext, Field) -> bool) -> Self {\n AccountActions { context, is_valid_impl }\n }\n}\n\n/**\n * An implementation of the Account Action struct for the private context.\n *\n * Implements logic to verify authorization and execute payloads.\n */\nimpl AccountActions<&mut PrivateContext> {\n\n /**\n * Verifies that the `app_hash` and `fee_hash` are authorized and then executes them.\n *\n * Executes the `fee_payload` and `app_payload` in sequence.\n * Will execute the `fee_payload` as part of the setup, and then enter the app phase.\n *\n * @param app_payload The payload that contains the calls to be executed in the app phase.\n * @param fee_payload The payload that contains the calls to be executed in the setup phase.\n */\n // docs:start:entrypoint\n pub fn entrypoint(self, app_payload: AppPayload, fee_payload: FeePayload, cancellable: bool) {\n let valid_fn = self.is_valid_impl;\n\n let combined_payload_hash = poseidon2_hash_with_separator(\n [app_payload.hash(), fee_payload.hash()],\n GENERATOR_INDEX__COMBINED_PAYLOAD\n );\n assert(valid_fn(self.context, combined_payload_hash));\n\n fee_payload.execute_calls(self.context);\n self.context.end_setup();\n app_payload.execute_calls(self.context);\n if cancellable {\n let tx_nullifier = poseidon2_hash_with_separator([app_payload.nonce], GENERATOR_INDEX__TX_NULLIFIER);\n self.context.push_nullifier(tx_nullifier);\n }\n }\n // docs:end:entrypoint\n\n /**\n * Verifies that the `msg_sender` is authorized to consume `inner_hash` by the account.\n *\n * Computes the `message_hash` using the `msg_sender`, `chain_id`, `version` and `inner_hash`.\n * Then executes the `is_valid_impl` function to verify that the message is authorized.\n *\n * Will revert if the message is not authorized.\n *\n * @param inner_hash The hash of the message that the `msg_sender` is trying to consume.\n */\n // docs:start:verify_private_authwit\n pub fn verify_private_authwit(self, inner_hash: Field) -> Field {\n // The `inner_hash` is \"siloed\" with the `msg_sender` to ensure that only it can\n // consume the message.\n // This ensures that contracts cannot consume messages that are not intended for them.\n let message_hash = compute_authwit_message_hash(\n self.context.msg_sender(),\n self.context.chain_id(),\n self.context.version(),\n inner_hash\n );\n let valid_fn = self.is_valid_impl;\n assert(valid_fn(self.context, message_hash) == true, \"Message not authorized by account\");\n IS_VALID_SELECTOR\n }\n // docs:end:verify_private_authwit\n}\n"},"76":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/app.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__SIGNATURE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\n\nuse crate::entrypoint::function_call::FunctionCall;\n\n// FUNCTION_CALL_SIZE * ACCOUNT_MAX_CALLS + 1\nglobal APP_PAYLOAD_SIZE: u32 = 21;\n// FUNCTION_CALL_SIZE_IN_BYTES * ACCOUNT_MAX_CALLS + 32\nglobal APP_PAYLOAD_SIZE_IN_BYTES: u32 = 424;\n\nglobal ACCOUNT_MAX_CALLS: u32 = 4;\n\n// Note: If you change the following struct you have to update default_entrypoint.ts\n// docs:start:app-payload-struct\npub struct AppPayload {\n function_calls: [FunctionCall; ACCOUNT_MAX_CALLS],\n nonce: Field,\n}\n// docs:end:app-payload-struct\n\nimpl Serialize<APP_PAYLOAD_SIZE> for AppPayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; APP_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, APP_PAYLOAD_SIZE> = BoundedVec::new();\n for call in self.function_calls {\n fields.extend_from_array(call.serialize());\n }\n fields.push(self.nonce);\n fields.storage\n }\n}\n\nimpl Hash for AppPayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__SIGNATURE_PAYLOAD)\n }\n}\n\nimpl AppPayload {\n // Serializes the payload as an array of bytes. Useful for hashing with sha256.\n fn to_be_bytes(self) -> [u8; APP_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, APP_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..ACCOUNT_MAX_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n\n bytes.storage\n }\n\n // Executes all private and public calls\n // docs:start:entrypoint-execute-calls\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n }\n // docs:end:entrypoint-execute-calls\n}\n"},"78":{"path":"/usr/src/noir-projects/aztec-nr/authwit/src/entrypoint/fee.nr","source":"use dep::aztec::prelude::PrivateContext;\nuse dep::aztec::protocol_types::{\n constants::GENERATOR_INDEX__FEE_PAYLOAD, hash::poseidon2_hash_with_separator,\n traits::{Hash, Serialize}\n};\nuse crate::entrypoint::function_call::FunctionCall;\n\n// 2 * 5 (FUNCTION_CALL_SIZE) + 2\nglobal FEE_PAYLOAD_SIZE: u32 = 12;\n\n// 2 * 98 (FUNCTION_CALL_SIZE_IN_BYTES) + 32\nglobal FEE_PAYLOAD_SIZE_IN_BYTES: u32 = 228;\n\nglobal MAX_FEE_FUNCTION_CALLS: u32 = 2;\n\n// docs:start:fee-payload-struct\npub struct FeePayload {\n function_calls: [FunctionCall; MAX_FEE_FUNCTION_CALLS],\n nonce: Field,\n is_fee_payer: bool,\n}\n// docs:end:fee-payload-struct\n\nimpl Serialize<FEE_PAYLOAD_SIZE> for FeePayload {\n // Serializes the entrypoint struct\n fn serialize(self) -> [Field; FEE_PAYLOAD_SIZE] {\n let mut fields: BoundedVec<Field, FEE_PAYLOAD_SIZE> = BoundedVec::new();\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n fields.extend_from_array(self.function_calls[i].serialize());\n }\n fields.push(self.nonce);\n fields.push(self.is_fee_payer as Field);\n fields.storage\n }\n}\n\nimpl Hash for FeePayload {\n fn hash(self) -> Field {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__FEE_PAYLOAD)\n }\n}\n\nimpl FeePayload {\n fn to_be_bytes(self) -> [u8; FEE_PAYLOAD_SIZE_IN_BYTES] {\n let mut bytes: BoundedVec<u8, FEE_PAYLOAD_SIZE_IN_BYTES> = BoundedVec::new();\n\n for i in 0..MAX_FEE_FUNCTION_CALLS {\n bytes.extend_from_array(self.function_calls[i].to_be_bytes());\n }\n bytes.extend_from_array(self.nonce.to_be_bytes::<32>());\n bytes.push(self.is_fee_payer as u8);\n\n bytes.storage\n }\n\n fn execute_calls(self, context: &mut PrivateContext) {\n for call in self.function_calls {\n if !call.target_address.is_zero() {\n if call.is_public {\n context.call_public_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n } else {\n let _result = context.call_private_function_with_packed_args(\n call.target_address,\n call.function_selector,\n call.args_hash,\n call.is_static,\n false\n );\n }\n }\n }\n if self.is_fee_payer {\n context.set_as_fee_payer();\n }\n }\n}\n"},"84":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/point_to_symmetric_key.nr","source":"use dep::protocol_types::{constants::GENERATOR_INDEX__SYMMETRIC_KEY, scalar::Scalar, point::Point, utils::arr_copy_slice};\nuse crate::utils::point::point_to_bytes;\nuse std::{hash::sha256, embedded_curve_ops::multi_scalar_mul};\n\n// TODO(#5726): This function is called deriveAESSecret in TS. I don't like point_to_symmetric_key name much since\n// point is not the only input of the function. Unify naming with TS once we have a better name.\npub fn point_to_symmetric_key(secret: Scalar, point: Point) -> [u8; 32] {\n let shared_secret: Point = multi_scalar_mul([point], [secret]);\n let shared_secret = point_to_bytes(shared_secret);\n let mut shared_secret_bytes_with_separator = [0 as u8; 33];\n shared_secret_bytes_with_separator = arr_copy_slice(shared_secret, shared_secret_bytes_with_separator, 0);\n shared_secret_bytes_with_separator[32] = GENERATOR_INDEX__SYMMETRIC_KEY;\n sha256(shared_secret_bytes_with_separator)\n}\n\n#[test]\nunconstrained fn test_point_to_symmetric_key_matches_noir() {\n // Value taken from \"derive shared secret\" test in encrypt_buffer.test.ts\n let secret = Scalar {\n lo: 0x00000000000000000000000000000000649e7ca01d9de27b21624098b897babd,\n hi: 0x0000000000000000000000000000000023b3127c127b1f29a7adff5cccf8fb06\n };\n let point = Point {\n x: 0x2688431c705a5ff3e6c6f2573c9e3ba1c1026d2251d0dbbf2d810aa53fd1d186,\n y: 0x1e96887b117afca01c00468264f4f80b5bb16d94c1808a448595f115556e5c8e,\n is_infinite: false\n };\n\n let key = point_to_symmetric_key(secret, point);\n\n // The following value was generated by `encrypt_buffer.test.ts`.\n // --> Run the test with AZTEC_GENERATE_TEST_DATA=1 flag to update test data.\n let key_from_typescript = [\n 251, 232, 177, 34, 2, 174, 35, 92, 165, 118, 168, 3, 153, 140, 46, 210, 203, 154, 184, 158, 236, 33, 95, 77, 93, 120, 72, 88, 190, 209, 64, 159\n ];\n assert_eq(key, key_from_typescript);\n}\n"},"85":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/public_keys.nr","source":"use dep::protocol_types::{\n address::PublicKeysHash, constants::GENERATOR_INDEX__PUBLIC_KEYS_HASH,\n hash::poseidon2_hash_with_separator, point::{Point, POINT_LENGTH},\n traits::{Deserialize, Serialize, Empty, is_empty, Hash}\n};\n\nglobal PUBLIC_KEYS_LENGTH: u32 = 12;\n\npub struct PublicKeys {\n npk_m: NpkM,\n ivpk_m: IvpkM,\n ovpk_m: OvpkM,\n tpk_m: TpkM,\n}\n\npub trait ToPoint {\n fn to_point(self) -> Point;\n}\n\npub struct NpkM {\n inner: Point\n}\n\nimpl ToPoint for NpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for NpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\n// Note: If we store npk_m_hash directly we can remove this trait implementation. See #8091\nimpl Hash for NpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\npub struct IvpkM {\n inner: Point\n}\n\nimpl ToPoint for IvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for IvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct OvpkM {\n inner: Point\n}\n\nimpl Hash for OvpkM {\n fn hash(self) -> Field {\n self.inner.hash()\n }\n}\n\nimpl ToPoint for OvpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Serialize<POINT_LENGTH> for OvpkM {\n fn serialize(self) -> [Field; POINT_LENGTH] {\n self.inner.serialize()\n }\n}\n\npub struct TpkM {\n inner: Point\n}\n\nimpl ToPoint for TpkM {\n fn to_point(self) -> Point {\n self.inner\n }\n}\n\nimpl Empty for PublicKeys {\n fn empty() -> Self {\n PublicKeys {\n npk_m: NpkM { inner: Point::empty() },\n ivpk_m: IvpkM { inner: Point::empty() },\n ovpk_m: OvpkM { inner: Point::empty() },\n tpk_m: TpkM { inner: Point::empty() }\n }\n }\n}\n\nimpl Eq for PublicKeys {\n fn eq(self, other: PublicKeys) -> bool {\n (self.npk_m.inner == other.npk_m.inner)\n & (self.ivpk_m.inner == other.ivpk_m.inner)\n & (self.ovpk_m.inner == other.ovpk_m.inner)\n & (self.tpk_m.inner == other.tpk_m.inner)\n }\n}\n\nimpl PublicKeys {\n pub fn hash(self) -> PublicKeysHash {\n PublicKeysHash::from_field(\n if is_empty(self) {\n 0\n } else {\n poseidon2_hash_with_separator(self.serialize(), GENERATOR_INDEX__PUBLIC_KEYS_HASH as Field)\n }\n )\n }\n}\n\nimpl Serialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn serialize(self) -> [Field; PUBLIC_KEYS_LENGTH] {\n [\n self.npk_m.inner.x,\n self.npk_m.inner.y,\n self.npk_m.inner.is_infinite as Field,\n self.ivpk_m.inner.x,\n self.ivpk_m.inner.y,\n self.ivpk_m.inner.is_infinite as Field,\n self.ovpk_m.inner.x,\n self.ovpk_m.inner.y,\n self.ovpk_m.inner.is_infinite as Field,\n self.tpk_m.inner.x,\n self.tpk_m.inner.y,\n self.tpk_m.inner.is_infinite as Field\n ]\n }\n}\n\nimpl Deserialize<PUBLIC_KEYS_LENGTH> for PublicKeys {\n fn deserialize(serialized: [Field; PUBLIC_KEYS_LENGTH]) -> PublicKeys {\n PublicKeys {\n npk_m: NpkM { inner: Point { x: serialized[0], y: serialized[1], is_infinite: serialized[2] as bool } },\n ivpk_m: IvpkM { inner: Point { x: serialized[3], y: serialized[4], is_infinite: serialized[5] as bool } },\n ovpk_m: OvpkM { inner: Point { x: serialized[6], y: serialized[7], is_infinite: serialized[8] as bool } },\n tpk_m: TpkM { inner: Point { x: serialized[9], y: serialized[10], is_infinite: serialized[11] as bool } }\n }\n }\n}\n\n#[test]\nunconstrained fn compute_public_keys_hash() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let actual = keys.hash();\n let expected_public_keys_hash = 0x0fecd9a32db731fec1fded1b9ff957a1625c069245a3613a2538bd527068b0ad;\n\n assert(actual.to_field() == expected_public_keys_hash);\n}\n\n#[test]\nunconstrained fn compute_empty_hash() {\n let keys = PublicKeys::empty();\n\n let actual = keys.hash();\n let test_data_empty_hash = 0x0000000000000000000000000000000000000000000000000000000000000000;\n\n assert(actual.to_field() == test_data_empty_hash);\n}\n\n#[test]\nunconstrained fn test_public_keys_serialization() {\n let keys = PublicKeys {\n npk_m: NpkM { inner: Point { x: 1, y: 2, is_infinite: false } },\n ivpk_m: IvpkM { inner: Point { x: 3, y: 4, is_infinite: false } },\n ovpk_m: OvpkM { inner: Point { x: 5, y: 6, is_infinite: false } },\n tpk_m: TpkM { inner: Point { x: 7, y: 8, is_infinite: false } }\n };\n\n let serialized = keys.serialize();\n let deserialized = PublicKeys::deserialize(serialized);\n\n assert_eq(keys.npk_m.inner.x, deserialized.npk_m.inner.x);\n assert_eq(keys.npk_m.inner.y, deserialized.npk_m.inner.y);\n assert_eq(keys.ivpk_m.inner.x, deserialized.ivpk_m.inner.x);\n assert_eq(keys.ivpk_m.inner.y, deserialized.ivpk_m.inner.y);\n assert_eq(keys.ovpk_m.inner.x, deserialized.ovpk_m.inner.x);\n assert_eq(keys.ovpk_m.inner.y, deserialized.ovpk_m.inner.y);\n assert_eq(keys.tpk_m.inner.x, deserialized.tpk_m.inner.x);\n assert_eq(keys.tpk_m.inner.y, deserialized.tpk_m.inner.y);\n}\n"},"87":{"path":"/usr/src/noir-projects/aztec-nr/aztec/src/keys/getters/mod.nr","source":"use dep::protocol_types::address::AztecAddress;\nuse crate::{\n oracle::{keys::get_public_keys_and_partial_address, key_validation_request::get_key_validation_request},\n keys::{public_keys::PublicKeys, constants::{NULLIFIER_INDEX, OUTGOING_INDEX}}\n};\n\nmod test;\n\nunconstrained pub fn get_nsk_app(npk_m_hash: Field) -> Field {\n get_key_validation_request(npk_m_hash, NULLIFIER_INDEX).sk_app\n}\n\n// A helper function that gets app-siloed outgoing viewing key for a given `ovpk_m_hash`. This function is used\n// in unconstrained contexts only - when computing unconstrained note logs. The safe alternative is `request_ovsk_app`\n// function defined on `PrivateContext`.\nunconstrained pub fn get_ovsk_app(ovpk_m_hash: Field) -> Field {\n get_key_validation_request(ovpk_m_hash, OUTGOING_INDEX).sk_app\n}\n\n// Returns all public keys for a given account, applying proper constraints to the context. We read all\n// keys at once since the constraints for reading them all are actually fewer than if we read them one at a time - any\n// read keys that are not required by the caller can simply be discarded.\npub fn get_public_keys(account: AztecAddress) -> PublicKeys {\n let (hinted_canonical_public_keys, partial_address) = unsafe {\n get_public_keys_and_partial_address(account)\n };\n assert_eq(\n account, AztecAddress::compute(hinted_canonical_public_keys.hash(), partial_address), \"Invalid public keys hint for address\"\n );\n\n hinted_canonical_public_keys\n}\n"}}}
|