diff --git a/.circleci/config.yml b/.circleci/config.yml index a7864fb23b59..10870b5699c9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -685,6 +685,18 @@ jobs: name: "Test" command: cond_spot_run_tests end-to-end e2e_deploy_contract.test.ts + e2e-lending-contract: + docker: + - image: aztecprotocol/alpine-build-image + resource_class: small + steps: + - *checkout + - *setup_env + - run: + name: "Test" + command: cond_spot_run_tests end-to-end e2e_lending_contract.test.ts + + e2e-zk-token-contract: docker: - image: aztecprotocol/alpine-build-image @@ -1115,6 +1127,7 @@ workflows: - e2e-2-rpc-servers: *e2e_test - e2e-deploy-contract: *e2e_test + - e2e-lending-contract: *e2e_test - e2e-zk-token-contract: *e2e_test - e2e-block-building: *e2e_test - e2e-nested-contract: *e2e_test @@ -1136,6 +1149,7 @@ workflows: requires: - e2e-2-rpc-servers - e2e-deploy-contract + - e2e-lending-contract - e2e-zk-token-contract - e2e-block-building - e2e-nested-contract diff --git a/circuits/cpp/barretenberg/sol/foundry.toml b/circuits/cpp/barretenberg/sol/foundry.toml index 15f71ad424b7..4bb153bc7dea 100644 --- a/circuits/cpp/barretenberg/sol/foundry.toml +++ b/circuits/cpp/barretenberg/sol/foundry.toml @@ -7,6 +7,6 @@ ffi = true [fuzz] runs = 1 -solc = "0.8.18" +solc = "0.8.21" # See more config options https://github.com/foundry-rs/foundry/tree/master/config \ No newline at end of file diff --git a/circuits/cpp/barretenberg/sol/lib/forge-std b/circuits/cpp/barretenberg/sol/lib/forge-std index f06ad8944e43..74cfb77e308d 160000 --- a/circuits/cpp/barretenberg/sol/lib/forge-std +++ b/circuits/cpp/barretenberg/sol/lib/forge-std @@ -1 +1 @@ -Subproject commit f06ad8944e436e639bce09cfccc55466d99e79d8 +Subproject commit 74cfb77e308dd188d2f58864aaf44963ae6b88b1 diff --git a/circuits/cpp/barretenberg/sol/lib/openzeppelin-contracts b/circuits/cpp/barretenberg/sol/lib/openzeppelin-contracts index 8d633cb7d169..e50c24f5839d 160000 --- a/circuits/cpp/barretenberg/sol/lib/openzeppelin-contracts +++ b/circuits/cpp/barretenberg/sol/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit 8d633cb7d169f2f8595b273660b00b69e845c2fe +Subproject commit e50c24f5839db17f46991478384bfda14acfb830 diff --git a/circuits/cpp/src/aztec3/circuits/abis/function_data.hpp b/circuits/cpp/src/aztec3/circuits/abis/function_data.hpp index 52ea624c4cdf..bc5cfefca76e 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/function_data.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/function_data.hpp @@ -18,15 +18,16 @@ template struct FunctionData { using fr = typename NCT::fr; uint32 function_selector; // e.g. 1st 4-bytes of abi-encoding of function. + boolean is_internal = false; boolean is_private = false; boolean is_constructor = false; - MSGPACK_FIELDS(function_selector, is_private, is_constructor); + MSGPACK_FIELDS(function_selector, is_internal, is_private, is_constructor); boolean operator==(FunctionData const& other) const { - return function_selector == other.function_selector && is_private == other.is_private && - is_constructor == other.is_constructor; + return function_selector == other.function_selector && is_internal == other.is_internal && + is_private == other.is_private && is_constructor == other.is_constructor; }; template FunctionData> to_circuit_type(Builder& builder) const @@ -38,6 +39,7 @@ template struct FunctionData { FunctionData> function_data = { to_ct(function_selector), + to_ct(is_internal), to_ct(is_private), to_ct(is_constructor), }; @@ -52,6 +54,7 @@ template struct FunctionData { FunctionData function_data = { to_nt(function_selector), + to_nt(is_internal), to_nt(is_private), to_nt(is_constructor), }; @@ -64,6 +67,7 @@ template struct FunctionData { static_assert(!(std::is_same::value)); fr(function_selector).set_public(); + fr(is_internal).set_public(); fr(is_private).set_public(); fr(is_constructor).set_public(); } @@ -73,6 +77,7 @@ template struct FunctionData { { std::vector const inputs = { fr(function_selector), + fr(is_internal), fr(is_private), fr(is_constructor), }; @@ -84,6 +89,7 @@ template struct FunctionData { template std::ostream& operator<<(std::ostream& os, FunctionData const& function_data) { return os << "function_selector: " << function_data.function_selector << "\n" + << "is_internal: " << function_data.is_internal << "\n" << "is_private: " << function_data.is_private << "\n" << "is_constructor: " << function_data.is_constructor << "\n"; } diff --git a/circuits/cpp/src/aztec3/circuits/abis/function_leaf_preimage.hpp b/circuits/cpp/src/aztec3/circuits/abis/function_leaf_preimage.hpp index 370bf7e81286..76a9144112d6 100644 --- a/circuits/cpp/src/aztec3/circuits/abis/function_leaf_preimage.hpp +++ b/circuits/cpp/src/aztec3/circuits/abis/function_leaf_preimage.hpp @@ -32,14 +32,15 @@ template struct FunctionLeafPreimage { using uint32 = typename NCT::uint32; uint32 function_selector = 0; + boolean is_internal = false; boolean is_private = false; fr vk_hash = 0; fr acir_hash = 0; boolean operator==(FunctionLeafPreimage const& other) const { - return function_selector == other.function_selector && is_private == other.is_private && - vk_hash == other.vk_hash && acir_hash == other.acir_hash; + return function_selector == other.function_selector && is_internal == other.is_internal && + is_private == other.is_private && vk_hash == other.vk_hash && acir_hash == other.acir_hash; }; template FunctionLeafPreimage> to_circuit_type(Builder& builder) const @@ -50,10 +51,7 @@ template struct FunctionLeafPreimage { auto to_ct = [&](auto& e) { return aztec3::utils::types::to_ct(builder, e); }; FunctionLeafPreimage> preimage = { - to_ct(function_selector), - to_ct(is_private), - to_ct(vk_hash), - to_ct(acir_hash), + to_ct(function_selector), to_ct(is_internal), to_ct(is_private), to_ct(vk_hash), to_ct(acir_hash), }; return preimage; @@ -65,10 +63,7 @@ template struct FunctionLeafPreimage { auto to_nt = [&](auto& e) { return aztec3::utils::types::to_nt(e); }; FunctionLeafPreimage preimage = { - to_nt(function_selector), - to_nt(is_private), - to_nt(vk_hash), - to_nt(acir_hash), + to_nt(function_selector), to_nt(is_internal), to_nt(is_private), to_nt(vk_hash), to_nt(acir_hash), }; return preimage; @@ -79,6 +74,7 @@ template struct FunctionLeafPreimage { static_assert(!(std::is_same::value)); function_selector.set_public(); + fr(is_internal).set_public(); fr(is_private).set_public(); vk_hash.set_public(); acir_hash.set_public(); @@ -87,10 +83,7 @@ template struct FunctionLeafPreimage { fr hash() const { std::vector const inputs = { - function_selector, - fr(is_private), - vk_hash, - acir_hash, + function_selector, fr(is_internal), fr(is_private), vk_hash, acir_hash, }; return NCT::compress(inputs, GeneratorIndex::FUNCTION_LEAF); } @@ -101,6 +94,7 @@ template void read(uint8_t const*& it, FunctionLeafPreimage& using serialize::read; read(it, preimage.function_selector); + read(it, preimage.is_internal); read(it, preimage.is_private); read(it, preimage.vk_hash); read(it, preimage.acir_hash); @@ -111,6 +105,7 @@ template void write(std::vector& buf, FunctionLeafPreima using serialize::write; write(buf, preimage.function_selector); + write(buf, preimage.is_internal); write(buf, preimage.is_private); write(buf, preimage.vk_hash); write(buf, preimage.acir_hash); @@ -119,6 +114,7 @@ template void write(std::vector& buf, FunctionLeafPreima template std::ostream& operator<<(std::ostream& os, FunctionLeafPreimage const& preimage) { return os << "function_selector: " << preimage.function_selector << "\n" + << "is_internal: " << preimage.is_internal << "\n" << "is_private: " << preimage.is_private << "\n" << "vk_hash: " << preimage.vk_hash << "\n" << "acir_hash: " << preimage.acir_hash << "\n"; diff --git a/circuits/cpp/src/aztec3/circuits/hash.hpp b/circuits/cpp/src/aztec3/circuits/hash.hpp index 952c1331394e..f3b6763cb34d 100644 --- a/circuits/cpp/src/aztec3/circuits/hash.hpp +++ b/circuits/cpp/src/aztec3/circuits/hash.hpp @@ -254,6 +254,7 @@ void check_membership(Builder& builder, * * @tparam NCT (native or circuit) * @param function_selector in leaf preimage + * @param is_internal in leaf preimage * @param is_private in leaf preimage * @param vk_hash in leaf preimage * @param acir_hash in leaf preimage @@ -263,6 +264,7 @@ void check_membership(Builder& builder, */ template typename NCT::fr function_tree_root_from_siblings( typename NCT::uint32 const& function_selector, + typename NCT::boolean const& is_internal, typename NCT::boolean const& is_private, typename NCT::fr const& vk_hash, typename NCT::fr const& acir_hash, @@ -271,6 +273,7 @@ template typename NCT::fr function_tree_root_from_siblings( { const auto function_leaf_preimage = FunctionLeafPreimage{ .function_selector = function_selector, + .is_internal = is_internal, .is_private = is_private, .vk_hash = vk_hash, .acir_hash = acir_hash, diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/common.cpp b/circuits/cpp/src/aztec3/circuits/kernel/private/common.cpp index e89ce69dea81..f46ff8593731 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/common.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/common.cpp @@ -365,16 +365,24 @@ void common_contract_logic(DummyBuilder& builder, /* We need to compute the root of the contract tree, starting from the function's VK: * - Compute the vk_hash (done above) - * - Compute the function_leaf: hash(function_selector, is_private, vk_hash, acir_hash) + * - Compute the function_leaf: hash(function_selector, is_internal, is_private, vk_hash, acir_hash) * - Hash the function_leaf with the function_leaf's sibling_path to get the function_tree_root * - Compute the contract_leaf: hash(contract_address, portal_contract_address, function_tree_root) * - Hash the contract_leaf with the contract_leaf's sibling_path to get the contract_tree_root */ - // The logic below ensures that the contract exists in the contracts tree + // Ensures that if the function is internal, only the contract itself can call it + if (private_call.call_stack_item.function_data.is_internal) { + builder.do_assert( + storage_contract_address == private_call.call_stack_item.public_inputs.call_context.msg_sender, + "call is internal, but msg_sender is not self", + CircuitErrorCode::PRIVATE_KERNEL__IS_INTERNAL_BUT_NOT_SELF_CALL); + } + // The logic below ensures that the contract exists in the contracts tree auto const& computed_function_tree_root = function_tree_root_from_siblings(private_call.call_stack_item.function_data.function_selector, + private_call.call_stack_item.function_data.is_internal, true, // is_private private_call_vk_hash, private_call.acir_hash, diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_inner.test.cpp b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_inner.test.cpp index d61d01042af7..3d737fa455e8 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_inner.test.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/native_private_kernel_circuit_inner.test.cpp @@ -64,6 +64,26 @@ TEST_F(native_private_kernel_inner_tests, private_function_zero_storage_contract "contract address can't be 0 for non-contract deployment related transactions"); } + +TEST_F(native_private_kernel_inner_tests, private_function_incorrect_is_internal) +{ + auto private_inputs = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); + + // Make the call internal but msg_sender != storage_contract_address. + private_inputs.private_call.call_stack_item.function_data.is_internal = true; + private_inputs.private_call.call_stack_item.public_inputs.call_context.msg_sender = 1; + private_inputs.private_call.call_stack_item.public_inputs.call_context.storage_contract_address = 2; + + // Invoke the native private kernel circuit + DummyBuilder builder = DummyBuilder("private_kernel_tests__private_function_incorrect_contract_tree_root_fails"); + native_private_kernel_circuit_inner(builder, private_inputs); + + // Assertion checks + EXPECT_TRUE(builder.failed()); + EXPECT_EQ(builder.get_first_failure().code, CircuitErrorCode::PRIVATE_KERNEL__IS_INTERNAL_BUT_NOT_SELF_CALL); + EXPECT_EQ(builder.get_first_failure().message, "call is internal, but msg_sender is not self"); +} + TEST_F(native_private_kernel_inner_tests, private_function_incorrect_contract_tree_root_fails) { auto private_inputs = do_private_call_get_kernel_inputs_inner(false, deposit, standard_test_args()); diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/testing_harness.cpp b/circuits/cpp/src/aztec3/circuits/kernel/private/testing_harness.cpp index fdb199bb11ef..dc5d281d1bd3 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/testing_harness.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/testing_harness.cpp @@ -205,6 +205,7 @@ std::pair, ContractDeploymentData> create_private_call_d call_context.storage_contract_address = contract_address; } else { const NT::fr& function_tree_root = function_tree_root_from_siblings(function_data.function_selector, + function_data.is_internal, function_data.is_private, private_circuit_vk_hash, acir_hash, diff --git a/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp b/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp index 42e6d08c45f9..79189514a827 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp @@ -607,6 +607,22 @@ TEST(public_kernel_tests, no_bytecode_hash_should_fail) ASSERT_EQ(dummyBuilder.get_first_failure().code, CircuitErrorCode::PUBLIC_KERNEL__BYTECODE_HASH_INVALID); } + +TEST(public_kernel_tests, invalid_is_internal) +{ + DummyBuilder dummyBuilder = DummyBuilder("public_kernel_tests__no_bytecode_hash_should_fail"); + PublicKernelInputs inputs = get_kernel_inputs_with_previous_kernel(true); + + // Make the call internal but msg_sender != storage_contract_address. + inputs.public_call.call_stack_item.function_data.is_internal = true; + inputs.public_call.call_stack_item.public_inputs.call_context.msg_sender = 1; + inputs.public_call.call_stack_item.public_inputs.call_context.storage_contract_address = 2; + + auto public_inputs = native_public_kernel_circuit_private_previous_kernel(dummyBuilder, inputs); + ASSERT_TRUE(dummyBuilder.failed()); + ASSERT_EQ(dummyBuilder.get_first_failure().code, CircuitErrorCode::PUBLIC_KERNEL__IS_INTERNAL_BUT_NOT_SELF_CALL); +} + TEST(public_kernel_tests, contract_address_must_be_valid) { DummyBuilder dummyBuilder = DummyBuilder("public_kernel_tests__contract_address_must_be_valid"); diff --git a/circuits/cpp/src/aztec3/circuits/kernel/public/common.hpp b/circuits/cpp/src/aztec3/circuits/kernel/public/common.hpp index ee2a45a80eee..b41c9c980d2a 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/public/common.hpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/public/common.hpp @@ -192,6 +192,15 @@ void common_validate_inputs(DummyBuilder& builder, KernelInput const& public_ker builder.do_assert(public_kernel_inputs.public_call.bytecode_hash != 0, "Bytecode hash must be non-zero", CircuitErrorCode::PUBLIC_KERNEL__BYTECODE_HASH_INVALID); + + if (this_call_stack_item.function_data.is_internal) { + auto const target = this_call_stack_item.contract_address; + auto const sender = this_call_stack_item.public_inputs.call_context.msg_sender; + + builder.do_assert(target == sender, + "call is internal, but msg_sender is not self", + CircuitErrorCode::PUBLIC_KERNEL__IS_INTERNAL_BUT_NOT_SELF_CALL); + } } template diff --git a/circuits/cpp/src/aztec3/constants.hpp b/circuits/cpp/src/aztec3/constants.hpp index 542dc4f3b874..1a0d64a2fd7d 100644 --- a/circuits/cpp/src/aztec3/constants.hpp +++ b/circuits/cpp/src/aztec3/constants.hpp @@ -132,8 +132,8 @@ enum GeneratorIndex { OUTER_NULLIFIER, // Size = 2 PUBLIC_DATA_READ, // Size = 2 PUBLIC_DATA_UPDATE_REQUEST, // Size = 3 - FUNCTION_DATA, // Size = 3 - FUNCTION_LEAF, // Size = 4 + FUNCTION_DATA, // Size = 4 + FUNCTION_LEAF, // Size = 5 CONTRACT_DEPLOYMENT_DATA, // Size = 4 CONSTRUCTOR, // Size = 3 CONSTRUCTOR_ARGS, // Size = 8 @@ -207,7 +207,7 @@ constexpr size_t VIEW_NOTE_ORACLE_RETURN_LENGTH = MAX_NOTES_PER_PAGE * (MAX_NOTE constexpr size_t CALL_CONTEXT_LENGTH = 6; constexpr size_t COMMITMENT_TREES_ROOTS_LENGTH = 5; -constexpr size_t FUNCTION_DATA_LENGTH = 3; +constexpr size_t FUNCTION_DATA_LENGTH = 4; constexpr size_t CONTRACT_DEPLOYMENT_DATA_LENGTH = 6; // Change this ONLY if you have changed the PrivateCircuitPublicInputs structure in C++. diff --git a/circuits/cpp/src/aztec3/utils/circuit_errors.hpp b/circuits/cpp/src/aztec3/utils/circuit_errors.hpp index 2931bf2ab9a7..12011e3d079a 100644 --- a/circuits/cpp/src/aztec3/utils/circuit_errors.hpp +++ b/circuits/cpp/src/aztec3/utils/circuit_errors.hpp @@ -32,6 +32,7 @@ enum CircuitErrorCode : uint16_t { PRIVATE_KERNEL__TRANSIENT_READ_REQUEST_NO_MATCH = 2019, PRIVATE_KERNEL__READ_REQUEST_WITNESSES_ARRAY_LENGTH_MISMATCH = 2020, PRIVATE_KERNEL__UNRESOLVED_NON_TRANSIENT_READ_REQUEST = 2021, + PRIVATE_KERNEL__IS_INTERNAL_BUT_NOT_SELF_CALL = 2022, // Public kernel related errors PUBLIC_KERNEL_CIRCUIT_FAILED = 3000, @@ -61,6 +62,7 @@ enum CircuitErrorCode : uint16_t { PUBLIC_KERNEL__NEW_NULLIFIERS_NOT_EMPTY_IN_FIRST_ITERATION = 3025, PUBLIC_KERNEL__NEW_COMMITMENTS_PROHIBITED_IN_STATIC_CALL = 3026, PUBLIC_KERNEL__NEW_NULLIFIERS_PROHIBITED_IN_STATIC_CALL = 3027, + PUBLIC_KERNEL__IS_INTERNAL_BUT_NOT_SELF_CALL = 3028, BASE__CIRCUIT_FAILED = 4000, BASE__KERNEL_PROOF_VERIFICATION_FAILED = 4001, diff --git a/l1-contracts/foundry.toml b/l1-contracts/foundry.toml index 261e5c389308..f88f8755d7e1 100644 --- a/l1-contracts/foundry.toml +++ b/l1-contracts/foundry.toml @@ -2,7 +2,7 @@ src = 'src' out = 'out' libs = ['lib'] -solc = "0.8.18" +solc = "0.8.21" remappings = [ "@oz/=lib/openzeppelin-contracts/contracts/", diff --git a/l1-contracts/lib/forge-std b/l1-contracts/lib/forge-std index fc560fa34fa1..75f1746c949a 160000 --- a/l1-contracts/lib/forge-std +++ b/l1-contracts/lib/forge-std @@ -1 +1 @@ -Subproject commit fc560fa34fa12a335a50c35d92e55a6628ca467c +Subproject commit 75f1746c949ae56377611e5f2128aa93d381431f diff --git a/l1-contracts/lib/openzeppelin-contracts b/l1-contracts/lib/openzeppelin-contracts index 0a25c1940ca2..7222a31d5486 160000 --- a/l1-contracts/lib/openzeppelin-contracts +++ b/l1-contracts/lib/openzeppelin-contracts @@ -1 +1 @@ -Subproject commit 0a25c1940ca220686588c4af3ec526f725fe2582 +Subproject commit 7222a31d548695998a475c9661fa159ef45a0e88 diff --git a/l1-contracts/test/portals/UniswapPortal.sol b/l1-contracts/test/portals/UniswapPortal.sol index b72cb5c9225f..048eeeeb7398 100644 --- a/l1-contracts/test/portals/UniswapPortal.sol +++ b/l1-contracts/test/portals/UniswapPortal.sol @@ -1,7 +1,6 @@ pragma solidity >=0.8.18; import {IERC20} from "@oz/token/ERC20/IERC20.sol"; -import {SafeERC20} from "@oz/token/ERC20/utils/SafeERC20.sol"; import {IRegistry} from "@aztec/core/interfaces/messagebridge/IRegistry.sol"; import {TokenPortal} from "./TokenPortal.sol"; @@ -18,8 +17,6 @@ import {Hash} from "@aztec/core/libraries/Hash.sol"; * and the message boxes (inbox & outbox). */ contract UniswapPortal { - using SafeERC20 for IERC20; - ISwapRouter public constant ROUTER = ISwapRouter(0xE592427A0AEce92De3Edee1F18E0157C05861564); IRegistry public registry; @@ -30,6 +27,13 @@ contract UniswapPortal { l2UniswapAddress = _l2UniswapAddress; } + // Using a struct here to avoid stack too deep errors + struct LocalSwapVars { + IERC20 inputAsset; + IERC20 outputAsset; + bytes32 contentHash; + } + /** * @notice Exit with funds from L2, perform swap on L1 and deposit output asset to L2 again * @dev `msg.value` indicates fee to submit message to inbox. Currently, anyone can call this method on your behalf. @@ -59,15 +63,16 @@ contract UniswapPortal { address _canceller, bool _withCaller ) public payable returns (bytes32) { - IERC20 inputAsset = TokenPortal(_inputTokenPortal).underlying(); - IERC20 outputAsset = TokenPortal(_outputTokenPortal).underlying(); + LocalSwapVars memory vars; + + vars.inputAsset = TokenPortal(_inputTokenPortal).underlying(); + vars.outputAsset = TokenPortal(_outputTokenPortal).underlying(); // Withdraw the input asset from the portal TokenPortal(_inputTokenPortal).withdraw(_inAmount, address(this), true); - bytes32 contentHash; { // prevent stack too deep errors - contentHash = Hash.sha256ToField( + vars.contentHash = Hash.sha256ToField( abi.encodeWithSignature( "swap(address,uint256,uint24,address,uint256,bytes32,bytes32,uint32,address,address)", _inputTokenPortal, @@ -89,7 +94,7 @@ contract UniswapPortal { DataStructures.L2ToL1Msg({ sender: DataStructures.L2Actor(l2UniswapAddress, 1), recipient: DataStructures.L1Actor(address(this), block.chainid), - content: contentHash + content: vars.contentHash }) ); @@ -97,8 +102,8 @@ contract UniswapPortal { ISwapRouter.ExactInputSingleParams memory swapParams; { swapParams = ISwapRouter.ExactInputSingleParams({ - tokenIn: address(inputAsset), - tokenOut: address(outputAsset), + tokenIn: address(vars.inputAsset), + tokenOut: address(vars.outputAsset), fee: _uniswapFeeTier, recipient: address(this), deadline: block.timestamp, @@ -107,11 +112,13 @@ contract UniswapPortal { sqrtPriceLimitX96: 0 }); } - inputAsset.safeApprove(address(ROUTER), _inAmount); + // Note, safeApprove was deprecated from Oz + vars.inputAsset.approve(address(ROUTER), _inAmount); uint256 amountOut = ROUTER.exactInputSingle(swapParams); // approve the output token portal to take funds from this contract - outputAsset.safeApprove(address(_outputTokenPortal), amountOut); + // Note, safeApprove was deprecated from Oz + vars.outputAsset.approve(address(_outputTokenPortal), amountOut); // Deposit the output asset to the L2 via its portal return TokenPortal(_outputTokenPortal).depositToAztec{value: msg.value}( diff --git a/yarn-project/acir-simulator/src/acvm/serialize.ts b/yarn-project/acir-simulator/src/acvm/serialize.ts index 7aadbc7c23f7..7e4f18cbd9f9 100644 --- a/yarn-project/acir-simulator/src/acvm/serialize.ts +++ b/yarn-project/acir-simulator/src/acvm/serialize.ts @@ -22,6 +22,7 @@ import { ACVMField, toACVMField } from './acvm.js'; export function toACVMFunctionData(functionData: FunctionData): ACVMField[] { return [ toACVMField(functionData.functionSelector), + toACVMField(functionData.isInternal), toACVMField(functionData.isPrivate), toACVMField(functionData.isConstructor), ]; diff --git a/yarn-project/acir-simulator/src/client/private_execution.test.ts b/yarn-project/acir-simulator/src/client/private_execution.test.ts index 790774b5b76a..96eeaf540258 100644 --- a/yarn-project/acir-simulator/src/client/private_execution.test.ts +++ b/yarn-project/acir-simulator/src/client/private_execution.test.ts @@ -99,7 +99,7 @@ describe('Private Execution test suite', () => { const txRequest = TxExecutionRequest.from({ origin, argsHash: packedArguments.hash, - functionData: new FunctionData(Buffer.alloc(4), true, isConstructor), + functionData: new FunctionData(Buffer.alloc(4), false, true, isConstructor), txContext: TxContext.from({ ...txContextFields, ...txContext }), packedArguments: [packedArguments], }); @@ -500,7 +500,7 @@ describe('Private Execution test suite', () => { }); describe('enqueued calls', () => { - it('parent should enqueue call to child', async () => { + it.each([false, true])('parent should enqueue call to child', async isInternal => { const parentAbi = ParentContractAbi.functions.find(f => f.name === 'enqueueCallToChild')!; const childAddress = AztecAddress.random(); const childPortalContractAddress = EthAddress.random(); @@ -508,6 +508,7 @@ describe('Private Execution test suite', () => { const parentAddress = AztecAddress.random(); oracle.getPortalContractAddress.mockImplementation(() => Promise.resolve(childPortalContractAddress)); + oracle.getFunctionABI.mockImplementation(() => Promise.resolve({ ...ChildContractAbi.functions[0], isInternal })); const args = [Fr.fromBuffer(childAddress.toBuffer()), Fr.fromBuffer(childSelector), 42n]; const result = await runSimulator({ @@ -519,7 +520,7 @@ describe('Private Execution test suite', () => { const publicCallRequest = PublicCallRequest.from({ contractAddress: childAddress, - functionData: new FunctionData(childSelector, false, false), + functionData: new FunctionData(childSelector, isInternal, false, false), args: [new Fr(42n)], callContext: CallContext.from({ msgSender: parentAddress, diff --git a/yarn-project/acir-simulator/src/client/private_execution.ts b/yarn-project/acir-simulator/src/client/private_execution.ts index f32eacfee036..2d0f654346ad 100644 --- a/yarn-project/acir-simulator/src/client/private_execution.ts +++ b/yarn-project/acir-simulator/src/client/private_execution.ts @@ -260,7 +260,7 @@ export class PrivateFunctionExecution { curve: Curve, ) { const targetAbi = await this.context.db.getFunctionABI(targetContractAddress, targetFunctionSelector); - const targetFunctionData = new FunctionData(targetFunctionSelector, true, false); + const targetFunctionData = new FunctionData(targetFunctionSelector, targetAbi.isInternal, true, false); const derivedCallContext = await this.deriveCallContext(callerContext, targetContractAddress, false, false); const context = this.context.extend(); @@ -293,11 +293,12 @@ export class PrivateFunctionExecution { targetArgs: Fr[], callerContext: CallContext, ): Promise { + const targetAbi = await this.context.db.getFunctionABI(targetContractAddress, targetFunctionSelector); const derivedCallContext = await this.deriveCallContext(callerContext, targetContractAddress, false, false); return PublicCallRequest.from({ args: targetArgs, callContext: derivedCallContext, - functionData: new FunctionData(targetFunctionSelector, false, false), + functionData: new FunctionData(targetFunctionSelector, targetAbi.isInternal, false, false), contractAddress: targetContractAddress, }); } diff --git a/yarn-project/acir-simulator/src/client/unconstrained_execution.test.ts b/yarn-project/acir-simulator/src/client/unconstrained_execution.test.ts index 983fa0113b9c..762c56781e28 100644 --- a/yarn-project/acir-simulator/src/client/unconstrained_execution.test.ts +++ b/yarn-project/acir-simulator/src/client/unconstrained_execution.test.ts @@ -75,7 +75,7 @@ describe('Unconstrained Execution test suite', () => { const execRequest: ExecutionRequest = { from: AztecAddress.random(), to: contractAddress, - functionData: new FunctionData(Buffer.alloc(4), true, true), + functionData: new FunctionData(Buffer.alloc(4), false, true, true), args: encodeArguments(abi, [owner]), }; diff --git a/yarn-project/acir-simulator/src/public/executor.ts b/yarn-project/acir-simulator/src/public/executor.ts index 7782e913a9ee..d32f9029fead 100644 --- a/yarn-project/acir-simulator/src/public/executor.ts +++ b/yarn-project/acir-simulator/src/public/executor.ts @@ -182,7 +182,10 @@ export class PublicExecutor { globalVariables: GlobalVariables, ) { const portalAddress = (await this.contractsDb.getPortalContractAddress(targetContractAddress)) ?? EthAddress.ZERO; - const functionData = new FunctionData(targetFunctionSelector, false, false); + // @todo @lherskind - Need to make this data accessible (See issue #1200) + //const abi = await this.contractsDb.getFunctionABI(targetContractAddress, targetFunctionSelector); + const isInternal = false; + const functionData = new FunctionData(targetFunctionSelector, isInternal, false, false); const callContext = CallContext.from({ msgSender: callerContext.storageContractAddress, diff --git a/yarn-project/acir-simulator/src/public/index.test.ts b/yarn-project/acir-simulator/src/public/index.test.ts index 16f07f3b7aad..4e20c24aabb8 100644 --- a/yarn-project/acir-simulator/src/public/index.test.ts +++ b/yarn-project/acir-simulator/src/public/index.test.ts @@ -63,7 +63,7 @@ describe('ACIR public execution simulator', () => { it('should run the mint function', async () => { const contractAddress = AztecAddress.random(); const mintAbi = PublicTokenContractAbi.functions.find(f => f.name === 'mint')!; - const functionData = new FunctionData(Buffer.alloc(4), false, false); + const functionData = new FunctionData(Buffer.alloc(4), false, false, false); const args = encodeArguments(mintAbi, [140, recipient]); const callContext = CallContext.from({ @@ -110,7 +110,7 @@ describe('ACIR public execution simulator', () => { beforeEach(() => { contractAddress = AztecAddress.random(); abi = PublicTokenContractAbi.functions.find(f => f.name === 'transfer')!; - functionData = new FunctionData(Buffer.alloc(4), false, false); + functionData = new FunctionData(Buffer.alloc(4), false, false, false); args = encodeArguments(abi, [140, recipient]); sender = AztecAddress.random(); @@ -198,7 +198,7 @@ describe('ACIR public execution simulator', () => { const initialValue = 3n; - const functionData = new FunctionData(parentEntryPointFnSelector, false, false); + const functionData = new FunctionData(parentEntryPointFnSelector, false, false, false); const args = encodeArguments(parentEntryPointFn, [ childContractAddress.toField().value, toBigInt(childValueFnSelector), @@ -250,7 +250,7 @@ describe('ACIR public execution simulator', () => { beforeEach(async () => { contractAddress = AztecAddress.random(); - functionData = new FunctionData(Buffer.alloc(4), false, false); + functionData = new FunctionData(Buffer.alloc(4), false, false, false); amount = new Fr(140); params = [amount, Fr.random()]; wasm = await CircuitsWasm.get(); diff --git a/yarn-project/aztec-rpc/src/aztec_rpc_server/aztec_rpc_server.ts b/yarn-project/aztec-rpc/src/aztec_rpc_server/aztec_rpc_server.ts index 45b7e9b41c69..d2ae7582ab5d 100644 --- a/yarn-project/aztec-rpc/src/aztec_rpc_server/aztec_rpc_server.ts +++ b/yarn-project/aztec-rpc/src/aztec_rpc_server/aztec_rpc_server.ts @@ -229,6 +229,9 @@ export class AztecRPCServer implements AztecRPC { if (!txRequest.functionData.isPrivate) { throw new Error(`Public entrypoints are not allowed`); } + if (txRequest.functionData.isInternal === undefined) { + throw new Error(`Unspecified internal are not allowed`); + } // We get the contract address from origin, since contract deployments are signalled as origin from their own address // TODO: Is this ok? Should it be changed to be from ZERO? @@ -382,6 +385,7 @@ export class AztecRPCServer implements AztecRPC { const functionData = new FunctionData( functionDao.selector, + functionDao.isInternal, functionDao.functionType === FunctionType.SECRET, false, ); diff --git a/yarn-project/aztec-rpc/src/contract_tree/index.ts b/yarn-project/aztec-rpc/src/contract_tree/index.ts index 3a85305eaa0f..1fef0ea17ace 100644 --- a/yarn-project/aztec-rpc/src/contract_tree/index.ts +++ b/yarn-project/aztec-rpc/src/contract_tree/index.ts @@ -90,7 +90,7 @@ export class ContractTree { const leaves = generateFunctionLeaves(functions, wasm); const root = computeFunctionTreeRoot(wasm, leaves); const constructorSelector = generateFunctionSelector(constructorAbi.name, constructorAbi.parameters); - const functionData = new FunctionData(constructorSelector, true, true); + const functionData = new FunctionData(constructorSelector, false, true, true); const vkHash = hashVKStr(constructorAbi.verificationKey, wasm); const argsHash = await computeVarArgsHash(wasm, args); const constructorHash = hashConstructor(wasm, functionData, argsHash, vkHash); @@ -157,11 +157,11 @@ export class ContractTree { const { address, portalContract } = this.contract; const root = await this.getFunctionTreeRoot(); const newContractData = new NewContractData(address, portalContract, root); - const committment = computeContractLeaf(this.wasm, newContractData); - const index = await this.contractCommitmentProvider.findContractIndex(committment.toBuffer()); + const commitment = computeContractLeaf(this.wasm, newContractData); + const index = await this.contractCommitmentProvider.findContractIndex(commitment.toBuffer()); if (index === undefined) { throw new Error( - `Failed to find contract at ${address} with portal ${portalContract} resulting in commitment ${committment}.`, + `Failed to find contract at ${address} with portal ${portalContract} resulting in commitment ${commitment}.`, ); } diff --git a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json index 29998af7c022..3c7873ea8ef2 100644 --- a/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json +++ b/yarn-project/aztec.js/src/abis/ecdsa_account_contract.json @@ -4,6 +4,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "signing_pub_key_x", @@ -37,6 +38,7 @@ { "name": "entrypoint", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "payload", @@ -102,6 +104,7 @@ { "name": "stev", "functionType": "unconstrained", + "isInternal": false, "parameters": [ { "name": "contract_address", diff --git a/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json b/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json index 978f315e48dc..f4ac800cf05d 100644 --- a/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json +++ b/yarn-project/aztec.js/src/abis/schnorr_single_key_account_contract.json @@ -4,12 +4,14 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [], "returnTypes": [] }, { "name": "entrypoint", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "payload", diff --git a/yarn-project/aztec.js/src/account_impl/single_key_account_contract.ts b/yarn-project/aztec.js/src/account_impl/single_key_account_contract.ts index cf7bbaa27067..26c477805153 100644 --- a/yarn-project/aztec.js/src/account_impl/single_key_account_contract.ts +++ b/yarn-project/aztec.js/src/account_impl/single_key_account_contract.ts @@ -48,7 +48,7 @@ export class SingleKeyAccountContract implements AccountImplementation { const txRequest = TxExecutionRequest.from({ argsHash: packedArgs.hash, origin: this.address, - functionData: new FunctionData(selector, true, false), + functionData: new FunctionData(selector, abi.isInternal, true, false), txContext, packedArguments: [...callsPackedArguments, packedArgs], }); diff --git a/yarn-project/aztec.js/src/account_impl/stored_key_account_contract.ts b/yarn-project/aztec.js/src/account_impl/stored_key_account_contract.ts index 2ad269223abf..417ac87f2d07 100644 --- a/yarn-project/aztec.js/src/account_impl/stored_key_account_contract.ts +++ b/yarn-project/aztec.js/src/account_impl/stored_key_account_contract.ts @@ -46,7 +46,7 @@ export class StoredKeyAccountContract implements AccountImplementation { const txRequest = TxExecutionRequest.from({ argsHash: packedArgs.hash, origin: this.address, - functionData: new FunctionData(selector, true, false), + functionData: new FunctionData(selector, abi.isInternal, true, false), txContext, packedArguments: [...callsPackedArguments, packedArgs], }); diff --git a/yarn-project/aztec.js/src/contract/contract.test.ts b/yarn-project/aztec.js/src/contract/contract.test.ts index edaa3bd888c8..c7bc28e9ab85 100644 --- a/yarn-project/aztec.js/src/contract/contract.test.ts +++ b/yarn-project/aztec.js/src/contract/contract.test.ts @@ -27,6 +27,7 @@ describe('Contract Class', () => { { name: 'bar', functionType: FunctionType.SECRET, + isInternal: false, parameters: [ { name: 'value', @@ -49,6 +50,7 @@ describe('Contract Class', () => { { name: 'baz', functionType: FunctionType.OPEN, + isInternal: false, parameters: [], returnTypes: [], bytecode: '0be', @@ -56,6 +58,7 @@ describe('Contract Class', () => { { name: 'qux', functionType: FunctionType.UNCONSTRAINED, + isInternal: false, parameters: [ { name: 'value', diff --git a/yarn-project/aztec.js/src/contract/contract_function_interaction.ts b/yarn-project/aztec.js/src/contract/contract_function_interaction.ts index a471c92e3e56..2c8b3ab70334 100644 --- a/yarn-project/aztec.js/src/contract/contract_function_interaction.ts +++ b/yarn-project/aztec.js/src/contract/contract_function_interaction.ts @@ -90,6 +90,7 @@ export class ContractFunctionInteraction { const functionData = new FunctionData( generateFunctionSelector(this.functionDao.name, this.functionDao.parameters), + this.functionDao.isInternal, this.functionDao.functionType === FunctionType.SECRET, this.functionDao.name === 'constructor', ); diff --git a/yarn-project/aztec.js/src/contract_deployer/contract_deployer.test.ts b/yarn-project/aztec.js/src/contract_deployer/contract_deployer.test.ts index d9755ffd8766..ce8deb04bf9c 100644 --- a/yarn-project/aztec.js/src/contract_deployer/contract_deployer.test.ts +++ b/yarn-project/aztec.js/src/contract_deployer/contract_deployer.test.ts @@ -16,6 +16,7 @@ describe.skip('Contract Deployer', () => { { name: 'constructor', functionType: FunctionType.SECRET, + isInternal: false, parameters: [], returnTypes: [], bytecode: '0af', diff --git a/yarn-project/circuits.js/src/abis/__snapshots__/abis.test.ts.snap b/yarn-project/circuits.js/src/abis/__snapshots__/abis.test.ts.snap index efed00779117..28b96683cc67 100644 --- a/yarn-project/circuits.js/src/abis/__snapshots__/abis.test.ts.snap +++ b/yarn-project/circuits.js/src/abis/__snapshots__/abis.test.ts.snap @@ -44,7 +44,7 @@ AztecAddress { exports[`abis wasm bindings computes a function leaf 1`] = ` Fr { - "value": 10724872372058747971865607189197215883616299259274114995580068674650484136837n, + "value": 3087577661303601311028613516544548769914327454147174509447606645757193921240n, } `; @@ -74,7 +74,7 @@ Fr { exports[`abis wasm bindings computes function tree root 1`] = ` Fr { - "value": 12906610331695443491500387150847739068531523218659917858520872318692742082976n, + "value": 10347099364184817470749359182712341488544005132594679915946302065868679911885n, } `; @@ -99,38 +99,38 @@ Fr { exports[`abis wasm bindings hashes a tx request 1`] = ` { "data": [ - 48, - 57, - 170, - 107, - 100, - 47, - 7, - 162, - 88, - 236, - 91, - 140, - 100, - 126, - 249, - 245, - 88, - 16, - 57, - 72, - 61, - 110, - 171, - 162, + 32, + 25, + 83, + 68, + 20, + 2, + 71, + 30, + 241, + 52, + 99, + 157, + 202, 119, + 186, + 154, + 22, 122, - 158, - 95, - 157, - 42, - 141, - 232, + 199, + 176, + 121, + 215, + 85, + 13, + 228, + 82, + 129, + 89, + 153, + 131, + 233, + 177, ], "type": "Buffer", } @@ -138,7 +138,7 @@ exports[`abis wasm bindings hashes a tx request 1`] = ` exports[`abis wasm bindings hashes constructor info 1`] = ` Fr { - "value": 3768952371995154608073783464050856449274677454782425541065822710687690385468n, + "value": 11423915673915198290300367851881125996395433281184245872633888457016608552774n, } `; diff --git a/yarn-project/circuits.js/src/abis/abis.test.ts b/yarn-project/circuits.js/src/abis/abis.test.ts index adf01d4c452d..d217490f99be 100644 --- a/yarn-project/circuits.js/src/abis/abis.test.ts +++ b/yarn-project/circuits.js/src/abis/abis.test.ts @@ -46,14 +46,14 @@ describe('abis wasm bindings', () => { }); it('computes a function leaf', () => { - const leaf = new FunctionLeafPreimage(Buffer.from([0, 0, 0, 123]), true, Fr.ZERO, Fr.ZERO); + const leaf = new FunctionLeafPreimage(Buffer.from([0, 0, 0, 123]), false, true, Fr.ZERO, Fr.ZERO); const res = computeFunctionLeaf(wasm, leaf); expect(res).toMatchSnapshot(); }); it('compute function leaf should revert if buffer is over 4 bytes', () => { expect(() => { - new FunctionLeafPreimage(Buffer.from([0, 0, 0, 0, 123]), true, Fr.ZERO, Fr.ZERO); + new FunctionLeafPreimage(Buffer.from([0, 0, 0, 0, 123]), false, true, Fr.ZERO, Fr.ZERO); }).toThrow('Function selector must be 4 bytes long, got 5 bytes.'); }); @@ -61,7 +61,7 @@ describe('abis wasm bindings', () => { const initBuffer = Buffer.from([0, 0, 0, 123]); const largerBuffer = Buffer.from([0, 0, 0, 0, 123]); expect(() => { - const leaf = new FunctionLeafPreimage(initBuffer, true, Fr.ZERO, Fr.ZERO); + const leaf = new FunctionLeafPreimage(initBuffer, false, true, Fr.ZERO, Fr.ZERO); leaf.functionSelector = largerBuffer; leaf.toBuffer(); }).toThrow('Function selector must be 4 bytes long, got 5 bytes.'); @@ -73,7 +73,7 @@ describe('abis wasm bindings', () => { }); it('hashes constructor info', () => { - const functionData = new FunctionData(Buffer.alloc(4), true, true); + const functionData = new FunctionData(Buffer.alloc(4), false, true, true); const argsHash = new Fr(42); const vkHash = Buffer.alloc(32); const res = hashConstructor(wasm, functionData, argsHash, vkHash); diff --git a/yarn-project/circuits.js/src/cbind/circuits.gen.ts b/yarn-project/circuits.js/src/cbind/circuits.gen.ts index 84ba45101306..fb522144789b 100644 --- a/yarn-project/circuits.js/src/cbind/circuits.gen.ts +++ b/yarn-project/circuits.js/src/cbind/circuits.gen.ts @@ -219,6 +219,7 @@ export function fromNewContractData(o: NewContractData): MsgpackNewContractData interface MsgpackFunctionData { function_selector: number; + is_internal: boolean; is_private: boolean; is_constructor: boolean; } @@ -227,19 +228,25 @@ export function toFunctionData(o: MsgpackFunctionData): FunctionData { if (o.function_selector === undefined) { throw new Error('Expected function_selector in FunctionData deserialization'); } + if (o.is_internal === undefined) { + throw new Error('Expected is_internal in FunctionData deserialization'); + } if (o.is_private === undefined) { throw new Error('Expected is_private in FunctionData deserialization'); } if (o.is_constructor === undefined) { throw new Error('Expected is_constructor in FunctionData deserialization'); } - return new FunctionData(o.function_selector, o.is_private, o.is_constructor); + return new FunctionData(o.function_selector, o.is_internal, o.is_private, o.is_constructor); } export function fromFunctionData(o: FunctionData): MsgpackFunctionData { if (o.functionSelector === undefined) { throw new Error('Expected functionSelector in FunctionData serialization'); } + if (o.isInternal === undefined) { + throw new Error('Expected isInternal in FunctionData serialization'); + } if (o.isPrivate === undefined) { throw new Error('Expected isPrivate in FunctionData serialization'); } @@ -248,6 +255,7 @@ export function fromFunctionData(o: FunctionData): MsgpackFunctionData { } return { function_selector: o.functionSelector, + is_internal: o.isInternal, is_private: o.isPrivate, is_constructor: o.isConstructor, }; diff --git a/yarn-project/circuits.js/src/cbind/constants.gen.ts b/yarn-project/circuits.js/src/cbind/constants.gen.ts index a604b7c270ce..07c7038b7e07 100644 --- a/yarn-project/circuits.js/src/cbind/constants.gen.ts +++ b/yarn-project/circuits.js/src/cbind/constants.gen.ts @@ -55,7 +55,7 @@ export const MAX_NOTES_PER_PAGE = 10; export const VIEW_NOTE_ORACLE_RETURN_LENGTH = 212; export const CALL_CONTEXT_LENGTH = 6; export const COMMITMENT_TREES_ROOTS_LENGTH = 5; -export const FUNCTION_DATA_LENGTH = 3; +export const FUNCTION_DATA_LENGTH = 4; export const CONTRACT_DEPLOYMENT_DATA_LENGTH = 6; export const PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH = 56; export const CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH = 3; @@ -63,7 +63,7 @@ export const CONTRACT_STORAGE_READ_LENGTH = 2; export const PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH = 55; export const GET_NOTES_ORACLE_RETURN_LENGTH = 86; export const EMPTY_NULLIFIED_COMMITMENT = 1000000; -export const CALL_PRIVATE_FUNCTION_RETURN_SIZE = 61; +export const CALL_PRIVATE_FUNCTION_RETURN_SIZE = 62; export const PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH = 33; export enum GeneratorIndex { COMMITMENT = 1, diff --git a/yarn-project/circuits.js/src/contract/contract_deployment_info.ts b/yarn-project/circuits.js/src/contract/contract_deployment_info.ts index 1150cd36cf47..a95d57ba9095 100644 --- a/yarn-project/circuits.js/src/contract/contract_deployment_info.ts +++ b/yarn-project/circuits.js/src/contract/contract_deployment_info.ts @@ -42,7 +42,7 @@ export async function getContractDeploymentInfo( const leaves = generateFunctionLeaves(functions, wasm); const functionTreeRoot = computeFunctionTreeRoot(wasm, leaves); const constructorSelector = generateFunctionSelector(constructorAbi.name, constructorAbi.parameters); - const functionData = new FunctionData(constructorSelector, true, true); + const functionData = new FunctionData(constructorSelector, false, true, true); const flatArgs = encodeArguments(constructorAbi, args); const argsHash = await computeVarArgsHash(wasm, flatArgs); const constructorHash = hashConstructor(wasm, functionData, argsHash, constructorVkHash.toBuffer()); diff --git a/yarn-project/circuits.js/src/contract/contract_tree/contract_tree.ts b/yarn-project/circuits.js/src/contract/contract_tree/contract_tree.ts index b9cdcf6e2468..e3e636f5b6f9 100644 --- a/yarn-project/circuits.js/src/contract/contract_tree/contract_tree.ts +++ b/yarn-project/circuits.js/src/contract/contract_tree/contract_tree.ts @@ -70,6 +70,7 @@ export function generateFunctionLeaves(functions: ContractFunctionDao[], wasm: C for (let i = 0; i < targetFunctions.length; i++) { const f = targetFunctions[i]; const selector = generateFunctionSelector(f.name, f.parameters); + const isInternal = f.isInternal; const isPrivate = f.functionType === FunctionType.SECRET; // All non-unconstrained functions have vks const vkHash = hashVKStr(f.verificationKey!, wasm); @@ -80,6 +81,7 @@ export function generateFunctionLeaves(functions: ContractFunctionDao[], wasm: C const fnLeafPreimage = new FunctionLeafPreimage( selector, + isInternal, isPrivate, Fr.fromBuffer(vkHash), Fr.fromBuffer(acirHash), diff --git a/yarn-project/circuits.js/src/structs/__snapshots__/function_data.test.ts.snap b/yarn-project/circuits.js/src/structs/__snapshots__/function_data.test.ts.snap index 63e3145ef369..980ea702e531 100644 --- a/yarn-project/circuits.js/src/structs/__snapshots__/function_data.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/__snapshots__/function_data.test.ts.snap @@ -2,6 +2,7 @@ exports[`basic FunctionData serialization serializes a trivial FunctionData and prints it 1`] = ` "function_selector: 123 +is_internal: 0 is_private: 1 is_constructor: 1 " diff --git a/yarn-project/circuits.js/src/structs/__snapshots__/function_leaf_preimage.test.ts.snap b/yarn-project/circuits.js/src/structs/__snapshots__/function_leaf_preimage.test.ts.snap index 6b82b90ec0de..6b16bf40e3ac 100644 --- a/yarn-project/circuits.js/src/structs/__snapshots__/function_leaf_preimage.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/__snapshots__/function_leaf_preimage.test.ts.snap @@ -2,6 +2,7 @@ exports[`basic FunctionLeafPreimage serialization serializes a trivial Function Leaf Preimage and prints it 1`] = ` "function_selector: 123 +is_internal: 0 is_private: 1 vk_hash: 0x0 acir_hash: 0x0 diff --git a/yarn-project/circuits.js/src/structs/function_data.test.ts b/yarn-project/circuits.js/src/structs/function_data.test.ts index 8229aa28c7ad..bd66d31438db 100644 --- a/yarn-project/circuits.js/src/structs/function_data.test.ts +++ b/yarn-project/circuits.js/src/structs/function_data.test.ts @@ -5,7 +5,7 @@ describe('basic FunctionData serialization', () => { it(`serializes a trivial FunctionData and prints it`, async () => { // Test the data case: writing (mostly) sequential numbers await expectSerializeToMatchSnapshot( - new FunctionData(Buffer.from([0, 0, 0, 123]), true, true).toBuffer(), + new FunctionData(Buffer.from([0, 0, 0, 123]), false, true, true).toBuffer(), 'abis__test_roundtrip_serialize_function_data', ); }); diff --git a/yarn-project/circuits.js/src/structs/function_data.ts b/yarn-project/circuits.js/src/structs/function_data.ts index dbff049bcc0c..bc6c0ccbdb50 100644 --- a/yarn-project/circuits.js/src/structs/function_data.ts +++ b/yarn-project/circuits.js/src/structs/function_data.ts @@ -15,14 +15,18 @@ export class FunctionData { public functionSelectorBuffer: Buffer; constructor( functionSelector: Buffer | number, + /** + * Indicates whether the function is only callable by self or not. + */ + public isInternal: boolean, /** * Indicates whether the function is private or public. */ - public isPrivate = true, + public isPrivate: boolean, /** * Indicates whether the function is a constructor. */ - public isConstructor = false, + public isConstructor: boolean, ) { if (functionSelector instanceof Buffer) { if (functionSelector.byteLength !== FUNCTION_SELECTOR_LENGTH) { @@ -47,7 +51,7 @@ export class FunctionData { * @returns The buffer. */ toBuffer(): Buffer { - return serializeToBuffer(this.functionSelectorBuffer, this.isPrivate, this.isConstructor); + return serializeToBuffer(this.functionSelectorBuffer, this.isInternal, this.isPrivate, this.isConstructor); } /** @@ -64,6 +68,10 @@ export class FunctionData { * @returns A new instance of FunctionData with zero function selector. */ public static empty(args?: { + /** + * Indicates whether the function is only callable by self or not. + */ + isInternal?: boolean; /** * Indicates whether the function is private or public. */ @@ -73,7 +81,12 @@ export class FunctionData { */ isConstructor?: boolean; }): FunctionData { - return new FunctionData(Buffer.alloc(FUNCTION_SELECTOR_LENGTH, 0), args?.isPrivate, args?.isConstructor); + return new FunctionData( + Buffer.alloc(FUNCTION_SELECTOR_LENGTH, 0), + args?.isInternal ?? false, + args?.isPrivate ?? false, + args?.isConstructor ?? false, + ); } /** @@ -83,6 +96,11 @@ export class FunctionData { */ static fromBuffer(buffer: Buffer | BufferReader): FunctionData { const reader = BufferReader.asReader(buffer); - return new FunctionData(reader.readBytes(FUNCTION_SELECTOR_LENGTH), reader.readBoolean(), reader.readBoolean()); + return new FunctionData( + reader.readBytes(FUNCTION_SELECTOR_LENGTH), + reader.readBoolean(), + reader.readBoolean(), + reader.readBoolean(), + ); } } diff --git a/yarn-project/circuits.js/src/structs/function_leaf_preimage.test.ts b/yarn-project/circuits.js/src/structs/function_leaf_preimage.test.ts index 9f6ef12440bf..dc278841d836 100644 --- a/yarn-project/circuits.js/src/structs/function_leaf_preimage.test.ts +++ b/yarn-project/circuits.js/src/structs/function_leaf_preimage.test.ts @@ -7,7 +7,7 @@ describe('basic FunctionLeafPreimage serialization', () => { it(`serializes a trivial Function Leaf Preimage and prints it`, async () => { // Test the data case: writing (mostly) sequential numbers await expectSerializeToMatchSnapshot( - new FunctionLeafPreimage(Buffer.from([0, 0, 0, 123]), true, Fr.ZERO, Fr.ZERO).toBuffer(), + new FunctionLeafPreimage(Buffer.from([0, 0, 0, 123]), false, true, Fr.ZERO, Fr.ZERO).toBuffer(), 'abis__test_roundtrip_serialize_function_leaf_preimage', ); }); diff --git a/yarn-project/circuits.js/src/structs/function_leaf_preimage.ts b/yarn-project/circuits.js/src/structs/function_leaf_preimage.ts index 17c7d09f517e..b60fe507e21a 100644 --- a/yarn-project/circuits.js/src/structs/function_leaf_preimage.ts +++ b/yarn-project/circuits.js/src/structs/function_leaf_preimage.ts @@ -15,6 +15,10 @@ export class FunctionLeafPreimage { * Function selector `FUNCTION_SELECTOR_LENGTH` bytes long. */ public functionSelector: Buffer, + /** + * Indicates whether the function is only callable by self or not. + */ + public isInternal: boolean, /** * Indicates whether the function is private or public. */ @@ -50,7 +54,7 @@ export class FunctionLeafPreimage { */ toBuffer(): Buffer { this.assertFunctionSelectorLength(this.functionSelector); - return serializeToBuffer(this.functionSelector, this.isPrivate, this.vkHash, this.acirHash); + return serializeToBuffer(this.functionSelector, this.isInternal, this.isPrivate, this.vkHash, this.acirHash); } /** @@ -60,6 +64,12 @@ export class FunctionLeafPreimage { */ static fromBuffer(buffer: Buffer | BufferReader): FunctionLeafPreimage { const reader = BufferReader.asReader(buffer); - return new FunctionLeafPreimage(reader.readBytes(4), reader.readBoolean(), reader.readFr(), reader.readFr()); + return new FunctionLeafPreimage( + reader.readBytes(4), + reader.readBoolean(), + reader.readBoolean(), + reader.readFr(), + reader.readFr(), + ); } } diff --git a/yarn-project/circuits.js/src/structs/kernel/__snapshots__/index.test.ts.snap b/yarn-project/circuits.js/src/structs/kernel/__snapshots__/index.test.ts.snap index c8efea2b32e0..bd6fe53a7bb6 100644 --- a/yarn-project/circuits.js/src/structs/kernel/__snapshots__/index.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/kernel/__snapshots__/index.test.ts.snap @@ -108,6 +108,7 @@ optionally_revealed_data: [ call_stack_item_hash: 0xb01 function_data: function_selector: b02 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -120,6 +121,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb02 function_data: function_selector: b03 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -132,6 +134,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb03 function_data: function_selector: b04 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -144,6 +147,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb04 function_data: function_selector: b05 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -292,6 +296,7 @@ optionally_revealed_data: [ call_stack_item_hash: 0xb01 function_data: function_selector: b02 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -304,6 +309,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb02 function_data: function_selector: b03 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -316,6 +322,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb03 function_data: function_selector: b04 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -328,6 +335,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb04 function_data: function_selector: b05 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -410,6 +418,7 @@ exports[`structs/kernel serializes and prints private_kernel_inputs_init 1`] = ` "tx_request: origin: 0x1 function_data: function_selector: 257 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -434,6 +443,7 @@ private_call: call_stack_item: contract_address: 0x1001 function_data: function_selector: 4098 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -478,6 +488,7 @@ is_execution_request: 0 private_call_stack_preimages: [ contract_address: 0x1011 function_data: function_selector: 1012 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -520,6 +531,7 @@ version: 0x2321 is_execution_request: 0 contract_address: 0x1012 function_data: function_selector: 1013 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -562,6 +574,7 @@ version: 0x2322 is_execution_request: 0 contract_address: 0x1013 function_data: function_selector: 1014 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -604,6 +617,7 @@ version: 0x2323 is_execution_request: 0 contract_address: 0x1014 function_data: function_selector: 1015 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -799,6 +813,7 @@ optionally_revealed_data: [ call_stack_item_hash: 0xb01 function_data: function_selector: b02 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -811,6 +826,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb02 function_data: function_selector: b03 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -823,6 +839,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb03 function_data: function_selector: b04 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -835,6 +852,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb04 function_data: function_selector: b05 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -915,6 +933,7 @@ private_call: call_stack_item: contract_address: 0x1001 function_data: function_selector: 4098 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -959,6 +978,7 @@ is_execution_request: 0 private_call_stack_preimages: [ contract_address: 0x1011 function_data: function_selector: 1012 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -1001,6 +1021,7 @@ version: 0x2321 is_execution_request: 0 contract_address: 0x1012 function_data: function_selector: 1013 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -1043,6 +1064,7 @@ version: 0x2322 is_execution_request: 0 contract_address: 0x1013 function_data: function_selector: 1014 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -1085,6 +1107,7 @@ version: 0x2323 is_execution_request: 0 contract_address: 0x1014 function_data: function_selector: 1015 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -1279,6 +1302,7 @@ optionally_revealed_data: [ call_stack_item_hash: 0xb01 function_data: function_selector: b02 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -1291,6 +1315,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb02 function_data: function_selector: b03 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -1303,6 +1328,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb03 function_data: function_selector: b04 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -1315,6 +1341,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb04 function_data: function_selector: b05 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -1489,6 +1516,7 @@ optionally_revealed_data: [ call_stack_item_hash: 0xb01 function_data: function_selector: b02 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -1501,6 +1529,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb02 function_data: function_selector: b03 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -1513,6 +1542,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb03 function_data: function_selector: b04 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -1525,6 +1555,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xb04 function_data: function_selector: b05 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -1605,6 +1636,7 @@ public_call: call_stack_item: contract_address: 0x1001 function_data: function_selector: 4098 +is_internal: 0 is_private: 0 is_constructor: 0 @@ -1639,7 +1671,7 @@ current_value: 0x1 storage_slot: 0x0 current_value: 0x1 ] -public_call_stack: [ 0x225c746554b91de24c0681e77d9f6d2e2ad5c5527bbb0db9fb9fe9174545e120 0x83a6ba3841028a251de457883249799c19b103ebdf4f39491b28a7675112eac 0x2f81344b8f0b9a0d6a4d8a0c71de1685d595d3ab607f84ec52354a328e3f6c7e 0x2ff619c51a8705351bfbfd919c05bd1a4a5d27bd0cd1e102860b18c5a4cd89e3 ] +public_call_stack: [ 0x33e75c7b393a616d4bfb82441015c9b345222124b7790927a3068d995b739d6 0x1c83b599bd1c954736b693d7effcfbfdaa9681ccdbbf1d0fa49626c74c7623ac 0x24db74658faa3c2978a9ec2967a88a90cd820260259fee459437efe95fb166e8 0x2fafe59d70d0a45d9a3dc5920139a491adbc0918060d52b2f1e7c7a0779270fe ] new_commitments: [ 0x1711 0x1712 0x0 0x0 ] new_nullifiers: [ 0x1811 0x1812 0x0 0x0 ] new_l2_to_l1_msgs: [ 0x1911 0x0 ] @@ -1653,6 +1685,7 @@ is_execution_request: 0 public_call_stack_preimages: [ contract_address: 0x1301 function_data: function_selector: 1302 +is_internal: 0 is_private: 0 is_constructor: 0 @@ -1699,6 +1732,7 @@ prover_address: 0x1e12 is_execution_request: 0 contract_address: 0x1302 function_data: function_selector: 1303 +is_internal: 0 is_private: 0 is_constructor: 0 @@ -1745,6 +1779,7 @@ prover_address: 0x1e13 is_execution_request: 0 contract_address: 0x1303 function_data: function_selector: 1304 +is_internal: 0 is_private: 0 is_constructor: 0 @@ -1791,6 +1826,7 @@ prover_address: 0x1e14 is_execution_request: 0 contract_address: 0x1304 function_data: function_selector: 1305 +is_internal: 0 is_private: 0 is_constructor: 0 diff --git a/yarn-project/circuits.js/src/structs/rollup/__snapshots__/base_rollup.test.ts.snap b/yarn-project/circuits.js/src/structs/rollup/__snapshots__/base_rollup.test.ts.snap index 6a943e0add54..ca5a4a8c5e25 100644 --- a/yarn-project/circuits.js/src/structs/rollup/__snapshots__/base_rollup.test.ts.snap +++ b/yarn-project/circuits.js/src/structs/rollup/__snapshots__/base_rollup.test.ts.snap @@ -110,6 +110,7 @@ optionally_revealed_data: [ call_stack_item_hash: 0xc00 function_data: function_selector: c01 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -122,6 +123,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xc01 function_data: function_selector: c02 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -134,6 +136,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xc02 function_data: function_selector: c03 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -146,6 +149,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xc03 function_data: function_selector: c04 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -329,6 +333,7 @@ optionally_revealed_data: [ call_stack_item_hash: 0xd00 function_data: function_selector: d01 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -341,6 +346,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xd01 function_data: function_selector: d02 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -353,6 +359,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xd02 function_data: function_selector: d03 +is_internal: 0 is_private: 1 is_constructor: 1 @@ -365,6 +372,7 @@ called_from_public_l2: 0 call_stack_item_hash: 0xd03 function_data: function_selector: d04 +is_internal: 0 is_private: 1 is_constructor: 1 diff --git a/yarn-project/circuits.js/src/tests/factories.ts b/yarn-project/circuits.js/src/tests/factories.ts index 3547b78b1e65..81210e9f9601 100644 --- a/yarn-project/circuits.js/src/tests/factories.ts +++ b/yarn-project/circuits.js/src/tests/factories.ts @@ -271,7 +271,7 @@ export function makeNewContractData(seed = 1): NewContractData { export function makeOptionallyRevealedData(seed = 1): OptionallyRevealedData { return new OptionallyRevealedData( fr(seed), - new FunctionData(makeSelector(seed + 1), true, true), + new FunctionData(makeSelector(seed + 1), false, true, true), fr(seed + 2), makeEthAddress(seed + 3), true, @@ -361,7 +361,7 @@ export function makeKernelPublicInputs(seed = 1): KernelCircuitPublicInputs { export function makePublicCallRequest(seed = 1): PublicCallRequest { return new PublicCallRequest( makeAztecAddress(seed), - new FunctionData(makeSelector(seed + 0x1), false, false), + new FunctionData(makeSelector(seed + 0x1), false, false, false), makeCallContext(seed + 0x2), makeTuple(ARGS_LENGTH, fr, seed + 0x10), ); @@ -479,7 +479,7 @@ export function makePublicCallStackItem(seed = 1, full = false): PublicCallStack const callStackItem = new PublicCallStackItem( makeAztecAddress(seed), // in the public kernel, function can't be a constructor or private - new FunctionData(makeSelector(seed + 0x1), false, false), + new FunctionData(makeSelector(seed + 0x1), false, false, false), makePublicCircuitPublicInputs(seed + 0x10, undefined, full), false, ); @@ -583,7 +583,7 @@ export async function makePublicKernelInputsWithEmptyOutput( export function makeTxRequest(seed = 1): TxRequest { return TxRequest.from({ origin: makeAztecAddress(seed), - functionData: new FunctionData(makeSelector(seed + 0x100), true, true), + functionData: new FunctionData(makeSelector(seed + 0x100), false, true, true), argsHash: fr(seed + 0x200), txContext: makeTxContext(seed + 0x400), }); @@ -618,7 +618,7 @@ export function makePrivateCallData(seed = 1): PrivateCallData { export function makePrivateCallStackItem(seed = 1): PrivateCallStackItem { return new PrivateCallStackItem( makeAztecAddress(seed), - new FunctionData(makeSelector(seed + 0x1), true, true), + new FunctionData(makeSelector(seed + 0x1), false, true, true), makePrivateCircuitPublicInputs(seed + 0x10), ); } diff --git a/yarn-project/end-to-end/src/cross_chain/test_harness.ts b/yarn-project/end-to-end/src/cross_chain/test_harness.ts index c2a6502bbd45..5d73cad3ffe0 100644 --- a/yarn-project/end-to-end/src/cross_chain/test_harness.ts +++ b/yarn-project/end-to-end/src/cross_chain/test_harness.ts @@ -30,7 +30,6 @@ export class CrossChainTestHarness { ): Promise { const walletClient = deployL1ContractsValues.walletClient; const publicClient = deployL1ContractsValues.publicClient; - const ethAccount = EthAddress.fromString((await walletClient.getAddresses())[0]); const [ownerAddress, receiver] = accounts; const ownerPub = await aztecRpcServer.getPublicKey(ownerAddress); diff --git a/yarn-project/end-to-end/src/e2e_lending_contract.test.ts b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts new file mode 100644 index 000000000000..f692f7d78968 --- /dev/null +++ b/yarn-project/end-to-end/src/e2e_lending_contract.test.ts @@ -0,0 +1,444 @@ +import { AztecNodeService } from '@aztec/aztec-node'; +import { AztecRPCServer } from '@aztec/aztec-rpc'; +import { AztecAddress, Contract, Fr, Wallet } from '@aztec/aztec.js'; +import { CircuitsWasm } from '@aztec/circuits.js'; +import { pedersenPlookupCommitInputs } from '@aztec/circuits.js/barretenberg'; +import { DebugLogger } from '@aztec/foundation/log'; +import { LendingContract } from '@aztec/noir-contracts/types'; +import { AztecRPC, TxStatus } from '@aztec/types'; + +import { calculateAztecStorageSlot, setup } from './utils.js'; + +describe('e2e_lending_contract', () => { + let aztecNode: AztecNodeService | undefined; + let aztecRpcServer: AztecRPC; + let wallet: Wallet; + let accounts: AztecAddress[]; + let logger: DebugLogger; + + let contract: Contract; + + const deployContract = async () => { + logger(`Deploying L2 public contract...`); + const tx = LendingContract.deploy(aztecRpcServer).send(); + + logger(`Tx sent with hash ${await tx.getTxHash()}`); + const receipt = await tx.getReceipt(); + contract = new LendingContract(receipt.contractAddress!, wallet); + await tx.isMined(0, 0.1); + const txReceipt = await tx.getReceipt(); + logger(`L2 contract deployed at ${receipt.contractAddress}`); + return { contract, tx, txReceipt }; + }; + + beforeEach(async () => { + ({ aztecNode, aztecRpcServer, wallet, accounts, logger } = await setup()); + }, 100_000); + + afterEach(async () => { + await aztecNode?.stop(); + if (aztecRpcServer instanceof AztecRPCServer) { + await aztecRpcServer?.stop(); + } + }); + + // Fetch a storage snapshot from the contract that we can use to compare between transitions. + const getStorageSnapshot = async (contract: Contract, aztecNode: AztecRPC, account: Account) => { + const storageValues: { [key: string]: any } = {}; + + const readValue = async (slot: Fr) => + Fr.fromBuffer((await aztecNode.getPublicStorageAt(contract.address, slot)) ?? Buffer.alloc(0)); + + { + const baseSlot = await calculateAztecStorageSlot(1n, Fr.ZERO); + storageValues['interestAccumulator'] = await readValue(baseSlot); + storageValues['last_updated_ts'] = await readValue(new Fr(baseSlot.value + 1n)); + } + + const accountKey = await account.key(); + + storageValues['private_collateral'] = await readValue(await calculateAztecStorageSlot(2n, accountKey)); + storageValues['public_collateral'] = await readValue( + await calculateAztecStorageSlot(2n, account.address.toField()), + ); + storageValues['private_debt'] = await readValue(await calculateAztecStorageSlot(3n, accountKey)); + storageValues['public_debt'] = await readValue(await calculateAztecStorageSlot(3n, account.address.toField())); + + return storageValues; + }; + + // Convenience struct to hold an account's address and secret that can easily be passed around. + // Contains utilities to compute the "key" for private holdings in the public state. + class Account { + public readonly address: AztecAddress; + public readonly secret: Fr; + + constructor(address: AztecAddress, secret: Fr) { + this.address = address; + this.secret = secret; + } + + public async key(): Promise { + return Fr.fromBuffer( + pedersenPlookupCommitInputs( + await CircuitsWasm.get(), + [this.address, this.secret].map(f => f.toBuffer()), + ), + ); + } + } + + it('Full lending run-through', async () => { + const recipientIdx = 0; + + const recipient = accounts[recipientIdx]; + const { contract: deployedContract } = await deployContract(); + + const account = new Account(recipient, new Fr(42)); + + const storageSnapshots: { [key: string]: { [key: string]: Fr } } = {}; + + { + // Initialize the contract values, setting the interest accumulator to 1e9 and the last updated timestamp to now. + logger('Initializing contract'); + const tx = deployedContract.methods.init().send({ origin: recipient }); + await tx.isMined(0, 0.1); + const receipt = await tx.getReceipt(); + expect(receipt.status).toBe(TxStatus.MINED); + storageSnapshots['initial'] = await getStorageSnapshot(deployedContract, aztecRpcServer, account); + + expect(storageSnapshots['initial']['interestAccumulator']).toEqual(new Fr(1000000000n)); + expect(storageSnapshots['initial']['last_updated_ts'].value).toBeGreaterThan(0n); + } + + { + // Make a private deposit of funds into own account. + // This should: + // - increase the interest accumulator + // - increase last updated timestamp. + // - increase the private collateral. + logger('Depositing 🥸 : 💰 -> 🏦'); + const tx = deployedContract.methods.deposit_private(account.secret, 0n, 420n).send({ origin: recipient }); + await tx.isMined(0, 0.1); + const receipt = await tx.getReceipt(); + expect(receipt.status).toBe(TxStatus.MINED); + storageSnapshots['private_deposit'] = await getStorageSnapshot(deployedContract, aztecRpcServer, account); + + // @todo The accumulator should not increase when there are no debt. But we don't have reads/writes enough right now to handle that. + expect(storageSnapshots['private_deposit']['interestAccumulator'].value).toBeGreaterThan( + storageSnapshots['initial']['interestAccumulator'].value, + ); + expect(storageSnapshots['private_deposit']['last_updated_ts'].value).toBeGreaterThan( + storageSnapshots['initial']['last_updated_ts'].value, + ); + expect(storageSnapshots['private_deposit']['private_collateral']).toEqual(new Fr(420n)); + } + + { + // Make a private deposit of funds into another account, in this case, a public account. + // This should: + // - increase the interest accumulator + // - increase last updated timestamp. + // - increase the public collateral. + logger('Depositing 🥸 on behalf of recipient: 💰 -> 🏦'); + const tx = deployedContract.methods.deposit_private(0n, recipient.toField(), 420n).send({ origin: recipient }); + await tx.isMined(0, 0.1); + const receipt = await tx.getReceipt(); + expect(receipt.status).toBe(TxStatus.MINED); + storageSnapshots['private_deposit_on_behalf'] = await getStorageSnapshot( + deployedContract, + aztecRpcServer, + account, + ); + + expect(storageSnapshots['private_deposit_on_behalf']['interestAccumulator'].value).toBeGreaterThan( + storageSnapshots['private_deposit']['interestAccumulator'].value, + ); + expect(storageSnapshots['private_deposit_on_behalf']['last_updated_ts'].value).toBeGreaterThan( + storageSnapshots['private_deposit']['last_updated_ts'].value, + ); + expect(storageSnapshots['private_deposit_on_behalf']['private_collateral']).toEqual( + storageSnapshots['private_deposit']['private_collateral'], + ); + expect(storageSnapshots['private_deposit_on_behalf']['public_collateral']).toEqual(new Fr(420n)); + } + + { + // Make a public deposit of funds into self. + // This should: + // - increase the interest accumulator + // - increase last updated timestamp. + // - increase the public collateral. + + logger('Depositing: 💰 -> 🏦'); + const tx = deployedContract.methods.deposit_public(account.address, 211n).send({ origin: recipient }); + await tx.isMined(0, 0.1); + const receipt = await tx.getReceipt(); + expect(receipt.status).toBe(TxStatus.MINED); + storageSnapshots['public_deposit'] = await getStorageSnapshot(deployedContract, aztecRpcServer, account); + + expect(storageSnapshots['public_deposit']['interestAccumulator'].value).toBeGreaterThan( + storageSnapshots['private_deposit_on_behalf']['interestAccumulator'].value, + ); + expect(storageSnapshots['public_deposit']['last_updated_ts'].value).toBeGreaterThan( + storageSnapshots['private_deposit_on_behalf']['last_updated_ts'].value, + ); + expect(storageSnapshots['public_deposit']['private_collateral']).toEqual( + storageSnapshots['private_deposit_on_behalf']['private_collateral'], + ); + expect(storageSnapshots['public_deposit']['public_collateral']).toEqual( + new Fr(storageSnapshots['private_deposit_on_behalf']['public_collateral'].value + 211n), + ); + } + + { + // Make a private borrow using the private account + // This should: + // - increase the interest accumulator + // - increase last updated timestamp. + // - increase the private debt. + + logger('Borrow 🥸 : 🏦 -> 🍌'); + const tx = deployedContract.methods.borrow_private(account.secret, 69n).send({ origin: recipient }); + await tx.isMined(0, 0.1); + const receipt = await tx.getReceipt(); + expect(receipt.status).toBe(TxStatus.MINED); + storageSnapshots['private_borrow'] = await getStorageSnapshot(deployedContract, aztecRpcServer, account); + + expect(storageSnapshots['private_borrow']['interestAccumulator'].value).toBeGreaterThan( + storageSnapshots['public_deposit']['interestAccumulator'].value, + ); + expect(storageSnapshots['private_borrow']['last_updated_ts'].value).toBeGreaterThan( + storageSnapshots['public_deposit']['last_updated_ts'].value, + ); + expect(storageSnapshots['private_borrow']['private_collateral']).toEqual( + storageSnapshots['public_deposit']['private_collateral'], + ); + expect(storageSnapshots['private_borrow']['public_collateral']).toEqual( + storageSnapshots['public_deposit']['public_collateral'], + ); + expect(storageSnapshots['private_borrow']['private_debt']).toEqual(new Fr(69n)); + } + + { + // Make a public borrow using the private account + // This should: + // - increase the interest accumulator + // - increase last updated timestamp. + // - increase the public debt. + + logger('Borrow: 🏦 -> 🍌'); + const tx = deployedContract.methods.borrow_public(69n).send({ origin: recipient }); + await tx.isMined(0, 0.1); + const receipt = await tx.getReceipt(); + expect(receipt.status).toBe(TxStatus.MINED); + storageSnapshots['public_borrow'] = await getStorageSnapshot(deployedContract, aztecRpcServer, account); + + expect(storageSnapshots['public_borrow']['interestAccumulator'].value).toBeGreaterThan( + storageSnapshots['private_borrow']['interestAccumulator'].value, + ); + expect(storageSnapshots['public_borrow']['last_updated_ts'].value).toBeGreaterThan( + storageSnapshots['private_borrow']['last_updated_ts'].value, + ); + expect(storageSnapshots['public_borrow']['private_collateral']).toEqual( + storageSnapshots['private_borrow']['private_collateral'], + ); + expect(storageSnapshots['public_borrow']['public_collateral']).toEqual( + storageSnapshots['private_borrow']['public_collateral'], + ); + expect(storageSnapshots['public_borrow']['private_debt']).toEqual( + storageSnapshots['private_borrow']['private_debt'], + ); + expect(storageSnapshots['public_borrow']['public_debt']).toEqual(new Fr(69n)); + } + + { + // Make a private repay of the debt in the private account + // This should: + // - increase the interest accumulator + // - increase last updated timestamp. + // - decrease the private debt. + + logger('Repay 🥸 : 🍌 -> 🏦'); + const tx = deployedContract.methods.repay_private(account.secret, 0n, 20n).send({ origin: recipient }); + await tx.isMined(0, 0.1); + const receipt = await tx.getReceipt(); + expect(receipt.status).toBe(TxStatus.MINED); + storageSnapshots['private_repay'] = await getStorageSnapshot(deployedContract, aztecRpcServer, account); + + expect(storageSnapshots['private_repay']['interestAccumulator'].value).toBeGreaterThan( + storageSnapshots['public_borrow']['interestAccumulator'].value, + ); + expect(storageSnapshots['private_repay']['last_updated_ts'].value).toBeGreaterThan( + storageSnapshots['public_borrow']['last_updated_ts'].value, + ); + expect(storageSnapshots['private_repay']['private_collateral']).toEqual( + storageSnapshots['public_borrow']['private_collateral'], + ); + expect(storageSnapshots['private_repay']['public_collateral']).toEqual( + storageSnapshots['public_borrow']['public_collateral'], + ); + expect(storageSnapshots['private_repay']['private_debt'].value).toEqual( + storageSnapshots['public_borrow']['private_debt'].value - 20n, + ); + expect(storageSnapshots['private_repay']['public_debt']).toEqual( + storageSnapshots['public_borrow']['public_debt'], + ); + } + + { + // Make a private repay of the debt in the public account + // This should: + // - increase the interest accumulator + // - increase last updated timestamp. + // - decrease the public debt. + + logger('Repay 🥸 on behalf of public: 🍌 -> 🏦'); + const tx = deployedContract.methods.repay_private(0n, recipient.toField(), 20n).send({ origin: recipient }); + await tx.isMined(0, 0.1); + const receipt = await tx.getReceipt(); + expect(receipt.status).toBe(TxStatus.MINED); + storageSnapshots['private_repay_on_behalf'] = await getStorageSnapshot(deployedContract, aztecRpcServer, account); + + expect(storageSnapshots['private_repay_on_behalf']['interestAccumulator'].value).toBeGreaterThan( + storageSnapshots['private_repay']['interestAccumulator'].value, + ); + expect(storageSnapshots['private_repay_on_behalf']['last_updated_ts'].value).toBeGreaterThan( + storageSnapshots['private_repay']['last_updated_ts'].value, + ); + expect(storageSnapshots['private_repay_on_behalf']['private_collateral']).toEqual( + storageSnapshots['private_repay']['private_collateral'], + ); + expect(storageSnapshots['private_repay_on_behalf']['public_collateral']).toEqual( + storageSnapshots['private_repay']['public_collateral'], + ); + expect(storageSnapshots['private_repay_on_behalf']['private_debt']).toEqual( + storageSnapshots['private_repay']['private_debt'], + ); + expect(storageSnapshots['private_repay_on_behalf']['public_debt'].value).toEqual( + storageSnapshots['private_repay']['public_debt'].value - 20n, + ); + } + + { + // Make a public repay of the debt in the public account + // This should: + // - increase the interest accumulator + // - increase last updated timestamp. + // - decrease the public debt. + + logger('Repay: 🍌 -> 🏦'); + const tx = deployedContract.methods.repay_public(recipient.toField(), 20n).send({ origin: recipient }); + await tx.isMined(0, 0.1); + const receipt = await tx.getReceipt(); + expect(receipt.status).toBe(TxStatus.MINED); + storageSnapshots['public_repay'] = await getStorageSnapshot(deployedContract, aztecRpcServer, account); + + expect(storageSnapshots['public_repay']['interestAccumulator'].value).toBeGreaterThan( + storageSnapshots['private_repay_on_behalf']['interestAccumulator'].value, + ); + expect(storageSnapshots['public_repay']['last_updated_ts'].value).toBeGreaterThan( + storageSnapshots['private_repay_on_behalf']['last_updated_ts'].value, + ); + expect(storageSnapshots['public_repay']['private_collateral']).toEqual( + storageSnapshots['private_repay_on_behalf']['private_collateral'], + ); + expect(storageSnapshots['public_repay']['public_collateral']).toEqual( + storageSnapshots['private_repay_on_behalf']['public_collateral'], + ); + expect(storageSnapshots['public_repay']['private_debt']).toEqual( + storageSnapshots['private_repay_on_behalf']['private_debt'], + ); + expect(storageSnapshots['public_repay']['public_debt'].value).toEqual( + storageSnapshots['private_repay_on_behalf']['public_debt'].value - 20n, + ); + } + + { + // Withdraw funds from the public account + // This should: + // - increase the interest accumulator + // - increase last updated timestamp. + // - decrease the public collateral. + + logger('Withdraw: 🏦 -> 💰'); + const tx = deployedContract.methods.withdraw_public(42n).send({ origin: recipient }); + await tx.isMined(0, 0.1); + const receipt = await tx.getReceipt(); + expect(receipt.status).toBe(TxStatus.MINED); + storageSnapshots['public_withdraw'] = await getStorageSnapshot(deployedContract, aztecRpcServer, account); + + expect(storageSnapshots['public_withdraw']['interestAccumulator'].value).toBeGreaterThan( + storageSnapshots['public_repay']['interestAccumulator'].value, + ); + expect(storageSnapshots['public_withdraw']['last_updated_ts'].value).toBeGreaterThan( + storageSnapshots['public_repay']['last_updated_ts'].value, + ); + expect(storageSnapshots['public_withdraw']['private_collateral']).toEqual( + storageSnapshots['public_repay']['private_collateral'], + ); + expect(storageSnapshots['public_withdraw']['public_collateral'].value).toEqual( + storageSnapshots['public_repay']['public_collateral'].value - 42n, + ); + expect(storageSnapshots['public_withdraw']['private_debt']).toEqual( + storageSnapshots['public_repay']['private_debt'], + ); + expect(storageSnapshots['public_withdraw']['public_debt']).toEqual( + storageSnapshots['public_repay']['public_debt'], + ); + } + + { + // Withdraw funds from the private account + // This should: + // - increase the interest accumulator + // - increase last updated timestamp. + // - decrease the private collateral. + + logger('Withdraw 🥸 : 🏦 -> 💰'); + const tx = deployedContract.methods.withdraw_private(account.secret, 42n).send({ origin: recipient }); + await tx.isMined(0, 0.1); + const receipt = await tx.getReceipt(); + expect(receipt.status).toBe(TxStatus.MINED); + storageSnapshots['private_withdraw'] = await getStorageSnapshot(deployedContract, aztecRpcServer, account); + + expect(storageSnapshots['private_withdraw']['interestAccumulator'].value).toBeGreaterThan( + storageSnapshots['public_withdraw']['interestAccumulator'].value, + ); + expect(storageSnapshots['private_withdraw']['last_updated_ts'].value).toBeGreaterThan( + storageSnapshots['public_withdraw']['last_updated_ts'].value, + ); + expect(storageSnapshots['private_withdraw']['private_collateral'].value).toEqual( + storageSnapshots['public_withdraw']['private_collateral'].value - 42n, + ); + expect(storageSnapshots['private_withdraw']['public_collateral']).toEqual( + storageSnapshots['public_withdraw']['public_collateral'], + ); + expect(storageSnapshots['private_withdraw']['private_debt']).toEqual( + storageSnapshots['public_withdraw']['private_debt'], + ); + expect(storageSnapshots['private_withdraw']['public_debt']).toEqual( + storageSnapshots['public_withdraw']['public_debt'], + ); + } + + { + // Try to call the internal `_deposit` function directly + // This should: + // - not change any storage values. + // - fail + + const tx = deployedContract.methods._deposit(recipient.toField(), 42n).send({ origin: recipient }); + await tx.isMined(0, 0.1); + const receipt = await tx.getReceipt(); + expect(receipt.status).toBe(TxStatus.DROPPED); + logger('Rejected call directly to internal function 🧚 '); + storageSnapshots['attempted_internal_deposit'] = await getStorageSnapshot( + deployedContract, + aztecRpcServer, + account, + ); + expect(storageSnapshots['private_withdraw']).toEqual(storageSnapshots['attempted_internal_deposit']); + } + }, 450_000); +}); diff --git a/yarn-project/foundation/src/abi/abi.ts b/yarn-project/foundation/src/abi/abi.ts index da8cbe23063a..67e6577760a1 100644 --- a/yarn-project/foundation/src/abi/abi.ts +++ b/yarn-project/foundation/src/abi/abi.ts @@ -114,6 +114,10 @@ export interface FunctionAbi { * Whether the function is secret. */ functionType: FunctionType; + /** + * Whether the function is internal. + */ + isInternal: boolean; /** * Function parameters. */ diff --git a/yarn-project/foundation/src/eth-address/index.ts b/yarn-project/foundation/src/eth-address/index.ts index 873997434d58..8c1a741e945f 100644 --- a/yarn-project/foundation/src/eth-address/index.ts +++ b/yarn-project/foundation/src/eth-address/index.ts @@ -21,7 +21,7 @@ export class EthAddress { constructor(private buffer: Buffer) { if (buffer.length === 32) { if (!buffer.slice(0, 12).equals(Buffer.alloc(12))) { - throw new Error('Invalid address buffer.'); + throw new Error(`Invalid address buffer: ${buffer.toString('hex')}`); } else { this.buffer = buffer.slice(12); } diff --git a/yarn-project/noir-compiler/src/__snapshots__/index.test.ts.snap b/yarn-project/noir-compiler/src/__snapshots__/index.test.ts.snap index a6956d1bb25e..7983349bebc4 100644 --- a/yarn-project/noir-compiler/src/__snapshots__/index.test.ts.snap +++ b/yarn-project/noir-compiler/src/__snapshots__/index.test.ts.snap @@ -7,6 +7,7 @@ exports[`should compile the test contract 1`] = ` { "bytecode": "00000000060000000100000002000000020000000300000005000000020000000105000100000001000000fe00000002000000030000000400000000000000000300000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000010200000030644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000050000000000000000000000000000000000000000000000000000000000000000000000", "functionType": "secret", + "isInternal": undefined, "name": "constructor", "parameters": [ { @@ -38,6 +39,7 @@ exports[`should compile the test contract 1`] = ` { "bytecode": "00000000020000000000000001000000010000000100000000000000000100000030644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000001000000000000000000000000000000000000000000000000000000000000000000002a", "functionType": "open", + "isInternal": undefined, "name": "openFunction", "parameters": [], "returnTypes": [ diff --git a/yarn-project/noir-compiler/src/compile.ts b/yarn-project/noir-compiler/src/compile.ts index 1d43d9a4d86b..1288cf53b6fd 100644 --- a/yarn-project/noir-compiler/src/compile.ts +++ b/yarn-project/noir-compiler/src/compile.ts @@ -51,6 +51,7 @@ export class ContractCompiler { functions: contract.functions.map(noirFn => ({ name: noirFn.name, functionType: noirFn.function_type.toLowerCase() as FunctionType, + isInternal: noirFn.is_internal, parameters: noirFn.abi.parameters, returnTypes: [noirFn.abi.return_type], bytecode: Buffer.from(noirFn.bytecode).toString('hex'), diff --git a/yarn-project/noir-compiler/src/noir_artifact.ts b/yarn-project/noir-compiler/src/noir_artifact.ts index bdf786693b64..f861b70fc2b8 100644 --- a/yarn-project/noir-compiler/src/noir_artifact.ts +++ b/yarn-project/noir-compiler/src/noir_artifact.ts @@ -25,6 +25,10 @@ interface NoirFunctionEntry { name: string; /** The type of the function. */ function_type: NoirFunctionType; + /** + * Whether the function is internal. + */ + is_internal: boolean; /** The ABI of the function. */ abi: NoirFunctionAbi; /** The bytecode of the function. */ diff --git a/yarn-project/noir-contracts/src/artifacts/child_contract.json b/yarn-project/noir-contracts/src/artifacts/child_contract.json index faf4aebfea1a..97d8e627cfaf 100644 --- a/yarn-project/noir-contracts/src/artifacts/child_contract.json +++ b/yarn-project/noir-contracts/src/artifacts/child_contract.json @@ -4,6 +4,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [], "returnTypes": [], "bytecode": "H4sIAAAAAAAA/9XbRW/jUBiF4TTTdpjLzAx2bCf2YKfDzExpps4w/f9Nc9REqrrtyeK9kmV7E50nSuwL3/1fKBSqhd3W0TiKjaOzed2679p339283tta9xvNcxSU4zivlPIwCreCUlZLkyBOauU0TMMkTbZLaRTlaZxWslpWCbIwjvKwnmRRPdhtPXs+Kzhga2fOXkjOPkjOfkjOAUjOQUjOIUjOYUjOEUjOUUjOMUjOcUjOCUjOSUjOKUjOaUjOGUjOWUjOOUjOeUjOBUjORUjOJUjOZUjOFUjOVUjONUjOdUjOAJIzhOQsQXJGkJwxJGcCyVmG5KxAcqZtylnclzM4WAs7jOYMYi4azRcg5kNG80WIudNovgQxdxnNlyHmbqP5CsTcYzRfhZh7jeYNiLnPaL4GMfcbzZsQ84DRfB1iHjSab0DMQ0bzTYh52Gi+BTGPGM23IeZRo/kOxDxmNN+FmMeN5nsQ84TRfB9injSaH0DMU0bzQ4h52mh+BDHPGM2PIeZZo/kJxDxnND+FmOeN5mcQ84LR/BxiXjSaX0DMS0bzS4h52Wh+BTGvGM2vIeZVo/kNxLxmNL+FmNeN5ncQc2A0v4eYQ6P5A8RcMpo/QsyR0fwJYo6N5s8Qc2I0VyHmstG8BTFXjOYaxJwazV8g5sNG8zbEfMRoziHmo0ZzHWI+ZjR/hZiPG83fIOYTRvN3iPmk0fwDYj5lNP+EmE8bzb8g5jNG82+I+azR/AdiPmc0/4WYzxvN/9pgTptn7WPSvh7tc9G+D+2D0L6AVp286qg3G4fqbFV3qjpM1SWqTk91a6rjUl2T6nxU96I6ENVFqE5A6+ZaR9a6qtYZte6mdSity2idQvP2msfWvK7mOTXvp3kwzQtpnqTaODSO1rhS4yyNO9QPV79U/TT1W/Qe13tNz3k99/Qc0P9CvxN9bzsboWaB1E4AAA==", @@ -12,6 +13,7 @@ { "name": "pubStoreValue", "functionType": "open", + "isInternal": false, "parameters": [ { "name": "new_value", @@ -32,6 +34,7 @@ { "name": "pubValue", "functionType": "open", + "isInternal": false, "parameters": [ { "name": "base_value", @@ -52,6 +55,7 @@ { "name": "value", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "input", diff --git a/yarn-project/noir-contracts/src/artifacts/easy_zk_token_contract.json b/yarn-project/noir-contracts/src/artifacts/easy_zk_token_contract.json index 17104bd794c3..783c0c2f76ab 100644 --- a/yarn-project/noir-contracts/src/artifacts/easy_zk_token_contract.json +++ b/yarn-project/noir-contracts/src/artifacts/easy_zk_token_contract.json @@ -4,6 +4,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "initial_supply", @@ -29,6 +30,7 @@ { "name": "getBalance", "functionType": "unconstrained", + "isInternal": false, "parameters": [ { "name": "owner", @@ -49,6 +51,7 @@ { "name": "mint", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", @@ -74,6 +77,7 @@ { "name": "stev", "functionType": "unconstrained", + "isInternal": false, "parameters": [ { "name": "contract_address", @@ -123,6 +127,7 @@ { "name": "transfer", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", diff --git a/yarn-project/noir-contracts/src/artifacts/ecdsa_account_contract.json b/yarn-project/noir-contracts/src/artifacts/ecdsa_account_contract.json index 98f3b2ede5a8..ae4b2b6458fd 100644 --- a/yarn-project/noir-contracts/src/artifacts/ecdsa_account_contract.json +++ b/yarn-project/noir-contracts/src/artifacts/ecdsa_account_contract.json @@ -4,6 +4,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "signing_pub_key_x", @@ -39,6 +40,7 @@ { "name": "entrypoint", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "payload", @@ -100,12 +102,13 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "stev", "functionType": "unconstrained", + "isInternal": false, "parameters": [ { "name": "contract_address", @@ -149,7 +152,7 @@ } } ], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/artifacts/index.ts b/yarn-project/noir-contracts/src/artifacts/index.ts index 03bf391ca4f9..5d4e5d6c9f62 100644 --- a/yarn-project/noir-contracts/src/artifacts/index.ts +++ b/yarn-project/noir-contracts/src/artifacts/index.ts @@ -4,6 +4,7 @@ import { ContractAbi } from '@aztec/foundation/abi'; import ChildJson from './child_contract.json' assert { type: 'json' }; import EasyZkTokenContractJson from './easy_zk_token_contract.json' assert { type: 'json' }; import EcdsaAccountContractJson from './ecdsa_account_contract.json' assert { type: 'json' }; +import LendingContractJson from './lending_contract.json' assert { type: 'json' }; import NonNativeTokenContractJson from './non_native_token_contract.json' assert { type: 'json' }; import ParentJson from './parent_contract.json' assert { type: 'json' }; import PendingCommitmentsContractJson from './pending_commitments_contract.json' assert { type: 'json' }; @@ -28,3 +29,4 @@ export const SchnorrSingleKeyAccountContractAbi = SchnorrSingleKeyAccountContrac export const UniswapContractAbi = UniswapContractJson as ContractAbi; export const PendingCommitmentsContractAbi = PendingCommitmentsContractJson as ContractAbi; export const PokeableTokenContractAbi = PokeableTokenContractJson as ContractAbi; +export const LendingContractAbi = LendingContractJson as ContractAbi; diff --git a/yarn-project/noir-contracts/src/artifacts/lending_contract.json b/yarn-project/noir-contracts/src/artifacts/lending_contract.json new file mode 100644 index 000000000000..2030a3fba3cd --- /dev/null +++ b/yarn-project/noir-contracts/src/artifacts/lending_contract.json @@ -0,0 +1,360 @@ +{ + "name": "Lending", + "functions": [ + { + "name": "_borrow", + "functionType": "open", + "isInternal": true, + "parameters": [ + { + "name": "owner", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [ + { + "kind": "field" + } + ], + "bytecode": "H4sIAAAAAAAA/+1ZX0/bMBC/JG3YtIkN9od1DGgLtNO0SXaT0OSNpz1Pe+G5KQFVqkCCIvEJ+NgIW7XF1UQNbc+hlTjJspO0vzvfn5+Vyx8A2IexOGK4YlTUWl9XjWtfreXswVNx1HysZraYcJcOi+WYuzB2mHIWB0lqA1uLg3xbUetNMT6J8VmML0jnBzW/Rb910T0PYel7LkyKb2EPPpDnBpO5+QbtA4z9rqu9+LR6Q6mrCpPiGNfHOf6Utm6qdb83HP67SYeD/t+bi/5ocHmBo6zRdQS9nN2Z9yvIE2tqXUX39P/W0GxaTVa2GNMMe8COwjDrdjIe8B7rJGkcsTBKj2Ie8yiOTjtxEGRxGHeTNOmyhIdBxs+iJDhT4F/p7OxoKtPOkdj3YnxUs5QtMb7BI/WZQk15W2CHOvS6hmxfV/Oq04CP9qHFpAGPOE4Ss0qMiWkbUOwgJxaA9EtqeafW16PLq9559j/rneadHI7hHnPtIVdqt2Ju0b/Vz1aWR77T2RmYPCKxTR7ZFuMHlMcj22CXR3aQ7a88Mre88shYrPKIa4BT19oOHRab2wd8+uNdgbFn08n6HVEquoPHd0ap9NbQSV1EOACFB0N36sHAd4HukNmj2yOzncQbsPxJXBcYDSghietGEjdKSOINwiSuEyZxA+wlsUvsQ8KC45T7hnnztaAgmjBu4lkviCZMdgKlUtsFsaTB5L/ATmKY/luUBJpARwL7hFiU/rN9KtZg+UngQGAcQgkkIBXhU1EqtU0CNaAriAPCJD6E1TkVKYt3pn0XJC7Mm68FuC2B0YYSCqIFk6diu4SCeLFgFtj121JiUJ+KLUL/tQmxZvIfe77/qBunLUI7cdN0ms1sMSFvhprEQk3YhO/iVptTuln4gt+Wue1msG78LlOT9r1aqybtydVglM3apZXPzJit7Necnxbs1DZK7AcOgq5xLSMAAA==", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "_deposit", + "functionType": "open", + "isInternal": true, + "parameters": [ + { + "name": "owner", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [ + { + "kind": "field" + } + ], + "bytecode": "H4sIAAAAAAAA/9VWS0/CQBCetrRIMKj4QPRP7PYB2xsnz8aL5xaKISGQIPx9426cicPSi2EbYZLJzG7bb17br30GgA78iKfV19pCn9ahtY7QNzaAQ/HQTtCK40T67rBETbpHY6elFCrJyyawSTzW2xb6fa23Wu+03rOYV2g77F6f7QUMi/Z82JeogRoicH42hDmbF6wOsOrtYS2R27ipiRXCvnjWelLTT5NrH/1psVy+7srlYvqyW023i/WKT5nQaYJBTXX2fot1oo1+yPbouTazdtbOXluOaY89EaM0rcZxJRNZiDgvVSbSrBwpqWSmslmskqRSqRrnZT4WuUyTSs6zPJkj+IO7PGOiMmqOwf7Seo3WyEDrI/xSny2uKW8AzVAH+UOWew/tudNAxOogsWkgcDwngxk6xuS0DWx2UDMLYPENtXTR/9yuN8VH9VYVs7ovh2e1x/YD1kpqK+cWupeuNcojERyeS16Eqziu3zm7Ib7jfG8cYg0d1m7PqcsOzj/9esimOYf45ZS44BJ95IL3zWJb/ZUMzDV7Zmf70/DUQJ6Uo8H+BisjRrhMDQAA", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "_repay", + "functionType": "open", + "isInternal": true, + "parameters": [ + { + "name": "owner", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [ + { + "kind": "field" + } + ], + "bytecode": "H4sIAAAAAAAA/9VYyU7zMBCeJG34f4HY924IXsBuEprcOHFGXDg3JaBKFUhQJJ6Ax0bYwiOmJiKUjlsYyfLEab9ZPfbkBAD24J08NXw1aobH57r1HBpezwF8Js/MZ2YWs5H0+bBEibozY8e5FGmU5S6wkTzi25rhN9XYUmNbjR0ic83M/8lvfbIWECxc82GSQgc2hMCeG0Ln5j9iB1j2rhpbQl65sZZVh0nyrOezEn9qXTcNP+iPRhdP+Wg4OH+6G4yH93c0yoiOEQxKrLPXa8QTS4avkzX83xKZba3Zti3FtMMeidM4LnrdQkayL7pZniYiTvLTVKYySZPrbhpFRRqnvSzPeiKTcVTImySLbgz4Lp+eEZYydI7GflVj3cyadInch4/SZxN3ydsDN6UD+QOi+6qZ/3oZCIkdSHYZCJjjpDHrzJi0bAOJHZTEAoh8XVqWDf84vn/o3xaXRf+67OTwLPfYfEBciW6ltQV/i++c1hHfAufeawfg7nrxbVz59etDhdFw6WS822lBL/Bx19NCny2Z3JuIBqDyYOh9eTDIQ+A7ZBp8NgrXSbwBvz+JmwqjBXNI4qaVxK05JPEGYxI3GZO4Be6S2Gf2YWNRdlckLvw0Xytw2wqjA3PYEG2Y7OA7c9gQCwtmhV7HjhLD9t+sRaDN6L8OI9ZU/hPf9x/3icjpP9oeutSZu+2zC4s/bY5W+IXx1uH0Go5t0QK/fknXbS+2uL+pHV0xvGlHrx6G42LaflS/s2P2Z79bHTnQE3XU2G/ThVYYzxcAAA==", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "_withdraw", + "functionType": "open", + "isInternal": true, + "parameters": [ + { + "name": "owner", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [ + { + "kind": "field" + } + ], + "bytecode": "H4sIAAAAAAAA/+1a3W/aMBA/QqGbNnVr99F1HeWj5auFySZJSd76tOdpL3smNJ2QUCt1VNpfsD97mq3aqvFQ08DZIRonWXYS+N35fPc7B+wDAIV7KbDmsLYlxvK6pF2XxZj3RfhXCqK/ED1ZTaiDh0UWmLsythdRErhhZAJbSkHx7ZYY77H2hrW3rL1TdL4S/XPls45yr6hgyXsOzEvZwBzKgB4bhMfmM2UeoM13R8yljKvX47pKMC8F7fpigT+5rXtiPB5Np1/voulk/OXuejyb3FyrqyzR5QoWF8xOv7+leGJbjEvKPfm9baXXrUZLWxVTX3aXnHtePBzE1KUjMgijwCeeH50HNKB+4F8OAteNAy8YhlE4JCH13Jhe+aF7JcDf49k5kFQmncOx/7D2WvRc9ln7AA/Upws25e2DGeqQ4wPF9h3R550Gyso8pOg0UEReJ45ZQsZUaRuUtYMFawGKfk4tL8T45+zmdvQj/haPLhdVjoLmHn1cVFwp3apyi/ysfJZbHvmIZ6er8wjH1nnkkLVPYI9HDsEsj1QU2zc8srRseORejPKIo4Fj59oBHhZZ2gf08cdHDKNq0snyHZEr+g0P74xc6S9NJ3YSqQuQWBiGjxYGegR4RaaKN0diOoh3Yf2DuMYw6mAhiGtaENctBPEuYhDXEIO4DuaC2EH2YTWreScELiwbrwm4DYZxDBYSogHzvwRypaYTIrPFTLCLGAoM3X+rkkAD0X/HiFip/Eee7j/siojpv80WlJAThtEEC2TFFanVmyvN0xb0BDHwmmCuev+PW9AWw2iDhSBuaUHchnxtQVuIQdwGc0GMvQVtZjXvjLagHYbRBQsJ0YH5LWjXQkJktpgJdg0MBQb2FrSD6L8uIlYq/yWI6apYgfWviqcM4wwskABXpFZFrtQ0CVQALyFOEYP4DPJTFTGTN9W8M6qKPYbRBwsJ0YP5qti3kBCZLWaCXR7koyr2EP3XR8RK5T/ydP9hV0RM/6n/25u0Gftcj04sTtoYTfAL4ru40R+n5P/VGR5vpKbPI8izB+t0TuClGItzAt9vJ7M47UEB/kxfs9weKPpswE5pI8f+C/xq7dOwLQAA", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "borrow_private", + "functionType": "secret", + "isInternal": false, + "parameters": [ + { + "name": "secret", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "borrow_public", + "functionType": "open", + "isInternal": false, + "parameters": [ + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [ + { + "kind": "field" + } + ], + "bytecode": "H4sIAAAAAAAA/9WaaU/bQBCGlzQHVGoawn2H+6brK7Y5DQV6fOpfSEKoUNO0asnfR9jiXTExFl+yizQrrZ61IetnZyf2KMl3IUQontpQ3HNxz2Osjgup4yLGtKnjCHRk3XXbvt22HKsh7bAZeNL1mvXACiwv8G7swHHagRv4YTP0ZWi5Ttu69ULnVj61UTKXHLCZ9Kwy8Rxj4jnOxHOCieckE88pJp7TTDxnmHjOMvGcY+I5z8RzgYnnIhPPJSaeNSaey0w8V5h4rjLxXGPiuc7Ec4OJ5yYTzy0mnttMPHeYeO4y8dxj4rnPxPNAo2filnx2VyOuD3GvgKNgFRwDx8EJcBKcAqfBGXAWnAPnwQVwEVwCa+AyuAKugmvgOrgBboJb4Da4A+6Ce+A+eEDOf0riKvqb7j20BI9cs5l4Okw8XSaeHhPPOhNPn4lnwMQzZOJ5yMTziInnMRPPEyaep0w8z4T+mreC+ZJ6L6n9LNAGHdAFPbAO+mAAhuAheAQegyfgKXgmnmvOKO7nov97dPXd+mtxlYM1a0jo33/djhXNe6/aBRm/B0cyYl4k40iPh13UHydZIK4jxFmtpxz34bh/wPHfRuvX+b+fvd/t7v1/Gph3on8jaSLmyAXyqf+nwVN/K4mXPwzRlhkiQ1rX3JHQd/e60DjXZ31rlFm/2qEbryuWOp2p7yUZq4TLZeSEgXfbi9xLx7EsDCe+iU26NDDvldCX/KbWfaV/j14th+RgTWtMi+L5jWLSOSfMxFbXvnm+fdPwGy2TMYiE/hthQnXzu477l7h/jfs3so6PIH1q0yd5+on/RmWQNFUGDZN1iNR6y1hLUe913eRaBdHf0g+AKCOeiWsV41aj0/nRa3buWte9buv+7k+X7rKaPV130dWlz+dJJEoYF8g59boSofF6TV0gSddH3/DVKG4sAAA=", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "constructor", + "functionType": "secret", + "isInternal": false, + "parameters": [], + "returnTypes": [], + "bytecode": "H4sIAAAAAAAA/9XbRW/jUBiF4TTTdpjLzAx2bCf2YKfDzExpps4w/f9Nc9REqrrtyeK9kmV7E50nSuwL3/1fKBSqhd3W0TiKjaOzed2679p339283tta9xvNcxSU4zivlPIwCreCUlZLkyBOauU0TMMkTbZLaRTlaZxWslpWCbIwjvKwnmRRPdhtPXs+Kzhga2fOXkjOPkjOfkjOAUjOQUjOIUjOYUjOEUjOUUjOMUjOcUjOCUjOSUjOKUjOaUjOGUjOWUjOOUjOeUjOBUjORUjOJUjOZUjOFUjOVUjONUjOdUjOAJIzhOQsQXJGkJwxJGcCyVmG5KxAcqZtylnclzM4WAs7jOYMYi4azRcg5kNG80WIudNovgQxdxnNlyHmbqP5CsTcYzRfhZh7jeYNiLnPaL4GMfcbzZsQ84DRfB1iHjSab0DMQ0bzTYh52Gi+BTGPGM23IeZRo/kOxDxmNN+FmMeN5nsQ84TRfB9injSaH0DMU0bzQ4h52mh+BDHPGM2PIeZZo/kJxDxnND+FmOeN5mcQ84LR/BxiXjSaX0DMS0bzS4h52Wh+BTGvGM2vIeZVo/kNxLxmNL+FmNeN5ncQc2A0v4eYQ6P5A8RcMpo/QsyR0fwJYo6N5s8Qc2I0VyHmstG8BTFXjOYaxJwazV8g5sNG8zbEfMRoziHmo0ZzHWI+ZjR/hZiPG83fIOYTRvN3iPmk0fwDYj5lNP+EmE8bzb8g5jNG82+I+azR/AdiPmc0/4WYzxvN/9pgTptn7WPSvh7tc9G+D+2D0L6AVp286qg3G4fqbFV3qjpM1SWqTk91a6rjUl2T6nxU96I6ENVFqE5A6+ZaR9a6qtYZte6mdSity2idQvP2msfWvK7mOTXvp3kwzQtpnqTaODSO1rhS4yyNO9QPV79U/TT1W/Qe13tNz3k99/Qc0P9CvxN9bzsboWaB1E4AAA==", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "deposit_private", + "functionType": "secret", + "isInternal": false, + "parameters": [ + { + "name": "secret", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "owner", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "deposit_public", + "functionType": "open", + "isInternal": false, + "parameters": [ + { + "name": "owner", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [ + { + "kind": "field" + } + ], + "bytecode": "H4sIAAAAAAAA/9WaaW/aQBCGp5QjqVRKyH2T+058gp0TmoZeX/oXgJIqKqVVG/5+FVu8qwwOyhd2I81Ko2fNsX52ZrFXwFciCqnfXkWRiiKNvjrOJI6z6POmjquga5U9r11x2rZrNywnbAa+5fnNcmAHth/4353AdduBF1TCZlixQttz2/atH7q3Vr8V2VjWiM2k56QQzykhntNCPGeEeM4K8ZwT4jkvxHNBiOeiEM8lIZ7LQjxXhHiuCvEsCfFcE+K5LsRzQ4jnphDPLSGe20I8d4R47grx3BPiuS/E80CI56EQzyMhnsdCPE80esZu8Xd3JYxXiOJ/FBNgEZwEp8BpcAacBefAeXABXASXwGVwBVwFS+AauA5ugJvgFrgN7oC74B64Dx6Ah+AReAyesOfj4tk02HTX0CEZa80V4ukJ8fSFeJaFeFaEeAZCPEMhnqdCPM+EeJ4L8bwQ4nkpxPNKiGeV9O95C2o86u/9HNAFPdAHy2AFDMAQPAXPwHPwArwEr8AqPe45a1G8p8Hf0dVv68/l1Rqt2QXSX3/djhOaa6/aNeu/AceH5DzL+lU9Hk5Wf56sDHMdZ85qPvkoxqJ4i+M/jdbP2t8fvV/t7v0/npjXNFhIvhBT7ATpxOt58tRzOXr6xxBtK4OGSOsau0b6rl7XGsf6oG+O1rB/7fDC68qlTmfue8P6asGlhqwJA5+2J2svmcc8GV74Jop0Y2DcOulb/KbmXddfo2e3Q9ZoTWtOs/T4QTHpnCIzudVVt6brN/yyZ7RuNdJ/IYypLn4fo/gUxecovrB5vAP5XZvfyZN3/BfaBlmmtkFjbB6UmG8ec8nqPa8XnytDgy15A6gOyWfsWkS/1eh0vvWanbtWvddt3d/97vIqq9GT+y4+u+TjaZaJHPoZ9ph6X47R+H5NnSBerg+FrzDKbiwAAA==", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "init", + "functionType": "open", + "isInternal": false, + "parameters": [], + "returnTypes": [ + { + "kind": "field" + } + ], + "bytecode": "H4sIAAAAAAAA/+1Y204CMRAdl4sSDQhyR0D/oN0L7L7xDb74vMhifDJBHvwCP9vYhjYMzQrBnW72wUmazl4yPTM9nU7mEQDGsJMLMRwxykrXzxXjuap0LPp5oWaPzXw/mbsJ93jM3GgZBswPlrOQhzwIg5Ubel4S+uE8WkZzFnHfS/g6iLw128ktssWyCbeJs0mHk12o2DrKnozBtxhNNUtpiXH3yx6k+ceyCW8R+weIR1LaYnQQ/rqaa+gfLVWkL4gwVeljxioIaw1hdpCP8nuJdl1X2qwQ25T4y3AoJu8WSNfrX4lxrfSP7fsmfk2ekniFKVA2wuKkhApQmGqwD2sZvdP/6m+XkHI0Fmpm2YQ7hnHq89ams8X+HAN+/HNX2OjZDLJOEHKhL9gnDLnop7Em8SE62ICTl8P86OXAu0B30fTofGS2SdyB4pO4L2wMIAcS9w0SD3IgcYeQxH1CEg/Azs2NhZrMlJgx3iHSzasQc8JChcJN7plxrIPFg2Frk4YW7I6Ajvy2/B7R79FB1i1yTPNKApS3L8Z7j/T/JJDRZk8FlNruGIqdBKTfY/o9spoEKGNqu5xtWIrpWRhPlLMTYWMKOZSzciFczspFbZezjXPIcqKcnRASb0rnI8ONPyxFb+ilYabA6y2j+CXeHxjqOFDunem7bnzJ7lTJwJ9TY9O13djUTcwiNRxvlK4ajs+bt21ybsdR/lcy3lntKEKKo9p21gT1YAGnxiht/wCOJB9jPhoAAA==", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "repay_private", + "functionType": "secret", + "isInternal": false, + "parameters": [ + { + "name": "secret", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "owner", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "repay_public", + "functionType": "open", + "isInternal": false, + "parameters": [ + { + "name": "owner", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [ + { + "kind": "field" + } + ], + "bytecode": "H4sIAAAAAAAA/9WaaW/aQBCGt5QjqVRKyH2T+058wjonNA29vvQvAHGqqJRWbfj7VW3xrjI4Vr6wG2lWGj1rjvWzM4u9Ar4KIQIxaK+iyESRRV8d5xLHefRpU8d10LWqnhfWnNB27ZblBG3pW57frkpb2r70bx3puqH0ZC1oBzUrsD03tO/8wL2zBq1MxrJGbCY9J5l4TjHxnGbiOcPEc5aJ5xwTz3kmngtMPBeZeC4x8Vxm4rnCxHOViWeFiecaE891Jp4bTDw3mXhuMfHcZuK5w8Rzl4nnHhPPfSaeB0w8D5l4HjHxPGbieaLRM3aLv7urYLxSFP+imADL4CQ4BU6DM+AsOAfOgwvgIrgELoMr4CpYAdfAdXAD3AS3wG1wB9wF98B98AA8BI/AY/CEPB8XzxbDTXcNHcFjrblMPD0mnj4TzyoTzxoTT8nEM2DiecrE84yJ5zkTzwsmnpdMPK+YeNaF/j1vSY0nBns/B3RBD/TBKlgDJRiAp+AZeA5egJfgFVgXj3vORhTvxfDv6Oq39efyao3W7JLQX3/djhOaa6/aNem/AcdTcp4n/boeDyevP09WjriOE2c1n2IUY1G8xfHvVudH48/3/s+w9/CXJua1GC4kXYgZcoJs4vU0eeq5gnj6xxBtK0OkSOsauyH0Xb2uNY71Qd8crbR/7dDC68qlTmfqe0P6asFlUtaEgU/bk7WXzGNRGF74Jop0Y2DcptC3+E3Nu6m/Rs9uh6zRmtac5sXjB8Wkc0aYya2uuoW3sip9T5rMQUPovxDGVBe/j1F8iuJzFF/IPN6B9K5N7+TJO/4LbYMsU9ugMTIPkZhvEXPJ6z2vF58rJ4Zb8gZQT8ln7FpGv9Pqdr/12937TrPf6zzc/+rRKqvRk/suOrvk41mSiQL6OfKYel+B0Ph+TZ0gXq7/AWHz1NduLAAA", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "update_tot", + "functionType": "open", + "isInternal": false, + "parameters": [], + "returnTypes": [ + { + "kind": "field" + } + ], + "bytecode": "H4sIAAAAAAAA/9VaS27bMBCdyJ/WaNE0aRz//7WTFC1AWpIt7XyGbrroSm6UoqsCaRY5QY9dlITJmGKcKLaGhDQAIcoS3sw8viFliV8AgMLGjlhzWCuLvjyvaOdV0VdNnq/E0SULz4uX85i6NCLzcB34xPPXi4AG1A/863ngunHgBctwHS5JSD03pjd+6N6Qjb1XsEg2oybjPMGLkxwJbh2Bxzn4x9qJOHI7Ze3DE2OwKz+Szegpcn6g6IjbGWt1Jf534lhT7pFWVforpJiq+JyRihJrTYnZUXLk10u4fuccs4KMyeMvQ9J03a2UvvT/mrU3ov/n7vdt9DP+GkfXqgTKGi3ODqpAoakGW1rLym/yXnntFewojZU4kmxGHQ0cu97O8LDIwRzQ5y+fM4yGSZLlBMEd/YXthMGd3ms+kYsoMQCpi8Py2cWBngPeQtPAy5GYFnEd8i/iJsNogQURNzURtyyIuI4o4iaiiFtQHBEfQ/5F3GYYHbAg4rYm4o4FER8jiriNKOIOmBOxo3GYo4Kje+WdIlw4VK8puF2G0QMLBdGF5H/i3gsKorCDmYL12ZAw9uYvZRLoIo5FDxFrL/5SzOCqSINFlMibZDTQ7MW4KRrqM4wBWJgEuKN72E4CAzC6Kj4agKwF0UcU8QAKIWJuFCNWdx1GPyJzIh4yjBFYEPEQkivZCMw/2g0QRTxEFPEIURiOwismdw0xRsh6MCbkMcOYgAUhjyE5G09gK2RTg4D9OeEjmBlQ7EepMWLOE8RxweTP9CqEmPfhxfuEyUlsyjBmYKF4uaPvsC1e7rSv+XSQfc8QRXyBEZe38N3F5jsZz/ViBwfYK/EEgYP1Jm46ReRzBsUp5CK8KbxkGFdgoZC5I/VNIXdapDeFl4givsLLkagbA1TL+wd/x3C8U8AvPuwYMXWg0fnwkZ1/CS9p8VvaRDE3vYlCbpjI0+aGt6IvNjd8u/11F++7u4HfV9J+M7p7AXYkKrGzTnafDMQpY+TY/wGeo7n5qiYAAA==", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "withdraw_private", + "functionType": "secret", + "isInternal": false, + "parameters": [ + { + "name": "secret", + "type": { + "kind": "field" + }, + "visibility": "private" + }, + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [], + "bytecode": "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", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + }, + { + "name": "withdraw_public", + "functionType": "open", + "isInternal": false, + "parameters": [ + { + "name": "amount", + "type": { + "kind": "field" + }, + "visibility": "private" + } + ], + "returnTypes": [ + { + "kind": "field" + } + ], + "bytecode": "H4sIAAAAAAAA/9WaaU/bQBCGlzQHVGoawn2H+6brK7Y5DQV6fOpfSNKkQk3TqiV/v8IW74qJsfiSXaRZafWsDVk/O7OxR0m+CiFC8dhG4p6Lex5jdVxIHRcxpk0dR6Aj667b9u225VgNaYfNwJOu16wHVmB5gffdDhynHbiBHzZDX4aW67Stjhc6HfnYxslccshm0rPKxHOCieckE88pJp7TTDxnmHjOMvGcY+I5z8RzgYnnIhPPJSaey0w8V5h41ph4rjLxXGPiuc7Ec4OJ5yYTzy0mnttMPHeYeO4y8dxj4rnPxPOAiechE88jjZ6JW/LZXY24/o97BRwHq+AEOAlOgdPgDDgLzoHz4AK4CC6By+AKWANXwTVwHdwAN8EtcBvcAXfBPXAfPAAPwSNy/kMSVzHYdOfQEjz2ms3E02Hi6TLx9Jh41pl4+kw8AyaeIRPPYyaeJ0w8T5l4njHxPGfieSH017wVzJfUe0ntZ4E26IAu6IF10AcDMASPwRPwFDwDz8EL8VRzRnG/FIPfo6vv1l+KqxyuWSNCf/51O1Y05161KzJ+C45lxLxIxpEeD7uoP06yQFzHiLNaTznuo3F/h+M/jdbPy78/+r/avft/NDBvxGAi6UbMkQvkU/9Pg6f+VhLPfxiibWeIDGldc0dC393rSuNcH/WtUWb9aocmXlcsdTpT32syVhsul7EnDLzbnu29dBzLwvDGN5GkawPz3gh9m9/Uum/05+jFckgO17TGtCie3igmnXPCTGx15c3pBH7Lco3mLRL6b4QJ1c3vNu6f4v457l/IOt6D9KlNn+TpJ/4rlUHSVBk0StYhUustYy1Fvdd1k2sVxGBLPwCijHgmrlWMW41u91u/2b1r3fZ7rfu73z2aZTV7uu6iq0ufz5NIlDAukHPqdSVC4/WaukCyXR8AROUEJm4sAAA=", + "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" + } + ] +} diff --git a/yarn-project/noir-contracts/src/artifacts/non_native_token_contract.json b/yarn-project/noir-contracts/src/artifacts/non_native_token_contract.json index 269caeadbfff..02df0f9fc5bb 100644 --- a/yarn-project/noir-contracts/src/artifacts/non_native_token_contract.json +++ b/yarn-project/noir-contracts/src/artifacts/non_native_token_contract.json @@ -4,6 +4,7 @@ { "name": "addUnshieldedBalance", "functionType": "open", + "isInternal": false, "parameters": [ { "name": "amount", @@ -27,6 +28,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "initial_supply", @@ -50,6 +52,7 @@ { "name": "getBalance", "functionType": "unconstrained", + "isInternal": false, "parameters": [ { "name": "owner", @@ -70,6 +73,7 @@ { "name": "mint", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", @@ -114,6 +118,7 @@ { "name": "mintPublic", "functionType": "open", + "isInternal": false, "parameters": [ { "name": "amount", @@ -162,6 +167,7 @@ { "name": "redeemShield", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", @@ -192,6 +198,7 @@ { "name": "shield", "functionType": "open", + "isInternal": false, "parameters": [ { "name": "amount", @@ -215,6 +222,7 @@ { "name": "stev", "functionType": "unconstrained", + "isInternal": false, "parameters": [ { "name": "contract_address", @@ -258,12 +266,13 @@ } } ], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "transfer", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", @@ -294,6 +303,7 @@ { "name": "unshieldTokens", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", @@ -318,12 +328,13 @@ } ], "returnTypes": [], - "bytecode": "H4sIAAAAAAAA/+2dB7wkWVX/6/WL3f1yzmnCm5k3obtfntiTZyftzuxsDuzM7Jt1ZQMss8iKsAqCZHAJIiiICIIiCCK4SBADCoKABEGSiAQRRLIg4r9vzz37fl1T82aHPve93/1v3c+nPvfWqap7vufcUFW3blUNJYLgJxVBMZiosBpU2bSsV4fWa2wag6znbTyRmZ6cnJ/JzWcnsiczublTs1OZyalT07PZ2ezU7NStudmJifnZydmZuVNzM5m57OTEfPbM1NzEmcy50AV5ZcoMLjm7PeHs8YSz1xPOPk84+z3hHPCEc9ATziFPOIc94RzxhHPUE84VnnCu9IRzlSecqz3hHPOEc40nnGs94VznCee4J5zrPeHc4AnnRk84N3nCmfGEM+sJZ84TzglFTsNmxsSGbX7theWnhaXDxp027rJxt417bNxr4z4b99t4wMaDNh6y8bCNR2w8auMVNl5p41U2Xm3jMRuvsfFaG6+z8biN19t4g4032niTjTM2zto4Z+MJOH6ysEwFpUG7DKcDP+rajCecs55wznnCudkTzi2ecG71hHObJ5zbPeHc4Qln3hPOnZ5w7vKEc7cnnHsC/WveZpufud4z137TNp6x8ayN52y82cZbbLzVxttsvN3GO2yct/FOG++y8W4b7wkWrjn3FpZ9QWnQ9uF+PR9mxYcJm9/+oPS+wYQDheUyu19DcH4I25cpL2QPBG7qcqDKOZV1mHfOYd4TDvOedJj3lMO8px3mPeMw71nT9uqC6KCj4/w2FOcb57sU+fqRd3beJbecW03caNMHC8uhwnK4sBwpLEcLy+WF5YrCcqywHC8sVxaWE4XlqsJydWG5Btie0HouTkKe9cGCTM7xaZDJ9hTIcLvEsr0OZLK9FmSyvQZksr0aZLK9CmSyvRJksj0BMtleATLZHoT0m5C3caa8MItzE5XyzBibW8GOIGRvY1B6LaykN2d0NQWlITzvMg/pZvBrqy7LpGFpuQSWVmBp02XJmDzblfM0eXQAv9gq7GnY3g62dehyFO8J2oJSn8p6B+iN7VfVG9sf+GN/EmRNy8ySBoYWdyyT6SC6HijrySVDNpuwWD+PLF3KNhuWzktg6QKWbl0WZ+ecHuAXW4U9DduxzfXochTreXdQ6lNZ7wG9sf2qemP7A3/sT4KsbZlZ8FzQ6Y6leM6JqgfKejLJCD3mnvIa0NmnbJvJc1DZDlN2/cFCuB/sGgRbXOgdCOntC+k1+/QCw/3AKsdWwj5NqYVyeJSVpUFHwp092cXO8YMRLJVELFVELNVELDVELLVELHVELEkilhQRS5qIpZ6IpYGIpZGIpYmIpZmIpYWIpZWIpY2IpZ2IpYOIpZOIpYuIpZuIpYeIpZeIpY+IpZ+IZYCIpWKZWZLB+WPr5v7xmtTC9lVWjs/5V9s0zgcYs2mcN7AG8hTZWrBZZOtsGucrjNs0zmsQ7lUgG7Lp1SAbtukxkI3Y9BqQjdr0WpCtsOl1IFtp0+MRfFiGckzexpnyQrEMUU8e1kVXChjGCVgGiFj6iVj6iFh6iVh6iFi6iVi6iFg6iVg6iFjaiVjaiFhaiVhaiFiaiViaiFgaiVgaiFjqiVjSRCwpIpYkEUsdEUstEUsNEUs1EUsVEUslEUsixCJ9XxCUzoFwwYchD+l1ESyVRCxVRCzVRCw1RCy1RCx1RCxJIpYUEUuaiKWeiKWBiKWRiKWJiKWZiKWFiKWViKWNiKWdiKWDiKWTiKWLiKWbiKWHiKWXiKWPiKWfiGWAiGWQiGWIiGWYiGWEiGWUiGUFEctKIhbXY3iXwuJ6fs7FWB7OHKsNVp6AYzbaNM6x2mTTOMcqA3mKLAs2i0w+cIZzrOTDZDjHSrg3gEzmR20Emcyj2gQymW+VAdlqm86CTOZv5UC23qYnIviwDOWYvOhSKEPUk4d10ZUChgkClnEilpVELCuIWEaJWEaIWIaJWIaIWAaJWAaIWPqJWPqIWHqJWHqIWLqJWLqIWDqJWDqIWNqJWNqIWFqJWFqIWJqJWJqIWBqJWBqIWOqJWNJELCkiliQRSx0RSy0RSw0RSzURSxURSyURSyLEcqE5nC74MOQhnYtgqSRiqSJiqSZiqSFiqSViqSNiSRKxpIhY0kQs9UQsDUQsjUQsTUQszUQsLUQsrUQsbUQs7UQsHUQsnUQsXUQs3UQsPUQsvUQsfUQs/UQsA0Qsg0QsQ0Qsw0QsI0Qso0QsK4hYVhKxrCJiWU3EMkbEsoaIZS0RyzoilnEilvVELK6fEVwKi+v5xRdjeThzxOVnzAk4Rn6ijHPE5efHOEd8FvIU2RzYLLLNNo1zxLfYNM4RF+4pkMn87mmQyTzwGZDJfPFZkMm88jmQyfzzzSCTn11vieDDMpRj8jbOlBeKZYh68rAuunCO+BYClgkilvVELONELOuIWNYSsawhYhkjYllNxLKKiGUlEcsKIpZRIpYRIpZhIpYhIpZBIpYBIpZ+IpY+IpZeIpYeIpZuIpYuIpZOIpYOIpZ2IpY2IpZWIpYWIpZmIpYmIpZGIpYGIpZ6IpY0EUuKiCVJxFJHxFJLxFJDxFJNxFJFxFJJxJIIsVzoHRQXfBjykN4cwVJJxFJFxFJNxFJDxFJLxFJHxJIkYkkRsaSJWOqJWBqIWBqJWJqIWJqJWFqIWFqJWNqIWNqJWDqIWDqJWLqIWLqJWHqIWHqJWPqIWPqJWAaIWAaJWIaIWIaJWEaIWEaJWFYQsawkYllFxLKaiGWMiGUNEctaIpZ1RCzjRCzriVg2ELFsJGLZRMSSIWLJErHkiFgmiFgmiVhcP4O8FJaKZWZ5OO+4bbPyBByz3abxHbcdNo3vuOUhT5HtBJtFtsum8R233TaN77gJ9zaQyftp20Em77HtAJm875YHmbwXtxNk8v7cLpBttendEXxYhrtCOjLlhWIZop48rIsufMdtNwHLFiKWSSKWCSKWHBFLloglQ8SyiYhlIxHLBiKW9UQs40Qs64hY1hKxrCFiGSNiWU3EsoqIZSURywoillEilhEilmEiliEilkEilgEiln4ilj4ill4ilh4ilm4ili4ilk4ilg4ilnYiljYillYilhYilmYiliYilkYilgYilnoiljQRS4qIJUnEUkfEUkvEUkPEUk3EUkXEUknEkgixpGB7E8h22jS+C5LXZZ40eW5XzTN7Gp9nB+APDHlIbwf7tunaV3wktQd0CZfoScN2nG+9R5ejWDe2heyXdeR7uKxDHrEOe8Q64hHrqEesKzxiXekR6zqPWNd6xLrGI9Yxj1hXe8S6yiPW9R6x5jxizXrEmvGIdZNHrBs9Yt3gEeukR6ybPWKd84h11iPWGY9Ypz1infKIdesys+rrnZpOhvSasNh4HbLsVWXJZEyePcp5mjz2Ab/YKuxp2I7fC9mny1Es371BqU9lfR/oje1X1RvbH8T2x/bH9sf2x/bH9sf2x/bH9sf2x/bH9sf2x/bH9sf2x/bH9sf2x/bH9sf2x/bH9sf2x/bH9sf2x/bH9sf252P7Y/tj+2P7Y/tj+2P7Y/tj+2P7Y/tj+2P7Y/tj+2P7Y/tj+2P7Y/tj+2P7Y/tj+2P7Y/tj+2P7Y/tj+2P7Y/tj+2P7Y/tj+4PY/tj+2P7Y/tj+2P7Y/tj+2P7Y/tj+2P7Y/tj+2H5hkZAAlr0OWIIQSxDhFwmVRCxVRCzVRCw1RCy1RCx1RCxJIpYUEUuaiKWeiKWBiKWRiKWJiKWZiKWFiKWViKWNiKWdiKWDiKWTiKWLiKWbiKWHiKWXiKWPiKWfiGWAiGWQiGWIiGWYiGWEiGWUiGUFEctKIpZVRCyriVjGiFjWELGsJWJZR8QyTsSynohlAxHLRiKWTUQsGSKWLBFLjohlgohlkohliohlmohlhohllohljohlMxHLFiKWrUQs24hYthOx7CBiyROx7CRi2UXEspuIxeH/py+ZpWKZWZLB+f/qTsL2BMj22XQlyPbbdBXIDth0NcguAztFdtCma0F2yKbrQHYY0hIfsekUyI7a9C6QXW7TO0F2hU3nQXbMputBdtymd4DsSpveBjLxEfpUfLQPZOKj/SATHx0AmfjoMpCJjw6CTHx0CGTiI/SZ+OgIyKQOHgWZ2H45yGT+xBUgk3kMx0Am8wmOg0ye64vPjK1PSi1sl32xjl0ZkY+ksa2I7ryNM+WFYltBPXlYF10pYDhOwLKHiGU3EcsuIpadRCx5IpYdRCzbiVi2EbFsJWLZQsSymYhljohllohlhohlmohliohlkohlgoglR8SSJWLJELFsImLZSMSygYhlPRHLOBHLOiKWtUQsa4hYxohYVhOxrCJiWUnEsoKIZZSIZYSIZZiIZYiIZZCIZYCIpZ+IpY+IpZeIpYeIpZuIpYuIpZOIpYOIpZ2IpY2IpZWIpYWIpZmIpYmIpZGIpYGIpZ6IJU3EkiJiSRKx1BGx1BKx1BCxVBOxVBGxVBKxJEIsF/ommgs+DHlIH4tgqSRiqSJiqSZiqSFiqSViqSNiSRKxpIhY0kQs9UQsDUQsjUQsTUQszUQsLUQsrUQsbUQs7UQsHUQsnUQsXUQs3UQsPUQsvUQsfUQs/UQsA0Qsg0QsQ0Qsw0QsI0Qso0QsK4hYVhKxrCJiWU3EMkbEsoaIZS0RyzoilnEilvVELBuIWDYSsWwiYskQsWSJWHJELBNELJNELFNELNNELDNELLNELHNELJuJWLYQsWwlYtlGxLKdiGUHEUueiGUnEcsuIpbdRCx7iFhcz6G6FJYriVgqlpnlQt+KOxbyFX5jrRFkiYj8ZA6Y7G/mPiWbz887EZH3sQgG9NHlIVsy5YWij1BPHtZFF34j7BgBy5VELMeJWPYQsewmYtlFxLKTiCVPxLKDiGU7Ecs2IpatRCxbiFg2E7HMEbHMErHMELFME7FMEbFMErFMELHkiFiyRCwZIpZNRCwbiVg2ELGsJ2IZJ2JZR8SylohlDRHLGBHLaiKWVUQsK4lYVhCxjBKxjBCxDBOxDBGxDBKxDBCx9BOx9BGx9BKx9BCxdBOxdBGxdBKxdBCxtBOxtBGxtBKxtBCxNBOxNBGxNBKxNBCx1BOxpIlYUkQsSSKWOiKWWiKWGiKWaiKWKiKWSiKWRIgF/yGK/8BMhI6ttcfLehPYckTXluIjLvlvp+GQexfRY8IhSIf/9Wk4D4f2M5wHdTmzYQ7RfxBkByI4DwHnZaH9DOd+Xc7JZIjDhIrQeh7S+4FF+Z+9GaP3BOSfBx2o9ypdvVnUW2EX0SHySkiPyYkY9jNB6r8wm932ReyH6QOhY9KwfZ9jm/cCRx7WRZfpJ/vB1n0R3N3ALdsPA7eLdrUfOES/6MF/NWM/5OL/0vtC/pN1LMumkL8csEymI3Rj3cNvNbnoj/F/2VH9Mdb3dATnidB+ruoNcoh+7I+vieC8CjivDu1nOK/V5Sz2x8hhwmL98bXAcr0uS7E/vgHyz4MO1Hujrt4s6pX+WHSIvBLSl0EfdeNC8qH6L8xmt+si9sP0NaFj0rD9Osc2Xw8ceVgXXaY/3g62XhfBjf2xbL8auF20q2uBI6o/Fg7sh5TratF/14X8J+tYlm0hfzlgmUxH6Hbl++su4nuRyX5VYPuF3q9JKHMu1n8lgDW8n7lnvAfeh0lGHCPNoRJkabBVZPWQp8jwW6AikzG5WpDJObwOZMggsTCkQCYMaZAJQz3IhKEBZMKA7xEJQ1MEH5ahHJO3caa8UCxD1JOH9UawuyKCT7ajz8ROLDfxB5ab+A3LDb+zKzIpByw3GXeOKjf0qTCg74UBy0gYsCyFAcscGSQWhmbgNMfKM4O8jTPlhZzR1RKUhsXaXyswSt8oxxu+dl2+Yj1qC7HIuuhKA0OTM5bs6fQFdEtIgO42Vd2L94ltESyVRCxVRCzVRCw1RCy1RCx1RCxJIpYUEUuaiKWeiKWBiKWRiKWJiKWZiKWFiKWViKVimVku9P0G2Y73JuFrQSOT+Vd4PyDzw/C+Qeav4f2F3IM3gywRwSfXeO0gk2utDpDJNU8nyOTaowtkcg0g+s1xL2o+nzURwdoVYROWoejO2zhTXiiWIerJw7rowvvLLgKWViKWFiKWZiKWJiKWRiKWBiKWeiKWNBFLioglScRSR8RSS8RSQ8RSTcRSRcRSScSSiGDp0GUpvnov17MmyPVlB3AIE/7HSfkeofgsGzmGQS8+l+xRLguTR2+E/T1gv+jvdVgOSchf8jbtojG9oLNfV+ekyXNI2Q5TjvKunQn3g134DxgXegdDevtDes0++N+i+4FVjq2EfXrTC+XQadP4jqVc05uyGw7pwntI2SbPlEYc2C46RJ/4fARsHwHbh+GYdrBd9hkC26ubF45bocte/GzNqM0rAdz4/5dVujqLc6LkHe8A8h8F2RikpU+QY/DdefzviIu+CTlEP/6TbK2uzuL8pjVBaVhs/Ab/L7JOlyXj6nw3Dvxiq7CnYTv+K3Bcl6N4DbAuKPWprOO/SWL7VfXG9gf+2H+hZ/3K/cyi49PrIlgqiViqiFiqiVhqiFhqiVjqiFiSRCwpIpY0EUs9EUsDEUsjEUsTEUszEUsLEUsrEUsbEUs7EUsHEUsnEUsXEUs3EUsPEUsvEUsfEUs/EcsAEcsgEcsQEcswEcsIEcsoEcsKIpaVRCyriFhWE7GMEbGsIWJx+OzmklkqlpnlQvOPZXs3yGR8eg3I5Jv0YyBLROiQseNxkMkYruRhxlFf23y+vkSEvvEILte+RD15WBddKWAYJ2BZS8SyhohljIhlNRHLKiKWlUQsK4hYRolYRohYholYhohYBolYBohY+olY+ohYeolYeohYuolYuohYOolYOohY2olY2ohYWolYWohYmolYmohYGolYGohY6olY0kQsKSKWJBFLHRFLLRFLDRFLNRFLFRFLJRFLIsQifV8QxHO1L8QSz9WOZonnakezxHO1o1lSRCxpIpZ4rnY0SzxXO5olnqsdzRLP1Y5miedqR7PEc7WjWeK52tEs8VztaJZ4rnY0SzxXO5plmIhlhIhllIglnqsdzRLP1Y5miedqR7MwzdUeJ2JZT8RSscwsF5vDvh5kidCxZjz4CzDnfMLKE3DMpE3jP4GmbBr/CTQNeYpsxqZrQDZr0/g/njmbrovgnwDZBpueBNlGm54C2SabngZZxqZnQJa16VmQ5Wx6LoIPy1qOyds4U14oljXqycO66EoBwxwBy3oilnEilrVELGuIWMaIWFYTsawiYllJxLKCiGWUiGWEiGWYiGWIiGWQiGWAiKWfiKWPiKWXiKWHiKWbiKWLiKWTiKWDiKWdiKWNiKWViKWFiKWZiKWJiKWRiKWBiKWeiCVNxJIiYkkSsdQRsdQSsdQQsVQTsVQRsVQSsSQiWGZ0WXL4fCIAJgx5SOOzhOkQs+GbcuCr6RCLrIuuNDCsc8iSjtDtQE8uGbLZhMXKBJ8DyXOiaeCbUPZDBeiRfGVddKGvNjhkSUfodqAnlwzZbMJiZYLP8Dbb9CTwbVH2QwXokXxlXXShrzY6ZElH6HagJ5cM2WzCYmUi+s1xW216M/BtU/ZDBeiRfGVddKGvNjlkSUfodqAnlwzZbMJiZSL6zXHbbXor8O1Q9kMF6JF8ZV10oa8yDlnSEbod6MklQzabsFiZiP4kyLcD305lP1SE9OdhXXShr7IOWdIRuh3oyaFvJSxWJqLfHLcrtN3w7Vb2QwXokXxlXXShr3IOWdIRulMgawGZbMfr6D02PQ2yvTY9CbJ9Nr0ZZPtteivIDtj0dpBdFrL5Qu8JHwztlykvLDpf6mAESyURSxURSzURSw0RSy0RSx0RS5KIJUXEkiZiqSdiaSBiaSRiaSJiaSZiaSFiaSViaSNiaSdi6SBi6SRi6SJi6SZi6SFi6SVi6SNi6SdiGSBiGSRiGSJiGSZiGSFiGSViWUHEspKIZRURy2oiljEiljVELGuJWNYRsYwTsawnYtlAxLKRiGUTEUuGiCVLxJIjYpkgYpkkYpkiYpkmYpkhYpklYpkjYtlMxLKFiGUrEcs2IpbtRCw7iFjyRCw7iVh2EbHsJmLZQ8Syl4hlHxHLfiKWA0QslxGxVCwzy4W+Rybbd4PskE3vAdlhm94LsiM2vQ9kR216P8gut+kDILvCpi8D2TGbbgPZcZteDbIrbToBMkmjvTKP8BDIZD7fYZDJvLojIJP5bUdBJvPMLgeZzPe6AmQy7+oYyFI2fRxkUj/EHsPR0LKw/XCEnWILfvdNbMbvvp2APEV2lU3XgOxqm8bvvl1j0/jdN2FEv4kt6F+xGctBfHMCZOLDq0Amvr4aZFIm10TwYZuSY/I2zpQXim0K9eRhXXSlgOEaApbLiFgOELHsJ2LZR8Syl4hlDxHLbiKWXUQsO4lY8kQsO4hYthOxbCNi2UrEsoWIZTMRyxwRyywRywwRyzQRyxQRyyQRywQRS46IJUvEkiFi2UTEspGIZQMRy3oilnEilnVELGuJWNYQsYwRsawmYllFxLKSiGUFEcsoEcsIEcswEcsQEcsgEcsAEUs/EUsfEUsvEUsPEUs3EUsXEUsnEUsHEUs7EUsbEUsrEUsLEUszEUsTEUsjEUsDEUs9EUuaiCVFxJIkYqkjYqklYqkhYqkmYqkiYqkkYklEsFylyzKDOo0+uSfD+ZIHVXVmT+MczQD8gCEP6YPAcljX/ozRey3knwcdqPc6Xb1Z1FthF9Eh8kpIP0MulGA/E3bZWJhNvTkUsR+mT4SOScP2Q45tPgwceVgXXaYveBLYeiiC+2rglu1XAnePMrfJ4yBwiH78RpNuvTzXRtB2ExZrI4eBRbncim3kesg/DzpQ7w3Kfke90kZEh8grIf1yqDc3LCQfqjfCbNrItRH7YTrchtKw/VrHNmNbzcO66DJt5AVg67UR3Pgehmw/Dtwu2gi2bdGPbUS3Xp5rI2i7CYu1keuARbncim3kRsg/DzpQ703Kfke90kZEh8grIf1GqDc3LSQfqjfCbNrI9RH7YTrchtKw/XrHNmNbzcO66DJt5NVg6/UR3Hj+k+3HgNtFG8G2LfqxjejWy3NtBG03YbE2cgOwKJdbsY3cDPnnQQfqfZSy31GvtBHRIfJKSL8X6s2jFpIP1RthNm3kxoj9MB1uQ2nYfqNjm7Gt5mFddJk28jaw9cYIbjz/yfYrgNtFG8G2LfqxjejWy3NtBG03YbE2chOwKJdbsY3cAvnnQQfqPansd9QrbUR0iLwS0h+HenNyIflQvRFm00ZujtgP0+E2lIbtNzu2GdtqHtZFl2kj7wdbb47gxvOfbL8cuF20EWzboh/biG69PNdG0HYTFmsjjwIW5XIrtpFTkH8edKDe08p+R73SRkSHyCsh/VWoN6cXkg/VG2E2beSWiP0wHW5Dadh+i2Obsa3mYV10mTbyWbD1lghuPP/J9qPA7aKNYNsW/dhGdOvluTZyS1AaFmsjJ4FFudyKbeRWyD8POlDvvK7eLOqVNiI6RF4J6R9DvZlfSD5Ub4TZtJFTEfth+pbQMWnYfsqxzdhW87Auukwb+RbYeiqCG89/sv0IcLtoI9i2Rb/oSQIH/u/AZb8q+co6lmVLyF/6LNnT6Qjdpuyqm92WA9rfG1EOIjsFTI3pBaZqXaaM5CtBnkWIHnxuUwNxrQPf1EVw1AKH6Mf/DyV1OXKiK8yRBI46SAtHWpej+HpTfQRHGnSLfvy/ToMuR/GVr8YIjgbgEP34P5smXY7ia3DNERxNwCH68f8xLboc0yaP1ggO/Ped6Mf/tbTpchSf57VHcLQBh+jH/6N06HIUXyHtjODoAA7R3wkcXbocxddquyM4uoBD9OP/P5T7+OJptjeCowc4RD/+b6NPl6N4+uiP4OgDDtGP/7cY0OUonloHIzgGgEP04/8khnQ5ipehwxEcQ8Ah+oeBY0SXYz4Z4jBhsXuHEWAZ1WUpnvtXgK5hG4ueNGzHa4AVuhzF68LRkP2yjnwPl7XGI9Y6j1hTHrHWe8Ta6BFrs0esrR6xtnvE2ukRa7dHrL0esfZ7xDq4zKxJkA2DLBFirg0u/D3VhAPuIMQtAcc8wvuZcaGnwvc7qyOOkeuvSpDJOE5VhP34/U78L7rI5JjaiPzQRzUhWzLlhaKPUE8+KP0Ptwn4fcxadywZn/LUHqPE781ivUhFyNIRMrkWxHom41dYb+U6DOutjC9F1dskxHJMCmRyTBpkwlAPMmFtAJnUpUaQyb2CMNUGbsZAUZeExfoL9IPYj/c1ymOjxXaZCrHIehriOvCTG5ap6XSE7tSS+GFqWn+8d2oa24uExcq+AewUW2+bP3v07rPzj6uA4yXPq0NlYkIC9pN2VAWyqpDMhGpI4/OLNByXCunENo7tT/Q3ApuDvjGH7T8ATgz5CLuwP6iGbXW6fCXnO8lX1kVXGhgq3bFMpiN0O9CTSUboMfXsLfAcMKVsm4PnNMV5AHjteD/Y1QD+c6G3PqQ3FdJr9sHz9/3AKsdWwj7vbl4oh3fYNL4ri+fxxpCuC7VnfD6EbRAe1Z93jWpCC6QToWPwWQ8+N5dxh7yNM+WFyWSIw4TF+g0c92jXZSmWN/7jPg86UG+nrt4s6pX5JqJD5JWQ/ig8LMTnU1IHhBm/ZYD7YboldEwatrc5thmf8eWD85+lmbr6PrC1LYK7FrhlO47jKT+bLD7Lx2ektSG2JNiB5zPlZ5OL+q8DfFId8pcDluL5LKzble/bL+J7kcl+eL7Dc0gCOCuVORfrv0TXhcZCloMlaiwE7/vwnjAROtbUr+fCmEkq4ph0hD45N+K952LnQLxexHtEkUmbr4vgX8r7Vryfb47gw7JWnkdSLGvUk4d1PK9XhPiWkyUR4SvZjvVFfH6x+oLPxkQmZY31JXwPi9cheM8fvi7CeoX1QLiwvixWr7D+4TwwkQkXnucu1H9J/nkbZ8oLi/YZ9SH+ICi9V1pulioilmoilhoilloiljoiliQRS4qIJU3EUrHMLBe6VpPteN0l56KLnUfl3IbnUbw2EFn4nsvI5F4Iz6N4PS4x3pOKDO9TRCb8aK/w47lV+PEcLPx4rhZ+vL4QfjzfC38ryIQf7RH+dpAJv9hjOL4P18TCeLGyibom7oQ8RSbzPrFsZC4Alo3My8SyEUb0m9iC/hWbsRzEN50gEx92gUx83Q0yKZOeCD5sU3JM3saZ8kKxTaGePKyLLrwm7iFgSROxpIhYkkQsdUQstUQsNUQs1UQsVUQslUQsiRALnss6QCbnFzzvhsep8RyK53E5r+H5Pvw+Db6fhtcPiRAzXo/gOU/KF8+NGuNKwiTPbZXnSmV8yRP9GTUfKxHhz6hxy0udjyV+r1K2B1mQVfRgO8VxBO15YGgrcuAcsOqQTxw8q86J/8Mc+D4iXtsKh/Lz6+K7iVHjbCmIRb/D+9Lznnnjc+ao+9J4PDAeD7wUlng8MB4PvBSWeDzQn/HA8Dx2uZ7F6yG57sXxJ7k+xvEn0YPXxHLtitfOcu3aEpEf+qg5ZEumvFD0EerJw7rowvGdFgKWNBFLioglScRSR8RSS8RSQ8RSTcRSRcRSScSSCLFc6NwT9QxKxnDwvk/GevCZkYwJ4TlRxo5wnEXGZnCcJWr+iXDhOU/KF8eVhBXHn6R94DiV8ON4lvQvnWCjgznMOTyHS3g47zzgOR3n1LiYJ9QYYpF10ZUOzn++6YIlHaHbgZ5cMmSzCYuVCdZDqac4L075O0Alc7ck3/BccPRVpUOWdBA9D11ZTy4ZstmExcoE+zPpE1zOO64ISucd52Ed+0RhqHLIko7Q7UBPLhmy2YTFyiRqDjbO21+uOdjC4HI++IXmYCvrySVDNpuwWJngOU/Odfg9COVvZWXx3QnJV9ZFVzrE4IolHaHbgZ5cMmSzCYuVCT63kuda+N0L7W9DVgSl3y/Lw7roQl/VOmRJR+h2oCeXDNlswmJlEvWdTPy+h/I31Ipl0htikXXRhb6qc8iSjtCN33DD6/q+kMzw9DvwjeiRfGW9H3wjDL0OWdIRuvEf2Hgv0x+SGR7lb94VfdMf8o2sD4BvhKHPIUs6Qjd+cw/v6QZCMsMz6MA3okfylfVB8I0w9DtkSUfoxn/K433sYEhmeJS/UVj0zWDIN7I+BL4RhgGHLOkI3eiHdgI/4PjBcvmhk8APwpBaRj90E/ihG9JL6Qf8dmg9yGR7I8iGbRrH/0ZsuhVkozaNc8LD318zspU2jXOvVtn0IMhWh5iNbMymh0G2xqZHQLbWpkdBts6m8RtX4za9EmQyFrUKZDIWshpkci8+BjK5F1wDMrkXWQsyuRZeBzK5FhMms0/42lJ1gpCE8KSuicz05OT8TG4+O5E9mcnNnZqdykxOnZqezc5mp2anbs3NTkzMz07OzsydmpvJzGUnJ+azZ6bmJs7YzI8o5nWtos01UQ4FmZYeReYM8l4H6apQ2ZmAA3baNgUhPWE/NgaOK6uLQrrOQb7XB3qV35Xd1+uXUSYIVZBA0Q8JRfuPKnLdoOi/peqcNJmRF/9SF3dOZeZ5g3Wodr43Bdydk7H7Jv0ycsJ6vWUN51uuX39S4UenrHmiu1mxXDT9t1SdsqL9JZ0y/mYu7pTLzPNm61DtfG8JuDtlY/ct+mVU0jmx+1SCdid6QNHmKxS5Tgb+daKazMh7CtJxJ1pmnietQ7XzPR1wd6LG7tP6ZeTsyvZ0oH9l+9NH4JXtrYrl8lMPr2wV7S/plOchHXfKZeZ5q3Wodr5nAu5O2dh9Rr+MnF7ZavrUsOFb8AcLy08LyyEbH7bxERubcFth+TlrF34R4Aq7z22w7+2F5ecj9r3c7nO7jU0jenRhuSMoDdoPpk4o5nWnYpkuVWesyFzSGd8F6bgzLjPPO61DtfO9O+DujI3dd+uXkTcPpq5S5HpM4N+VoiYz8j4W0nHnVGaej7EO1c73noC7czJ236NfRk5Y77as2rfvptVo2i1Bu1PWPNE9TrFcNP23VJ2yov0lnfJZSMedcpl5Ps46VDvfewPuTtnYfa9+GTm9fdf2qQTmB1PXKHI9PvCvE9VkRt5fgHTciZaZ5+OtQ7XzfULA3Ykau5+gX0bOrmyfEOhf2SYegVe29ymWi6b/lqpTVrS/pFP+RUjHnXKZed5nHaqd7xMD7k7Z2P1E/TJyemWr6dPwg6ljwbkHRcdtfKWNTwQLD5t+qbA8KTj/YdM1dp9fgn2fHJz7pWt436vtPk8OFh5M/XJh+ZWgNGj/zq9D0XeHFPN6SuBfx67JjLxPhXTcsZeZ51OsQ7Xz/dWAu2M3dv+qfhmVdOzaT801X+d8WuCuUbiyOVNeKKmTmfJCtkr5TkX7TsrY+jQH+WrbfaF6kykvqJ7Ijyvm9fTAvxO5JjPy/hqk4xN5mXk+3TpUO99nBNwncmP3M/TLyOmJXHP62zMDP07kJxzVyUx5IVtDfiI3tj7TQb6adieC0s4y3F4y5YXsQcW8jgVu+ohLsje7+OZnFfJ4duDwBFRhC8koerpVlLBKnxDSqX1lRlqY2bolurK9aMOdWbThZp8V6HUCz1bMq85hh6J90dAe8HcCzynk8dxgCToBowg7AaPUdSfQrtggnqNYiZ8b+HNW1Gy8l2T3RSpu8LPW14vk+7xCHs8PlqBBPM8qkfXnL0GDWLbCvAhXKuGmYmifFZ+n6L/nK+Z1Sf7LPHz/aZ8RNf2HnMxj4C9Q9N9SjcUpMpeMxf06pOOxuDLzfIF1qHa+DwTcY3HG7gf0y8ibDuWFge7FSGD9adIvtPGLoNxk2xEbvzhYmElxKa8Sv6Sw/EZw4VeJXwL7vrSw/GZw4VeJXxoszNh4WWF5ecS+R+0+L7OxYf2twvLbQWkHg0G7rh4K9DvSimCho3xFYXllYfkdsAF//pUI2VcD6bwSl4POOlMdlP7QXYLY0xiU1j8lvRP48ecA/B1E+C0A/eZjzvJh7dvmz15x76k7bj99aP6+qDKrjMg3AbZWh/aL+vF9yceitSvtiwPdSlsTlFZY0xhfaePfsbH5O9qrCsvvBqVB+wGBYoPMvkqR69WBmwaJQbueaDIj7+9BOr5KLDPPV1uHauf7moD7KtHY/Rr9MnLC+mLLqv30rZ7lYcNFOF+smNdrFctF039L1Skr2l/SKf8+pONOucw8X2sdqp3v6wLuTtnY/Tr9MnI6ZqnpU7w9dcn8isAP374ycNNZvR7S+I/x8K2X77fI+E91CXiLHLotvXL+9D3zZ+G21ISozjyqY8db06oI/3l7ayoGmLEhcyv6+mBhHOoPCssfBqW3sBi07VN8D99JB37E+iTQzbdYFlWOfas4JSjjilFzvNAV42EPGBVf6Cg5sbwB0vhD23Anuownm0lXJ5s6sCMI2SsnG/l5+113n739zH1H773jjtvP3D5/69G7z86jG8NDnJhVEHKduBbPOTWhfNC1ss3peeiBwM3FAQZt5jcEbtrEH0E6vjMsM883WIdq5/vGgPvO0Nj9Rv0ycsL6gGXVHq5r9GS4TnOCwJsUy0XTf0vVKSvaX9Ip/zGk4065zDzfZB2qne+bA+5O2dj9Zv0ycjqkpOnTn2WWy1sKy58EF57l8hbY962F5U8d+UHu1LVPUm8L3NQD7RlXmm8/vl2xXJbqxKLIXHJi+TNIxyeWMvN8u3Wodr4PBtwnFmP3g/pl5E2H8g5FX0rZPGjL6R02/nMoN9l2wsbvDM6fwvlwPrr1rsLy7uD8k5t8dOtdsO97CstfROwrH916T7AwhfO9heUvI/a9yu7z3mBhCudfFZa/DpZuCufxQL8jxemAf1NY3ldY/hZsiKdw/swhnsJZCNl3BrqVFp9/mQprGuP7bPy3wcIUzr8rLO8PSoP28INig8z+nSLXBwI3DRKDdj3RZEbev4d0fJVYZp4fsA7VzveDAfdVorH7g/pl5IT1nZZV+3a72ZMx4Xcq5vUhxXLR9N9SdcqK9pd0yv8A6bhTLjPPD1mHauf74YC7UzZ2f1i/jJyOCWv6dKmmcP5N4Idv3xe46aw+Aul4Cue58P/FFE4Xt6ZigBkbMreiHwkWxqE+Wlj+MYincArfCeuTQDffJZnC6eKzeszjha4Yr/SAUfFTniUnlo9BOp7C+cidwvlg4ObiAIM288cCN23i45CO7wzLzPNj1qHa+X4i4L4zNHZ/Qr+MnLA+aFm1h+taPRmu05wg8EnFctH031J1yor2l3TK/wTpuFMuM89PWodq5/upgLtTNnZ/Sr+MnA4pafr0Z5nl8unC8s/BhWe5fBr2/Uxh+awjP8iduvZJ6nOBbicbrgcmfB7Scrfh07BcdYg9CM6/U2q064VhueMn77r17jv33T5/x61Rc0LQE5WhbXjjI9tKbnyUXeb0/xuKnzxX/YR/+xJdl2XKCyUDXOWWxRc0y9XD67IvBG6uy/4F0vF1WZl5fsE6VDvfLwbc12XG7i/ql9GSNa4vBm4a179COm5cZeb5RetQ7Xy/FHA3LmP3l/TLyOmIDOuVU+cj8Mrp3xTzcuW/hHL90zxhflmxXMM38KZszM13h40/b+MvBws35V8pLF8Nzr+BP2D3+Qrs+7XC8u+h/TAwTw+IeuT+SOmXfJgK0OEB4+eXgFGzb8qUF7J4Afd1SBPMMZtczjlmLXb93GP/3ffMnzx7/kP/xSaa4ftR+KB/2SecfUkvryW7vfp6oHuWkPAfkI5vr8rM8+vWodr5fiPgvr0ydn9Dv4ycsH7Jsmqfkro9edCveav+TcVy0fTfUnXKivaXdMr/Cem4Uy4zz29ah2rn+62Au1M2dn9Lv4ycPujX9KnvA9//Bem4Eygzzy9ah2rn++2Af+D72/pl9Igc+O59BA58f0cxL1f+Yx74/q5iuS7VCU1zkLICGKWef6+wfL+w/ABsiL9v9DMHP79vFAbLlBceeiqElcw80fm+jX8QLHyT6IeF5b9DHNonMcVGlP2hItePAjeNCIN2h6TJjLw/hnR8hV1mnj+yDtXO938C7itsY/f/6JeR09tsTZ+axoFnaFfMicAP32q/7e+K08WjaBec3/OE8/uB7kmqyhGnGQ34DvhBk1mbs8MTzs97wvldh5wmlounnxSW/wVd/TY2dwUy9QDfp5HzR9QsAbyjeCR8kQGnnQQhe2VqRrNdn7/z9rN77zp9z32POTt/6+G7b8MLxroI26Mubk3AKWPVEX4z+daG9jXbUrr255Ihu0U3hjykU8CS1mUpnivqQZdwpSGW7ejrel2O4o1tOmS/rNe701u0v+Ei9jdEcDQsof04ahRuN9gPyLYle4tOe3LBTwPdgnXF+X+ecJoMfeCs8IQz4QlnpSecVZ5wVnvCWeMJZ60nnHWecCY94Ux5wpn2hLPeE84GTzgbPeFs8oSz2RPOFk84Wz3hbPOEs90Tzg5PODs94ezyhLPbE84eTzh7PeHsU+SUGUPDNj8z7dSMs3XaWJb/s7ExxsQVNk7YuNLGVTautnGNjWttXGfjpI1TNk7buN7GDTZutHGTjZtt3GLjVhu32bjdxh027rRxl427bdxj414b99l4fWHpL6QHQiOk2mU46EldG/KEc9gTzhFPOEc94VzhCedKTzhXecK52hPOMU8413jCudYTznWecI57wrnewTVvs82v3177Ddp4yMbDNh6x8aiNV9h4pY1X2Xi1jcdsvMbGa228zsbjcq0J15wbCumNFaWzrE0cnsQT9mumvJBVfM3M2bd4OgPdspewCVZkEs0STZzKLderN2aSjkwYeczJ04/eec9t9945f9fZx6FjwrPJsCLirLOq0P7oPNm2bN9szpQXshsq9HqvTYp5ZRR7wqV6d0WTGXnxs1Xxuytl5mk8axyqnW9OsfK7sjtXoV5GTufZa/p0qf4AmQjc+Far3HKn56fOnD415dIHGxx0hCaWuZ0ThZXJwjJVWKYLy0xhmS0sc4Vlc2HZUli2FpZtUN+bbEw2t9zZ28kX+9sfvsulpPcUzuUPQv4M+w39aVh7bHr+rsfeO3/v/Lk3lPfde9fps7fffdfuk3fcgRVBlEiFuNh/CE3AFw6iXkyQ42ohdnZmS4Qy126BUxXueiGlfHPbC4w7Khy/J24cbRT9b7BwgR+lVPu6ekrh1DV/5lzYrnga3KFYMVxX4mkPKnG+wLhzKSpxPlSJdy5BJZ5WrMR5xUq806NKvNmDSryrwLh7KSrxrlAl3r0ElXizYiXepViJd3tUibd4UIn3FBj3LkUl3hOqxHuXoBJvUazEexQr8V6PKvFWDyrxvgLj/qWoxPtClXj/ElTirYqVeJ9iJd7vqGJo+w+Hlsq1eULRfwc8HKvXZEbey+Kxet1CuszBWP1B8rF6Y/dBz8bqtX0qIRHiLDfvSUXOQwqdiIzHL1XHp8EsAXkPxx2fbiEddtDxHSHv+IzdRzzr+I446viYZ3psU8zrqIdXj0cddaKXx52obiFd7qATvYK8EzV2X+FZJ6rp06XqBHY76gSOxZ2AbiEdc9AJHCfvBIzdxz3rBI572AnsddQJXBl3ArqFdKWDTuAEeSdg7D7hWSdwwsNOYL+jTuCquBPQLaSrHHQCV5N3Asbuqz3rBLR9GkBFRs6yv4WpaPOMos3XeDimco2jTvTauBPVLaRrHXSi15F3osbu6zzrRK97BHais4o2X+9hJ3q9o070hrgT1S2kGxx0ojeSd6LG7hs960Q1fWrY8DVEMxXBfBlhh4132ti8pX9TIX2zrSP4qtaM3WfWxnM23m3jvTbeb+OWwvKoQvqWUAsJ+6lc205WLE15lst5yhPO08odOda7k7ZunLLxaRubt+BuLaTnHdeVM56UwW2ecP6cw7pyxtaN22z8c1BXbi+kf95xXXm0J2VwhyecdzqsK4+2deMOG98JdeWuQvpux3XlMZ6UwWM94bzHYV15jK0bj7XxPVBXzFd6zjquK/d6UgaPd1AGcuN2r/X5421sXsP/hUL6CY59f58nvv9Fh76/z/r8F8H3Tyykf8mx75/kie+f7ND3T7I+fzL4/v5C+pcd+/5XPPH9Uxz6/lesz58Cvn9qIf2rjn3/NE98/3RPOH/NE85neML5TE84n+UJ57M94XyOJ5zP9YTzeZ5wPt8Tzhd4wvnrnnA+4AnnCz3hfJEnnC/2hPMlnnD+hiecL/WE8zc94XyZJ5wvd3APPWLze5S9d95m46fZ+Ok2/jUbP8PGt9r4dhvfZePH2fgXbPxEG99v46fa+Jk2fpaNn23j59j4uTZ+no2fb+MX2PjXbfyAjV9o4xfZ+MU2fomNf8PGL7Xxb9r4ZTZ+uY3HC8tvFdK/XbHwnFzGlyfsPjfZ+Lds3FpYXlFIv9LxeMPveFJPX+UJ5+96wvlqZc4wX6a8kL2+kMejHdj9e+R2313I45cd2P0aT+rlaz3h/H3yevSlQh5fc2D36zwpn9d7wvkHnnD+IXl9f6CQx9sc2P0GcrsfLOTxOQd2/5En9fKNnnC+yYP281YHdvcn3JSP1ssd82fOZE7derpov5bNf6xX1lkl/52ZzE06638+46DeDHpSbx5UtPnNivVmULneSNAu57d40n//iSecb/WE80894XybJ5xv94TzzzzhfNATznd4wvnnnnC+0xPOd3nC+W5PON/jCedfeML5Xk84/9IRZyLEmSkvFP+HoWXzX3lic0LR5r/2xOZKRZv/xhObqxRtfp8nNlcr2vy3nthco2jz33li815Fm9/vic04p6Rcmz/gic2vUrT57z2x+XcVbf6gJza/WtHmD3li8+8p2vwPntj8GkWbP+yJza9VtPkjntj8+4o2f9QTm1+naPM/emLz6xVt/pgnNv+Bos0f98TmP1S0+ROe2PwGRZs/6YnNf6Ro8z95YvMbFW3+lCc2v0nR5k97YvMfK9r8z57Y/GZFmz/jic1vUbT5s57Y/CeKNn/OE5vfqmjz5z2x+U8Vbf6CJza/TdHmf/HE5rcr2vxFT2x+haLN/+qJzX+maPOXPLH5QUWb/80Tm9+haPOXPbH5zxVt/oonNr9T0eavemLzuxRt/ponNr9b0eZ/98Tm9yja/HVPbP4LRZv/wxOb36to8zc8sfkvFW3+pic21wZ6Nv+nJzbXKdr8LU9sTira/F+e2JxStPnbnticVrT5O57YXK9o83c9sblB0ebveWJzo6LN3/fE5iZFm3/gic3Nijb/0BObWxRt/m9PbG5VtPlHntjcpmjzjx3YPGtj8x6Tea/HvOdi3vsw70GY9wLMPHkzb9zMozbzis08WzPv1MzDNPMSzTw9M2/NzOMy85rMPB8z78XMAzHzIsw8AfPc3DxHNs9VzXNG89zNPIcyz2XMcwozbm/Gsc24rhnnNON+ZhzMjAuZcRIzbmDuo819pbnPMvcd5jrcXJea6zRz3WLO4+a8Zvp50++ZfsC0C1NPjN/+HxcJXVFBCAUA", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "withdraw", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", @@ -361,6 +372,7 @@ { "name": "withdrawPublic", "functionType": "open", + "isInternal": false, "parameters": [ { "name": "amount", diff --git a/yarn-project/noir-contracts/src/artifacts/parent_contract.json b/yarn-project/noir-contracts/src/artifacts/parent_contract.json index 7e8f89b5b198..27c1819fc871 100644 --- a/yarn-project/noir-contracts/src/artifacts/parent_contract.json +++ b/yarn-project/noir-contracts/src/artifacts/parent_contract.json @@ -4,6 +4,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [], "returnTypes": [], "bytecode": "H4sIAAAAAAAA/9XbRW/jUBiF4TTTdpjLzAx2bCf2YKfDzExpps4w/f9Nc9REqrrtyeK9kmV7E50nSuwL3/1fKBSqhd3W0TiKjaOzed2679p339283tta9xvNcxSU4zivlPIwCreCUlZLkyBOauU0TMMkTbZLaRTlaZxWslpWCbIwjvKwnmRRPdhtPXs+Kzhga2fOXkjOPkjOfkjOAUjOQUjOIUjOYUjOEUjOUUjOMUjOcUjOCUjOSUjOKUjOaUjOGUjOWUjOOUjOeUjOBUjORUjOJUjOZUjOFUjOVUjONUjOdUjOAJIzhOQsQXJGkJwxJGcCyVmG5KxAcqZtylnclzM4WAs7jOYMYi4azRcg5kNG80WIudNovgQxdxnNlyHmbqP5CsTcYzRfhZh7jeYNiLnPaL4GMfcbzZsQ84DRfB1iHjSab0DMQ0bzTYh52Gi+BTGPGM23IeZRo/kOxDxmNN+FmMeN5nsQ84TRfB9injSaH0DMU0bzQ4h52mh+BDHPGM2PIeZZo/kJxDxnND+FmOeN5mcQ84LR/BxiXjSaX0DMS0bzS4h52Wh+BTGvGM2vIeZVo/kNxLxmNL+FmNeN5ncQc2A0v4eYQ6P5A8RcMpo/QsyR0fwJYo6N5s8Qc2I0VyHmstG8BTFXjOYaxJwazV8g5sNG8zbEfMRoziHmo0ZzHWI+ZjR/hZiPG83fIOYTRvN3iPmk0fwDYj5lNP+EmE8bzb8g5jNG82+I+azR/AdiPmc0/4WYzxvN/9pgTptn7WPSvh7tc9G+D+2D0L6AVp286qg3G4fqbFV3qjpM1SWqTk91a6rjUl2T6nxU96I6ENVFqE5A6+ZaR9a6qtYZte6mdSity2idQvP2msfWvK7mOTXvp3kwzQtpnqTaODSO1rhS4yyNO9QPV79U/TT1W/Qe13tNz3k99/Qc0P9CvxN9bzsboWaB1E4AAA==", @@ -12,6 +13,7 @@ { "name": "enqueueCallsToPubEntryPoint", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "targetContract", @@ -36,12 +38,13 @@ } ], "returnTypes": [], - "bytecode": "H4sIAAAAAAAA/+2dB3BTxxaG13KhhRpKSOgdTJEL2KZ3QiihhBJKwDYCHIxpdgi992ICgRBCIBBIAuSl9957L6T3vLz03uvbTf47Xt943rx5OqvRP093ZudfCbP6/rNHR6vVvdL7cUod180cRgK6JaDv3U703U5C3z682z2hacFO6emhjNRQSlpKdjA1KyezYzC9Y06nzJTMlI6ZHaekZqalhTLTMzOycrIyglkp6WmhlKkds9KmBv866lhjBcM8XHKeRMJZl4TzZBLOU0g465Fw1ifhbEDC2ZCEsxEJZ2MSziYknE1JOJuRcDYn4WxBwtmShLMVCWdrEs42JJzJJJxtSTjbkXC2J+HsQMIZJOFMIeFMJeFME+Q0bGZPrBHGq6nb77rVgtaG1oGeBK0LPRl6CrQetD60AbQhtBG0MbQJtCm0GbQ5tAW0JbQVtDW0DTQZ2hbaDtoe2gEahKZAU6Fp1v9P162jKn1Iz2EnxZFrGSScmSScWSScnUk4u5BwdiXh7EbC2Z2EswcJZ08Szl4knL1JOPuQcPZV8mveahjPrPfM2q8TNAOaCc2CdoZ2gXaFdoN2h/aA9oT2gvaG9oH2VSVrzn669VelD+kYDiCZ61NJOAeScJ5GwjmIhHMwCecQEs6hJJynk3AOI+EcTsI5goRzJAnnGSSco0g4R5NwjiHhHEvCeSYJ5zgSzvEknBNIOCeScJ5FwjmJhHMyCWc2CWcOCWeuIOd/+7n0AOip0IHQ06CDoIOhQ6BDoadDh0GHQ0dAR0LPgI6CjoaOgY6FngkdBx0PnQCdCD0LOgk6GZoNzYHmqpI9wim6hVTpQ3oOpyqOXJtGwjmdhDOPhPNsEs4ZJJz5JJwzSTgLSDhnkXDOJuGcQ8I5l4RzHglnoZJf81bDeGa9Z9Z+U6HToNOhedCzoTOg+dCZ0ALoLOhs6BzoXOg8aKEqWXMW6XaOKn3dtNF4VfrwxzUY3pFSU8nPvzRjLQLG2ko2P71jvtWvCK2g/rrG3j6SrH5PGY60JPk4BRMt1goWs+enim7ldauM27Ozc2f0mjutaGaooHCeHZh430TGWYPEWw+QUMZ93t95/1ZO/f3LCsQyQ5UBLTV2kZKrsPMFxzpXzmOwrG+SsCdeKpaSzDbvAqvvJVygjJxw8Gz7W+7541hFOU58F5O0wMG4C5Vc8rvyvVB+jv7jki0Y3iEa0yT196WQC+aAchNbqXnL1Yyd0rIyXcagSMkXQqOV0F+k22Ldlui2VLdlui3XbYVuK3Vbpdtq3dZYHqtC7Vf0gHWffzUQoSVS0NUSqbzlQ/n8VoGXJNnHzTGPlahKH/4Xh55lxNOw1kU/VDCnKFQUGlaUk5+X27+oILcwb1ZBn+z8fDsRvAfxEiK+DJP++xOsgJRDP9G6z/t/5Sx19soW8A0u/QxcotxVIaFxU9fqMda5DLK3oDcP9JsqWeCX9aDS62p7Av7Xl67Q1L+OtUruZXCdnMeg6yReqqI/idfrMTaoCCTxel8Sb4hAEi8VTOL1gkm8QfEk8UoV/Um8UY+xSUUgiTf6knhTBJJ4pWASbxRM4k2KJ4lXqehP4s16jC0qAkm82ZfEWyKQxKsEk3izYBJvUTxJvFpFfxJv1WMUqwgk8VZfEhdHIIlXCybxVsEkLlZuEkM6fgFBz4sEx9omGL9I7dVLMtu851n92F59mGNuQ0Clx92uonuv3vjeLj9HTvfqpWPqHQEfZ7hjLxYca4dA/Lz9+EgVvh3KTeE73+rHCl+YY+5AQKXH3amiu/AZ3zvl58hp4ZOOqXdE85keawTH2qX4Vo+SzDbvBVY/VkTDHHMXAio97m4V3UXU+N4tP0dOi6hkTCNVBCQ3cG3eC61+rAiEOeYmBFR63D0quouA8b1Hfo6cFgHJmEaqCEhugNu8F1n9WBEIc8wtCKj0uHtVdBcB43uv/Bw5LQKSMY1UEZD8AMHmvdjqx4pAmGMWI6DS4+5T0V0EjO998nPktAhIx9Q7/Hsq4Y4dEPS8TJBrv+A8R6qISjLbvJdY/VgRDXPM/Qio9LgHVHQXUeP7gPwcOS2i0jH1jmguossFuQ4qviIqyWzzXmr1Y0U0zDEPIqDS4x5S0V1Eje9D8nPktIhKxtSw2ZchmlMRzLc3rINugJqr9A/rdhn82JdqLcPfLIeugG6CboEWQ6vrdrluV6jShz9O4Xo7EqH5DJfzKAnnMSVbyO28O4LcOAo9BjVXwV2p2z+U21y5imQOribhvMZhrlyF3Lgaeo2VK9fqdp1ymyvXk8zBDSScNzrMleuRGzdAb7Ry5SbdblZuc+UWkjm4lYTzNoe5cgty41bobVau3K7bHcptrtxJMgd3OZgD743bnYj5XVBzGf7dut3jOPb3ksT+Poexvxcxv8+K/f26PeA49g+SxP4hh7F/EDF/yIr9w7o94jj2j5LE/jGHsX8UMX/Miv3juj3hOPZPksT+KRLOp0k4nyHhfJaE8zkSzudJOF8g4XyRhPM4CedLJJwvk3C+QsL5KgnnayScr5NwvkHC+SYJ51sknG+TcL5DwvkuCed7gpzee+jGGM98nmveO6+BPgl9Cvo09BnoldBroTdBb4feDb0f+jD0ceiz0Oegz0NfgL4IPQ59Cfoy9BXoq9DXoK9D34C+CX0L+jb0Hei70Pegybq9r9s/Vcnn5N7+8iL8zWHo+9Aaun2g279U6SPgm/9geEepb/MPN5c+FOSyPUvn/EeK47n5MQnnJyScn5JwfkbC+TkJ5xcknF+ScH5Fwvk1Cec3JJzfknB+R8L5PQnnDyScP5Jw/kTC+TMJ5y8knL+ScP5Gwvk7CecfJJxmQAbOOBLOAAlnPAlnAglnoiCnt1/YCOOZXzE1da8W9EPoR9CPoZ9AP4V+Bv0c+gX0S+hX0K+h30C/hX4H/R76A/RH6E/Qn6G/QH+F/gb12h9QE3yjcdAANB6aAE2MK/kF2STdL+e7kk56DsuT5FoFEs6KJJyVSDhPIOGsTMJZhYSzKglnNRLO6iScNUg4TyThrEnCWYuEs7aDNW81jJeEtV95aAVoRWgl6AnQytAq0KrQatDq0BrQE6E1obWgta01Zx3dPymu9BdHGPX/VK8/rsHwjpSaSn7+pRlrETDWFhzLfutR17pRERqhn+RNc/WTvEmWD+/w/JgvMTHXwlTG7dnZuTN6zZ1WNDNUUDjPDoz/d4rjrEHirQdIKOM+7++8f3P6E7eqDGipsevEyVXYuoJjnSxYrSP1lUGSzDbvKdaN2FcGhTmmmSQTUOlx6wkmvyvf9eLE58jpVwZJxtQ+pdElc0C5ia3UvHm/kuQyBnUcFEKj3o/U19c3GujWULdGujXWrYluTXVrpltz3Vro1tLK96pQ+xU9YN3nXw1EaIkUdLVEKm/5UD6/VVTpr8ISetwc81iJqvThf3HoWUY8DWtd9EMFc4pCRaFhRTn5ebn9iwpyC/NmFfTJzs+3E8F7EC8h4ssw6b8/wQpIOfQTrfu8/1fOUmevbAHf4NLPwIZx7qqQ0LiprTRj6ziHQfYW9OaB7F9oLetBpdfVDQVeurxfaG0l+DLYWjAxXCdxI4IkbqMZkyORxG18SZwcgSRuJJjEbQSTOJkoiZsRJHFbzdguEknc1pfE7SKQxM0Ek7itYBK3I0ri5gRJ3F4zdohEErf3JXGHCCRxc8Ekbi+YxB2IkrgFQRKbt7spkUjioC+JUyKQxC0EkzgomMQpjhJDOn721lK4nusLxi+VcK9ektnmTYvt1ctOUpqDvfr0KN+rN77TyfbqpWPqHQEfZ7hjNxDk7ChQRLz9+EgVPglm77B5O8UKn+wkdXJQ+DKivPAZ3xlkhS/DUeGL5jM9WgqOlUm4esx0VESzYkVUdpKyHBTRzlFeRI3vzmRFVDKmkSoC7RwVgS6xIiA7SV0cFIGuUV4EjO+uZEWgK2ER6OCoCHSLFQHZSermoAh0j/IiYHx3JysC3QmLQIqjItAjVgRkJ6mHgyLQM8qLwJ/JSVYEpGOqrES2OaPpB7cbC3ruRbin0stREe0dK6Kyk9TbQRHtE+VF1PjuQ1ZE+/wfFtEmgp77EhbRvo6KaL9YEZWdpH4Oimj/KC+ixnd/siIqGVPDZl+GaE5FMN/e0BqaDDVX6Q/Q/VORI/alWo3xN02gTaHtoB2gKdDqug3U/dN8zxB/nML1NiguMvMZLudgEs4hwoXczrtByI3B0CFxJb8YPVT3T3ecK8NI5mA4CecIh7kyDLkxHDrCypWRun+G41wZRTIHo0k4xzjMlVHIjdHQMVaujNX9Mx3nyjiSORhPwjnBYa6MQ26Mh06wcmWi7p/lOFcmkczBZAdz4L1xm4SYT44r+QXxbN3PcRz7XJLYT3EY+1zEfIoV+5DuT3Uc+2kksZ/uMPbTEPPpVuzzdP9sx7GfQRL7fIexn4GY51uxn6n7BY5jP4sk9rNJOOeQcM4l4ZxHwllIwllEwnkOCed8Es5zSTgXkHAuJOFcRMK5mIRzCQnnUhLOZSScy0k4V5BwriThXEXCuZqEc42D99CNMd5AvHduCZ0FnQ2dA50LHQodCR0LnQjNhoagedCZ0HnQQmgR9BzofOi50AXQhdBF0MXQJdCl0GXQ5dAV0JXQVdDV0DXQZN3W6v66uJLPyb395fr4mwHQtdAauq3X/Q2O9xs2kuTpJhLOzSScW0g4t5JwFpNwbiPhPI+EczsJ5w4SzvNJOHeScO4i4byAhHM3CeeFJJx7SDgvIuHcS8J5MQnnPhLO/SScl5BwHiDhPEjCeSkJ5yESzsMknJeRcF5OwnkFCecREs6jJJzHHHEGfJzB8I4/v7ddyvOVJJ4Dgp7/QeI5XtDzVSSeEwQ9X03iOVHQ8zUknpMEPV9L4rmfoOfrSDzbn32G6/l6Es+bBD3fQOJ5s6DnG0k8bxH0fBOJ562Cnm8m8Vws6PkWEs/bBD3fSuL5PEHPt5F43i7o+XYSzzsEPd9B4vl8Qc93knjeKej5LhLPuwQ9303i+QJBz/eQeN4t6PleEs8XCnq+j8TzHkHP95N4vkjQ8wMknvcKen6QxPPFgp4fIvG8T9DzwySe9wt6foTE8yWCnh8l8XxA0PNjJJ4/UHKeHyfxvF5wnp8g8XxQ0POTJJ4vFfT8FInnQ4KenybxfFjQ8zMkni8T9PwsiefLBT0/R+L5CkHPz5N4PiLo+QUSz0cFPb9I4vmYoOfjJJ7LKTnPL5F4Li/o+WUSzxUEPb9C4rmioOdXSTxXEvT8GonnEwQ9v07iubKg5zdIPFcR9Pwmieeqgp7fIvFcTdDz2ySeqwt6fofEcw1Bz++SeD5R0PN7DjxnQs11TOa6HnOdi7nuw1wHYa4LMOfJm/PGzXnU5rxic56tOe/UnIdpzks05+mZ89bMeVzmvCZzno8578WcB2LOizDnCZjPzc3nyOZzVfM5o/nczXwOZT6XMZ9TmH17s49t9nXNPqfZ9zP7YGZfyOyTmH0D8z7avK8077PM+w6zDjfrUrNOM+sW8zpuXtdMnTd1z9QB87wweWLi9m+LtYMP7GsBAA==", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "enqueueCallToChild", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "targetContract", @@ -66,12 +69,13 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "enqueueCallToChildTwice", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "targetContract", @@ -96,12 +100,13 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "enqueueCallToPubEntryPoint", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "targetContract", @@ -126,12 +131,13 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "entryPoint", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "targetContract", @@ -149,12 +155,13 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "pubEntryPoint", "functionType": "open", + "isInternal": false, "parameters": [ { "name": "targetContract", @@ -189,6 +196,7 @@ { "name": "pubEntryPointTwice", "functionType": "open", + "isInternal": false, "parameters": [ { "name": "targetContract", diff --git a/yarn-project/noir-contracts/src/artifacts/pending_commitments_contract.json b/yarn-project/noir-contracts/src/artifacts/pending_commitments_contract.json index f727411a569a..0e3a2f413e36 100644 --- a/yarn-project/noir-contracts/src/artifacts/pending_commitments_contract.json +++ b/yarn-project/noir-contracts/src/artifacts/pending_commitments_contract.json @@ -4,6 +4,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [], "returnTypes": [], "bytecode": "H4sIAAAAAAAA/9XbRW/jUBiF4TTTdpjLzAx2bCf2YKfDzExpps4w/f9Nc9REqrrtyeK9kmV7E50nSuwL3/1fKBSqhd3W0TiKjaOzed2679p339283tta9xvNcxSU4zivlPIwCreCUlZLkyBOauU0TMMkTbZLaRTlaZxWslpWCbIwjvKwnmRRPdhtPXs+Kzhga2fOXkjOPkjOfkjOAUjOQUjOIUjOYUjOEUjOUUjOMUjOcUjOCUjOSUjOKUjOaUjOGUjOWUjOOUjOeUjOBUjORUjOJUjOZUjOFUjOVUjONUjOdUjOAJIzhOQsQXJGkJwxJGcCyVmG5KxAcqZtylnclzM4WAs7jOYMYi4azRcg5kNG80WIudNovgQxdxnNlyHmbqP5CsTcYzRfhZh7jeYNiLnPaL4GMfcbzZsQ84DRfB1iHjSab0DMQ0bzTYh52Gi+BTGPGM23IeZRo/kOxDxmNN+FmMeN5nsQ84TRfB9injSaH0DMU0bzQ4h52mh+BDHPGM2PIeZZo/kJxDxnND+FmOeN5mcQ84LR/BxiXjSaX0DMS0bzS4h52Wh+BTGvGM2vIeZVo/kNxLxmNL+FmNeN5ncQc2A0v4eYQ6P5A8RcMpo/QsyR0fwJYo6N5s8Qc2I0VyHmstG8BTFXjOYaxJwazV8g5sNG8zbEfMRoziHmo0ZzHWI+ZjR/hZiPG83fIOYTRvN3iPmk0fwDYj5lNP+EmE8bzb8g5jNG82+I+azR/AdiPmc0/4WYzxvN/9pgTptn7WPSvh7tc9G+D+2D0L6AVp286qg3G4fqbFV3qjpM1SWqTk91a6rjUl2T6nxU96I6ENVFqE5A6+ZaR9a6qtYZte6mdSity2idQvP2msfWvK7mOTXvp3kwzQtpnqTaODSO1rhS4yyNO9QPV79U/TT1W/Qe13tNz3k99/Qc0P9CvxN9bzsboWaB1E4AAA==", @@ -12,6 +13,7 @@ { "name": "get_then_nullify_note", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "expected_value", @@ -35,6 +37,7 @@ { "name": "insert_note", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", @@ -58,6 +61,7 @@ { "name": "stev", "functionType": "unconstrained", + "isInternal": false, "parameters": [ { "name": "contract_address", @@ -107,6 +111,7 @@ { "name": "test_bad_get_then_insert_flat", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", @@ -130,6 +135,7 @@ { "name": "test_insert_then_get_then_nullify_all_in_nested_calls", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", @@ -161,12 +167,13 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "test_insert_then_get_then_nullify_flat", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", diff --git a/yarn-project/noir-contracts/src/artifacts/pokeable_token_contract.json b/yarn-project/noir-contracts/src/artifacts/pokeable_token_contract.json index d07cf6ab1077..2a4826c3dc2b 100644 --- a/yarn-project/noir-contracts/src/artifacts/pokeable_token_contract.json +++ b/yarn-project/noir-contracts/src/artifacts/pokeable_token_contract.json @@ -4,6 +4,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "initial_supply", @@ -41,6 +42,7 @@ { "name": "getBalance", "functionType": "unconstrained", + "isInternal": false, "parameters": [ { "name": "sender", @@ -61,6 +63,7 @@ { "name": "poke", "functionType": "secret", + "isInternal": false, "parameters": [], "returnTypes": [], "bytecode": "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", @@ -69,6 +72,7 @@ { "name": "stev", "functionType": "unconstrained", + "isInternal": false, "parameters": [ { "name": "contract_address", diff --git a/yarn-project/noir-contracts/src/artifacts/public_token_contract.json b/yarn-project/noir-contracts/src/artifacts/public_token_contract.json index 1b577f34911f..9a40319f3240 100644 --- a/yarn-project/noir-contracts/src/artifacts/public_token_contract.json +++ b/yarn-project/noir-contracts/src/artifacts/public_token_contract.json @@ -4,6 +4,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [], "returnTypes": [], "bytecode": "H4sIAAAAAAAA/9XbRW/jUBiF4TTTdpjLzAx2bCf2YKfDzExpps4w/f9Nc9REqrrtyeK9kmV7E50nSuwL3/1fKBSqhd3W0TiKjaOzed2679p339283tta9xvNcxSU4zivlPIwCreCUlZLkyBOauU0TMMkTbZLaRTlaZxWslpWCbIwjvKwnmRRPdhtPXs+Kzhga2fOXkjOPkjOfkjOAUjOQUjOIUjOYUjOEUjOUUjOMUjOcUjOCUjOSUjOKUjOaUjOGUjOWUjOOUjOeUjOBUjORUjOJUjOZUjOFUjOVUjONUjOdUjOAJIzhOQsQXJGkJwxJGcCyVmG5KxAcqZtylnclzM4WAs7jOYMYi4azRcg5kNG80WIudNovgQxdxnNlyHmbqP5CsTcYzRfhZh7jeYNiLnPaL4GMfcbzZsQ84DRfB1iHjSab0DMQ0bzTYh52Gi+BTGPGM23IeZRo/kOxDxmNN+FmMeN5nsQ84TRfB9injSaH0DMU0bzQ4h52mh+BDHPGM2PIeZZo/kJxDxnND+FmOeN5mcQ84LR/BxiXjSaX0DMS0bzS4h52Wh+BTGvGM2vIeZVo/kNxLxmNL+FmNeN5ncQc2A0v4eYQ6P5A8RcMpo/QsyR0fwJYo6N5s8Qc2I0VyHmstG8BTFXjOYaxJwazV8g5sNG8zbEfMRoziHmo0ZzHWI+ZjR/hZiPG83fIOYTRvN3iPmk0fwDYj5lNP+EmE8bzb8g5jNG82+I+azR/AdiPmc0/4WYzxvN/9pgTptn7WPSvh7tc9G+D+2D0L6AVp286qg3G4fqbFV3qjpM1SWqTk91a6rjUl2T6nxU96I6ENVFqE5A6+ZaR9a6qtYZte6mdSity2idQvP2msfWvK7mOTXvp3kwzQtpnqTaODSO1rhS4yyNO9QPV79U/TT1W/Qe13tNz3k99/Qc0P9CvxN9bzsboWaB1E4AAA==", @@ -12,6 +13,7 @@ { "name": "mint", "functionType": "open", + "isInternal": false, "parameters": [ { "name": "amount", @@ -39,6 +41,7 @@ { "name": "transfer", "functionType": "open", + "isInternal": false, "parameters": [ { "name": "amount", diff --git a/yarn-project/noir-contracts/src/artifacts/schnorr_multi_key_account_contract.json b/yarn-project/noir-contracts/src/artifacts/schnorr_multi_key_account_contract.json index 3b1d9b3684b1..2e6539eeb30e 100644 --- a/yarn-project/noir-contracts/src/artifacts/schnorr_multi_key_account_contract.json +++ b/yarn-project/noir-contracts/src/artifacts/schnorr_multi_key_account_contract.json @@ -4,6 +4,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "signing_pub_key_x", @@ -27,6 +28,7 @@ { "name": "entrypoint", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "payload", @@ -88,12 +90,13 @@ } ], "returnTypes": [], - "bytecode": "H4sIAAAAAAAA/+1dBXgUyRKe3XgWAiEhkGDBHXaSQIIvrof7wd0hgeOEc3d/x+k7d5d37u7u7sa5+3Eu3OsO1VBphpBkq0PVtzvfV19N9e52//V3d3XPbO1s43TPuyTVqzpCSsJKUuHc2GmWnQ7nmUryoEwf+UqaQ3k+Ki9Q0gLKm6PylkoKUb2t4D3Gbm3ZbSy7rWW3s+xiy25v2R0su6Nld7LszpbdxbK7WnY3y+5u2T0su6dl97Ls3pbdx7L7WnbUsn3LLrHsUssus+x+lt3fssstu8KyB1j2QMseZNmDLXuIZQ+17GGWHbPs4ZY9wrJHWvYoyx5t2WMse6xlj7Ps8ZY9wbInWvYky97Ksidb9hTLnmrZ0yx7umXPsOyZlj3Lsmdb9hzLnmvZ8yx7PthaWkB/6UPHAT339XzXc1zP62Jv3fzt4K2bp3pu6vmo56Ced928dfNLzyk9j/Tc0fNFzxE9L/Rc0ONfj3k9zvXY1uNZj2E9bvVY1eNTj0k9DvXY0+NNj7FhgE2PHz1m9DjRY0OPBz0GxkJfj4c+nQh9txX00RToi2nA+QzgdhZwOAe4mgecaH7SwWd96Fi61lsXO7UuAN0CdEvQhaCLQLcC3Rp0G9BtQbcDXQy6PegOoDuC7gS6M+guoLuC7ga6O+geoHuC7gW6N+g+oPuCjoL2QZeALkWf31rJggBuyuA9/UD3B10OugL0ANADQQ8CPRj0ENBDQQ8DHQM9HPQI0CNBjwI9GvQY0GNBjwM9HvQE0BNBTwK9FejJoKeAngp6GujpoGcgbhYq2carfoRAx0CXRvuXlVWWl1T6pf6iaMmAxRX9omX9Fvev8Cv8fhX9lpZUlJZWVpRVlA9YPKA8OsAvK630l/UbULosuu7YFtUVjfNwiXM7ITgXCcG5WAjOJUJwLhWCs1IIzmVCcC4XgnN7IThXCMG5gxCcOwrBuZMQnDsLwblSCM5dhODcVQjO3YTg3F0Izj2E4NxTCM69hODcWwjOfQhx2vdg9L0sfS9iFujZoOeAngt6Huj5oLcFvR3oRaAXg14CeinoStDLQC8HvT3oFaB3AL0j6J1A7wx6JehdQO8KejfQu4PeA/SeoPcCvTfofbwN92D2VbKfV/2g7sP9PRlj7QAhOA8UgvMgITgPFoLzECE4DxWC8zAhOA8XgvMIITiPFILzKCE4j/bo92hNoT79/ZneqywEvS/o/UEfAPpA0AeBPhj0IaAPBX0Y6MNBHwH6SNBHgT7a27BHOkbJfwBXlrfpI0bDge+u7tJKh3Uvc1d3WdRh3Q75LitxWHepw7rLHNbdLx3VeSzoVaCPA3086BNAn4g+szpzndZzMRvKoKiqzMzRDFRmXk9HZeb1NFRmXk9FZeb1FFRmXg+jMvN6CJWZ1z2rfX3EQEfjPNK9jWN6NM5D+5yH/PAC/A0F8BIO4M+8nhbAH+4P87rplxwlkYC201F5jMZfP+RVP2LoPGJp7DMHLKmMsKQxwpLOCEsGIyyZjLBkMcKSzQhLaAtjwfHdHHpufxra8HoulOM1oRmc4zXBrCN4TchHdZqy5shnU1YA53gtNxhzUVkjOG+GyhrDOV7HcuA8H5U1gfPmqMxcfxQEYMF9Yz4TAx2N76jqG9xODNmmrWyEoYABlmxGWLIYYclkhCWDEZZ0RljSGGFJZYQlhRGWcACWfFosUbz+eAgTPmLoPB9hySPGouts5sC/vDr41wz5l+vAP+I6fV1nCwc4C2nr7K/7oaVX+34oRP1QROyfrqMVasvgMu1E0OsRhKMVcd+FUJumXmNjfLXF2kgQ1saCsOYIwtpEENamWxgrfbt+eZbVrj5qinMYS2tSLOvieBviOnUdbRF+46vBHkGvt0G+taXFUdW/rb3qnBq7LWo36T9pu0n/vaT/Sf+T/if9T/qf9D/pf9L/pP9J/5P+J/1P+p/0P+l/0v+k/0n/k/5z8H9TObTE99lrzCtrHYAlhRGWVEZY0hhhSWeEJYMRlkxGWLIYYclmhCXCCEsjRlgaM8KSwwhLE0ZYmjLCkssISzNGWPIYYclnhKU5IywFjLC0YISlJSMshYywFDHC4jAnqs5Y2jDCEtrCWIJ+G5WFXg+jMnMNjn8P1Q7O8e+hiuEc/x6qPfLTlHWAc/x7qI5wjn8D3QmdG90ZzrNRWRc4x7996grn+HdT3eAc/+aqO5y3QGU94LwlKusJ50WozHCEOTUctUVlhqN2qMxwVIzKDEftUZnhqAMqMxx1RGWGI8yZ4agzKjNjsAsqM/v6rqjM7K+7oTKzz+2Oysx+swcqM/s+w5n2NSO84XXzXjzGegbUY87xXDFtx0BH4zuq5gpuJ4Zs0xb+rVoPBljaMMLSihGWIkZYChlhackISwtGWAoYYWnOCEs+Iyx5jLA0Y4QllxGWpoywNGGEJYcRlsaMsDRihCXCCEs2IyxZjLBkMsKSwQhLOiMsaYywpDLCksIISzgAi4ucEnPPQB/mur4NwmEwdUM4uhJzouvoEoCjK8Jh2u+CcHSmxVH17MROATjwfSzTfieEoyMtjqrnLHYIwNER4TDtd0A42tPiqHomY3EAjvYIh2m/GOFoR4tD/2Vhtdwng6MdwmHax/fyzDm+B2bu/+F7Zb3gHN9n6w3n+B5dHzjH9/f6Wv7je40Yi4kt+P6jiX29UJmJzb1RmVk7+qAys7aZ9rW9qXvWBk8MdDS+o8Z71vg+of0+7dvwjA2vZwZ8xuxl8P1rs9fC968jqE5ThnMeTJnZS+P716Y9fP8at2e0aS8blZn28HPLTHuNUJlpr3EAFtw35jMx0NH4jqq+we3EkN0I+RMKwGdex/1h/NxcfxjecH8EPQPVXGcF9Qfmz7SHea6pP3C/mfZw/+JnfJr29fuIn3tTotsy1/vmqGm+4OfHmfsnOP+B+LlDVeMjz8JibNNWBGFo4g5L/8gm2jZHGLVN/MyjGmNYXgCWFEZYUhlhSWOEJZ0RlgxGWDIZYclihCWbEZYIIyyNGGFpzAhLDiMsTRhhacoISy4jLM0YYQltYSxB14N4z4uvOey9oC4z37niawTznTC+hjHfWeegMvOdelNUFg7AZ/Z4+FnNZq+F85XsZ7jiaw6cm2T2AKZ9/bntMjbGGg7A2iLAJ9yHpu0Y6Gh8R1Uf4nZiyDZt4evGFgywNGOEJZcRlqaMsDRhhCWHEZbGjLA0YoQlwghLNiMsWYywZDLCksEISzojLGmMsKQywpLCCEs4AAvxM++rvuM1+1l9mP0lft69weTyGfMhC0cxahf/ro34+edV3y0XBfhfiPw37Rc57IcsVL+pW8+Ls8LufHfw/IeqfsTPfzgE+YWff+Gi3TZWu4VWu/o9+DdMhyCs5rMp6D2XhTf0w0Vwno3qw789aWe1ha8hzWvmO6ViB76bNjyovwidG9+Lke/F6DP5yHfznquQ70MyNnyuAy32qhyC9lBXGOHGeQudaNusyuMwuRIeqr89KuuCzk1MwPkVna33uYpNGIdpH/8+sRttm6V63Hb1qh813b/BeT/dabFEXa13PRB+46vBHkGv498N96DFUbUH6O5V59TYOKcr6T9pu6L839R33S5yDj0LixfAizlSGGFJZYQljRGWdEZYMhhhyWSEJYsRlmxGWCKMsDRihKUxIyw5jLA0YYSlKSMsuYywNGOEJY8RlnxGWJozwlLACEsLRlhaMsJSyAhLESMsrRhhac0ISxtGWNoywtKOEZZiRljaM8LSgRGWjoywdGKEpTMjLF0YYenKCIvD7wvqjCW0hbFkecE5r+Z1/Mw6c08YP9etJ5zj36WGA9qwf7eO81bxc912z9i4vXBAez0CcLnmsja/iQ9Z+LYklm6MsHRlhKULIyydGWHpxAhLR0ZYOjDC0p4RlmJGWNoxwtKWERZOz/ZszQhL8jmjwViSzxkNxpJ8zmgwluRzRoOxJJ8zGowl+ZzRYCzJ54wGY0k+ZzQYS/I5o8FYshhhST5nNBhLOiMsyeeMBmPh/JzRZE7y5rEkc5KDsSRzkoOxJHOSg7FkM8KSzEkOxpLMSQ7GksxJDsaSzEkOxpLMSQ7GksxJDsaSzEkOxpLMSQ7GksxJDsaSzEkOxpLMSQ7G0p4Rlg6MsCRzkoOxJHOSg7Ekc5KDsbi+51sXLD0ZYQltYSxZXs252j1RWdj6rL4Hew3KrfahPIw+UwLn+H9USuEc/49KGarTlPWD83RU1h/OMwKw+qjM/LdQCSoz/y1UisrMfwuVoTLz30L9UFkUzvsHYMF9aD4TAx2N76jqQ9xODNmmrWyEoT8DLD0ZYenBCEs3Rli6MsLShRGWzoywdGKEpSMjLB0YYWnPCEsxIyztGGFpywhLG0ZYWjPC0ooRliJGWAoZYWnJCEsLRlgKGGFpzghLPiMseYywNGOEJZcRlqaMsDRhhCWHEZbGjLA0YoQlwghLNiMsWYywZDLCksEISzojLGmMsKQywpLCCEs4AEsZLZYSfP/fQ5jwEUPn+P59qYVZ4ytxwFWphcXYpq0IwtDdIZZIQNsO2inJsnzWR019gr97Md/NlCJ85cQ8hFA7pl5jm7YwV70cYokEtO2gnZIsy2d91NQnpn39uQo49xG+AcQ8hFA7pl5jm7YwV70dYokEtO2gnZIsy2d91NQnpn39uYFwXoHwDSLmIYTaMfUa27SFuerjEEskoG0H7ZRkWT7ro6Y+Me3rzw2G84EI3xBiHkKoHVOvsU1bmKu+DrFEAtp20E5JluWzPmrqE9O+/txQOB+M8A0j5iGE2jH1Gtu0hbmKOsQSCWg7G5XlojLzOt6zGRylqGw4nPuobAScV6CykXA+EJWNgvPBiAdzhBEPo4l5qGl8jA7AksIISyojLGmMsKQzwpLBCEsmIyxZjLBkM8ISYYSlESMsjRlhyWGEpQkjLE0ZYcllhKUZIyx5jLDkM8LSnBGWAkZYWjDC0pIRlkJGWIoYYWnFCEtrRljaMMLSlhGWdoywFDPC0p4Rlg6MsHRkhKUTIyydGWHpwghLV0ZYujHC0p0Rlh6MsPRkhKUXIyy9GWHpwwhLX0ZYooyw+IywlDDCUsoISxkjLP0YYenPCEs5IywVjLAMYIRlICMsgxhhGcwIyxBGWIYywjKMEZYYIyzDGWEZwQjLSEZYRjHCEtrCWDb13B3z+jBUNsaqR5eNhfPhqGwcnI9AZePhfCQqmwDno1DZRDjPQ2WT4LwzKtsKzsOoLBzgm8m7GoPKTP7TWFSWBufjUJnJBxqPykxezgRUZvJjJqIyk6cyCZWZfBGDXbf5J3pu0dgAnwxu/Nwi4x9+btFkVKcpmwLn6ahsKpzj5xYZPJgPgxvzZvzD/BoeJqMyw9cUVGZ4nRqABc8B85kY6Gh8R9UcwO3EkG3aws8tmsoAyyhGWEYywjKCEZbhjLDEGGEZxgjLUEZYhjDCMpgRlkGMsAxkhGUAIywVjLCUM8LSnxGWfoywlDHCUsoISwkjLD4jLFFGWPoywtKHEZbejLD0YoSlJyMsPRhh6c4ISzdGWLoywtKFEZbOjLB0YoSlIyMsHRhhac8ISzEjLO0YYWnLCEsbRlhaM8LSihGWIkZYChlhackISwtGWAoYYWnOCEs+Iyx5jLA0Y4QllxGWpoywNGGEJYcRlsaMsDRihCXCCEs2IyxZjLBkMsKSwQhLOiMsaYywpDLCksIISzgAy2RaLP1xm7o9c002GbU5hrhNnNPmIR7wEUPnYxCWabRYorrd6aj+GGoDtzuDtl0ftxsCMW2Y8hR0/ooJHuh9+jA5LwazHjdjA96Hz0dbn4mg18c69nkawhFDtmlLx4Inka9jA3BPQbjN61sh3IXEuHUdYxAO0z5+tgfxuOyP80PNUdMcmYawEPdb1RyZieqPoTZwu7OIecftmjli2jDlKej8MzRuZm04XT9uDGY9R6YHvA+f23Mogl6f7thnPFdjyDZt6TnyDvJ1egDuMQi3eX0Swu1ijuC5bdrHc4R4XFbNEey7PmqaIzMQFuJ+q5ojs1H9MdQGbncOMe+4XTNHTBumPAWd/4HGzZwNp+vHjcGs58jMgPfhc3sORdDrMx37jOdqDNmmLT1HvkO+zgzAjdc/8/pEhNvFHMFz27SP5wjxuKyaI9h3fdQ0R2YhLMT9VjVH5qL6Y6gN3O48Yt5xu2aOmDZMeQo6b2QuGtH79GHGjcGs58jsgPfhc3sORdDrsx37jOdqDNmmLT1HQsjX2QG48fpnXp+AcLuYI3hum/bxHCEel1VzBPuuj5rmyByEhbjfqubIfFR/DLWB292amHfcrpkjpg1TnoLO26Fxs/WG0/XjxmDWc2RuwPvwuT2HIuj1uY59xnM1hmzTlp4j+cjXuQG48fpnXh+PcLuYI3hum/bxHCEel1VzBPuuj5rmyDyEhbjfqubIAlR/DLWB211IzDtu18wR04YpT0HnJWjcLNxwun7cGMx6jswPeB8+t+dQBL0+37HPeK7GkG3a0nOkK/J1fgBuvP6Z18ch3C7mCJ7bpn3TThbCgZ8B7DKumnqNjfsy1+LLAZb+kYC2dd8NyXDbD9j/ooB+MGXzEaazwhu4MUcIcRMmxllTLAsjrPb79H30pZkbXk8L+Iy5DMG/6c1AvpqyMKrTlOH/kTBl5jMZAfVhjtItX6LxHVUc4XZiXvX/LdAH/m1thjssUSl14t+L4z7MCijLDigz4x+PJ/N9LB5P5vvioPGUicrwZ4w2n8lGZWYMRlCZwdUIlZk+Nu1nwPtM/THQ0fiOEsyjOWqas9i/bIuHdOQXEb6quZFtYcm2OIwgDBnOsPjlkYC2sxuEB79c19mYuE485s1RU983Rn4aX5dX7jl5lz0r9wihz5s6W1h9oo8wel+Kt3Hbqd7GRxo6R7ee1nOMx4hpU/tm8k7wvDLt5yBsDuJTCZ7r2D98xAL8wnM/Db2WSYuv2ppj6jW2aSuCMKS4w1IaCWjbQTvRrIB29Hg7GO3Tsol9o5+3667T8P7tEG/j9cJVu42sdrOtdvV78Bp8CMKK11fznlUZG/rhaDjHeVp4z5ZjtbWp+YxzzvAcbILO7X2iPnLRedj6DM7vw9c1JhcyBjoa31GaZeHQR01xA/+3ST4tlqr+xv/LEUNt4HYLaNv1cbvmfoBpw5SnoPPzUSAr2HC6fgwYzDiPFr8Pn+dan4mg1/Mc+5yPcMSQbdrSY/UU5GteAO4MhNu83hThziPGretohnBkWNiykB94PWvegPw1R5ykWXw5wFK1ntltu+I+fzPcmzLzPnu9S6XFFPW86jE3jNrVB84Fw+OB+poa84Fx4OvpNIs3B3uOEtMPNo5MhAPfb9DHpv57k/jaz6/Ndd6m/ntzS2NJZYQljRGWdEZYMhhhyWSEJbSFsdTmfqvZq+P7Y2bfje91mT0Wvj9m2sHX3fZ1Ar4HlxNQH+aI+DqmiiPcTszb+NoC32/NYYAlkxGWDEZY0hlhSWOEJZURlhRGWOz7BZuKayZ24fsP5l4A3q81RedG4/9uN2XmGgnf9w9b+PD3CDh2mr5sgsoMLty+mQu5qMxgbYawb2p/6eLePT5i6Dxiac+rvr/c0lhSGWFJY4QlnREWd9/11B2L6+/A6oIlixGWbEZYQlsYS9C+O97vou373Hidwt8pmXUCr11mncDfYzdD50ab+0l4PQsH+FbT2oXXOHufhNcuvMYZrHiNM1jxGmewYuwGq8Gu21yJrm8Mns1xbvzDnNv3M3UZvs9nysx9W8y5wYP5MLgxb8Y/zK/hIR+VGb6aozLDa0EAFjwHXNyDxe3EvI3v2+PrqgIGWLIZYclihCWTEZYMRljSGWFJY4QllRGWFEZYwhYWvFYEfUeG1zAT+/FaZ9YIvCaatQSvnSYPBq+xYQsfXrPxmmL6Eq89ZqzhNcrMBbyWmbmKc38c5JVGpdSJuQsHcBcO4A6XmfO65q4a3hvR+lOCx6U5atr74vFixkkE4c+hxVc1LxtbWIydg9q399wusEQC2nbQTkmW5bM+auoTHBNMzMB5Q02JeQh51XNvYsg2bWGuUhxiiQS07aCdkizLZ33U1Cc4npt4j6/jiPOMqvok18JibHyv0mBIdYglEtC2g3ZKsrz65Vbh6zacN0Kcb1XVJ3kWFmPjfCSDIc0hlkhA2w7aKcmyfNZHTX2C9yn2Psp1Lpqp19imrYiFwRWWSEDbDtopybJ81kdNfYL3tmbfh++HtCTmIYTaMfUa27SFucpwiCUS0DZ+viveQ7e0ylz8LiyE2jH1GrsQtW8wtHCIJRLQNn4OL75uKLTKNJ4iB9yYdky9xi5C3BgMLR1iiQS0jZ+XjK/liqwyjaeVA25MO6ZeY7dC3BgMhQ6xRALaxjzkMuDBvne+JXjIY8ADvoexpXhozoAHfM+nIXnAz3vHv0kzr+PcB/O8fPybBvM8f5yzYP5vAH/vY/4PAd87KobzIlTW3sKnyzrAeWtUZv6Pow0qM/8X0haVmf8zaYfKzDV7MSoz14ztUZm5ZumAysyeuSMqM3u2TqjM7BlM+9q290BkHZseVDkqo2rnWLq6ohjvSejckB5GZfiCntonz2rH5jHHc9hxrjrpJAf1nozqKo32LyurLC+p9Ev9RdGSAYsr+kXL+i3uX+FX+P0q+i0tqSgtrawoqygfsHhAeXSAX1Za6S/rN6B0GVTmyu+T6fso2lCTa5XnZnL9F50nJ1ecda4CQqnrPcXjPbm036fQ99H6gXoyYD4F9Kle9QGJD2rfjvPcTLzT0Hly4sVZ53FAKHW9p3u8J572+3T6Plo/UE8FzKeDPsNruIl3hudm4p2JzpMTL846zwBCqes9y+M98bTfZ9H3UdSzBohHyEOY0P/jCXGdTchfQwUnSswY7znoPBmc4qzzbCCUut5zPd7BSft9Ln0fOcF6FmC1642X1zNSZARlyoXuPMJ+oeSvoYIyof/VgvL56DwZlOOs8zwglLreCzzeQVn7fQF9H1ULTtw5NUeYGOeJhDgvJKyroQLfhZ6bwHcROk8GvjjrvBAIpa73Yo934NN+X0zfR852oxd79LvRsxJwN3oJZb8I3I0S+l8tKF+KzpNBOc46LwFCqeu9zOMdlLXfl9H3kdPdKCWnGlu6t2Gy6PSAtUpWgT4OtD4uV3IF+IN/xHUivOdy9N4rlfwv4L0nwHuuBK3bvUrJ1fCesEPe8unqihZDPdcouVbJdUquV3KDkhuV3KTkZiW3KLlVyW1Kbldyh5I7ldyl5G4l9yi5V8l9Su5X8oCSB5U8pORhJY8oeVTJY0oeV/KEkieVPKXkaSApBLxpLJneBvtay77Osq+37Bss+0bLvsmyb7bsWyz7Vsu+zbJvt+w7LPtOy77Lsu+27Hss+17Lvs+y77fsByz7Qct+yLIftuxHLPtRy37Msh+37Ccs+0nLfsqyn/Y2/lOBgI1QaRzxwX8K1VWyLK5Y4z/t0cWtcxp2I+nX1+cn7LqW1p+/Jwn5O7fhN+LR+vj8WFBd0frx9zghf+dtmQuZirr6/Mgm6hqwrO78PUrI3/lb7EKwbFldfH6oprrK68bfw4T8XbBlL6T71dbnBzZXV1nt+XuQkL8Lt/yNiGhtfL6vNnVFa8ff/YT8XcTjRs6Szfl8T23rKt88f/cS8ncxnxthJTX5fFdd6iqvmb+7Cfm7hNeNxPJN+XxHXesq3zR/dxLydym/G7EVQT7fVp+6KoL5u52Qv8t43siO2j7fUs+6+i/bmL9bCfm7nO8XAVHs803x1FVSnb+bCfm7gvcXKSXG5xviratsA383EvJ3JfMvoiqXLdNQ/etI6lrH3/WE/P2vgfiLxnf4hP3sY5/j5e8qIfwRxmn/CkL+rhbCH+E+y7+MkL9rhPBHeJ3kX0LI37VC+CO8z+FfRMjfdUL4I7xP6V9AyN/1Qvgj/J7BP4+QvxsE7P/UDtC/lrAvziHk70Yh44+wn/0bCfm7SQh/hHHav56Qv5uF8Ee4z/KvJeTvFiH8EV4n+VcT8nerEP4I+9m/lZC/24TwRxin/ZsJ+btdCH845y7ua1ZCXHcI4Y9wnvi3E44/Sv50LlsYcUid99mcrq71eZ/PKHlWyXNKnlfygpIXlbyk5GUlryh5VclrSl5X8oaSN5W8peRtJe8oeVfJe0pWK3lfyQdKPlTykZKPlXyi5FMlnyn5XMkXSr5U8hWQZPIANRacF/isZT9n2c9b9guW/aJlv2TZL1v2K5b9qmW/ZtmvW/Yblv2mZb9l2W9b9juW/a5lv2fZqy37fcv+wLI/tOyPLPtjy/7Esj+17M8s+3PL/sKyv7Tsrzz3eZ9forrizfv8yqOLO68Lyfv83K4rjrzPLwj5e0NI3uenQXXVM+/zM0L+3hSS9/nxJuqqT97nJ4T8vSUk7/PDmuqqY97nR4T8vS0k7/P9zdVVh7zPDwj5e0dI3ud7tamrlnmfqwn5e1dI3uc7ta2rFnmf7xLy956QvM+36lLXZvI+3ybkb7WQvM836lpXDXmfbxLy976QvM/X6lPXJvI+Xyfk7wMheZ+v1LOuoLzPVwn5+1BI3udL8dRl5X2+TMjfR0LyPl+Ity6U9/kiIX8fC8n7fI6krnX8PU/I3ydC7psT9rP/CeF980+F8EcYp/2PCPn7TAh/hPss/wNC/j4Xwh/hdZK/mpC/L4TwR3ifw3+XkL8vhfBHeJ/Sf5uQv6+E8Ef4PYP/JiF/XwvJ+3yWsC9eJ+TvGyHjj7Cf/W8I+ftWCH+Ecdr/ipC/74TwR7jP8r8g5O97IfwRXif5nxHy94MQ/gj72f+BkL8fhfBHGKf97wj5+0kIfzjnLl6fnyHEtUYIf4TzxP+JcPxR8qdz2cKIQ+q8zwK6utbnfX6t5Bsl3yr5Tsn3Sn5Q8qOSn5SsUfKzkl+U/KrkNyW/K/lDyZ9K/lLyt5J/vHXPP/0XHA8pCStJUZKqJE1JupIMJZlKspRkh7xqeZ8aC84L/Mayv7Xs7yz7e8v+wbJ/tOyfLHuNZf9s2b9Y9q+W/Ztl/27Zf1j2n5b9l2X/bdn/WPZay/7XsvUJtkOWHbbsFMtOtew0y0637AzLzrTsLMvODrnP+9RtmrrizfvMDtHFnWapDXrdXu+8zwzb5zjyPjMJ+ctrWP7qnfeZFuRzPfM+0wn5y294/uqV95myCZ/rk/eZSshf8y3DX53zPkM1+VzHvM8wIX8FW4y/uuV9/ru5uuqQ9+kR8tdiy/JX67zPf2pTVy3zPtd6dPy13PL81Srv86/a1lWLvM+/Cfkr5MHfZvM+/6hLXZvJ+/yTkL8iPvzVmPf5W13rqiHv83dC/lrx4m+TeZ+/1KeuTeR9/krIX2t+/AXmfa6pZ11BeZ8/E/LXhid/G+V9/hhPXVbe50+E/LXly1+1vM/v460L5X3+QMhfO978rc/7/JakrnX8fUfIX3ED8ReN7/AJ+9nHPsfLX3sh/BHGab8tIX8dhPBHuM/yWxPy11EIf4TXSX4RIX+dhPBHeJ/Db0nIX2ch/BHep/QLCPnrIoQ/wu8Z/HxC/roK2P/pvM9vCPuiGSF/3YSMP8J+9rsR8tddCH+EcdrvQshfDyH8Ee6z/E6E/PUUwh/hdZLfgZC/XkL4I+xnvxchf72F8EcYp/0ehPz1EcIfzrmL+7c6hLj6CuGPcJ74fQjHHyV/OpctjDikzvtsQVfX+rzPiALZSEljJTlKmihpqiRXSTMleUrylTRXUqCkhZKWSgqVFClppaS1kjZK2ippp6RYSXslHZR0VNJJSWclXZR0VdJNSXclPay8z4iVF9jIshtbdo5lN7Hsppada9nNLDvPsvMtu7llF1h2C8tuadmFll1k2a0su7Vlt7HstpbdzrKLLbu9ZXew7I6W3cmyO1t2F8vuatndLLu7ZfcIuc/77E6Y99mDMG9nspC8z66EeZ/dCPmbIiTvszNh3mcXQv6mCsn77EiY99mJkL9pQvI+2xPmfXYg5G+6kLzPdpvzuQ55n8WE/M0QkvfZpjY+1zLvsy0hfzOF5H22qq3Ptcj7bE3I3ywheZ+FdfF5M3mfRYT8zRaS99mirj7XkPfZkpC/OULyPpvXx+dN5H0WEPI3V0jeZ149fQ7K+8wn5G+ekLzP3Hh8tvI+mxHyN19I3meTeH1GeZ9NCfnbWkjeZ+MQRV3r+Msh5G+BkPvmhP3sLyC8b75QCH+EcdqfT8jfNkL4I9xn+XMJ+dtWCH+E10n+bEL+thPCH+F9Dn8mIX+LhPBHeJ/Sn07I32Ih/BF+z+BPJeRviZC8z0YhOv4mE/K3VMj4I+xnfykhf5VC+COM0/5iQv6WCeGPcJ/lb0fI33Ih/BFeJ/nbEPK3vRD+CPvZ356QvxVC+COM0/4yQv52kPK7M4/O5wjhXmhHIfwRzhN/B8LxR8mfzmULIw5DxBy2pKtrfd5nTwWyl5LeSvoo6askqsRXUqKkVEmZkn5K+ispV1KhZICSgUoGKRmsZIiSoUqG6bGtZLiSEUpGKhmlZLSSMUrGKhmnZLySCSGvWt5nTysvsJdl97bsPpbd17Kjlu1bdolll1p2mWX3s+z+ll1u2RWWPcCyB1r2IMsebNlDLHuoZQ+z7JhlD7fsEZY90rJHWfZoyx5j2WMte5xlj7fsCSH3eZ/jUayNN+9zAuH3DquE5H2OtX2OI+9zHCF/xwnJ+xwd5HM98z7HEPJ3vJC8z5Gb8Lk+eZ+jCPk7QUje5/CafK5j3ucIQv5OFJL3OWxzPtch7zNGyN9JQvI+h9TG51rmfQ4l5O9kIXmfg2rrcy3yPgcT8vdfIXmfA+ri82byPgcS8neKkLzP8rr6XEPeZwUhf6cKyfvsVx+fN5H32Z+Qv9OE5H2W1tPnoLzPMkL+TheS9+nH47OV91lCyN8ZQvI++8brM8r7jBLyd6aQvM/eIYq61vHXh5C/s4TcNyfsZ/8swvvmZwvhjzBO+2cQ8neOEP4I91n+aYT8nSuEP8LrJP8UQv7OE8If4X0O/2RC/s4Xwh/hfUr/REL+LhDCH+H3DP7xhPxdKCTvs1eIjr9VhPxdJGT8EfazfxEhfxcL4Y8wTvsXEPJ3iRD+CPdZ/nmE/F0qhD/C6yT/HEL+LhPCH2E/+5cR8ne5EP4I47R/CSF/VwjhD+fcxf2MYsK90JVC+COcJ/4VhOOPkj+dyxZGHIaIOSykq2t93udEBXKSkq2UTFYyRclUJdOUTFcyQ8lMJbOUzFYyR8lcJfOUzFeytZIFShYq2UbJtkq2U7JIyWIlS5QsVVKpZJmS5Uq2V7JCyQ4hr1re50QrL3CSZW9l2ZMte4plT7XsaZY93bJnWPZMy55l2bMte45lz7XseZY937K3tuwFlr3Qsrex7G0tezvLXmTZiy17iWUvtexKy15m2cste3vLXmHZO4Tc532uQLE23rzPHQi/d3hcSN7nctvnOPI+tyfk7wkheZ+VQT7XM+9zGSF/TwrJ+1yyCZ/rk/e5lJC/p4TkfS6qyec65n0uJuTvaSF5n9tuzuc65H1uR8jfM0LyPhfWxuda5n1uQ8jfs0LyPreurc+1yPtcQMjfc0LyPufVxefN5H3OJ+TveSF5n3Pq6nMNeZ9zCfl7QUje56z6+LyJvM/ZhPy9KCTvc0Y9fQ7K+5xJyN9LQvI+p8Xjs5X3OZ2Qv5eF5H1OiddnlPc5lZC/V4TkfW4VoqhrHX+TCfl7Vch9c8J+9l8lvG/+mhD+COO0/zIhf68L4Y9wn+W/SMjfG0L4I7xO8p8n5O9NIfwR3ufwnyXk7y0h/BHep/SfJuTvbSH8EX7P4D9JyN87QvI+J4Xo+HuckL93hYw/wn723yXk7z0h/BHGaf9tQv5WC+GPcJ/lv0nI3/tC+CO8TvJfJ+TvAyH8Efaz/wEhfx8K4Y8wTvurCfn7SAh/OOcuXp8nEu6FPhbCH+E88T8iHH+U/OlctjDiMETMYRFdXevzPndUIHdSsrOSlUp2UbKrkt2U7K5kDyV7KtlLyd5K9lGyr5L9lOyv5AAlByo5SMnBSg5RcqiSw5QcruQIJUcqOUrJ0UqOUfIfJccqWRXyquV97mjlBe5k2Ttb9krL3sWyd7Xs3Sx7d8vew7L3tOy9LHtvy97Hsve17P0se3/LPsCyD7Tsgyz7YMs+xLIPtezDLPtwyz7Cso+07KMs+2jLPsay/2PZx1r2qpD7vM9jUayNN+9zFeH3DuG0Br1ur3fe5zG2z3Hkff6HkL+UhuWv3nmfRwX5XM+8z6MJ+UtteP7qlfd5xCZ8rk/e55GE/KVtGf7qnPd5WE0+1zHv83BC/tK3GH91y/s8ZHM+1yHv81BC/jK2LH+1zvs8qDY+1zLv82BC/jK3PH+1yvs8oLY+1yLv80BC/rJ48LfZvM/96uLzZvI+9yfkL5sPfzXmfe5TV59ryPvcl5C/CC/+Npn3uVd9fN5E3ufehPw14sdfYN7nHvX0OSjvc09C/hrz5G+jvM/d4vHZyvvcnZC/HL78Vcv73CVen1He566E/DXhzd/6vM+dQxR1reNvJSF/TRuIv2h8h0/Yzz72OV7+coXwRxin/RxC/poJ4Y9wn+U3IuQvTwh/hNdJfjYhf/lC+CO8z+FnEvLXXAh/hPcp/XRC/gqE8Ef4PYOfSshfCwH7P533uVOIjr8wIX8thYw/wn72WxLyVyiEP8I47RcQ8lckhD/CfZafT8hfKyH8EV4n+c0I+WsthD/CfvZbE/LXRgh/hHHaLyLkr60Q/nDOXbw+70i4F2onhD/CeeK3JRx/lPyFgLcPoL6nvXV5bU+BfhL0E6AfB/0Y6EdBPwL6YdAPgX4Q9AOg7wd9H+h7Qd8D+m7Qd4G+E/QdoG8HfRvoW0HfAvpm0DeBvhH0DaCvB30d6GtBXwP6K9Bfgv4C9OegPwP9KehPQH8M+iPQH4L+APT7oFeDfg/0u6DfAf026LdAvwn6DdCvg34N9KugXwH9MuiXQL8I+gXQz4N+DvSzoJ8BnQ15jVmgM0FngE4HnQY6FXQK6LDJkzT5kaD/hfrXgv4H9N+g/wL9J+g/QP8O+jfQv4L+BfTPoNeA/gn0j6B/AP096O9Afwv6G9Bfg+4BeLuD7ga6K+guoDuD7gS6I+gOoNuDLgbdDnRb0G1AtwbdCnQR6ELQLUG3AF0AujnofNB5oJuBzgXdFHQT0DmgG4NuBDoC2vyPvfl/e/O/92NBjwE9GvQo0CNBjwA9HHQM9DDQQ0EPAT0Y9CDQA0EPAF0Buhx0f9D9QJeBLgVdAtoHHQXdF3Qf0L1B9wLdE7R5nqt5zqt5/qt5Lqx5Xqx5jqx5vqx57qx5Hq15Tu12oM1zbc3zbs1zcM3zcc1zc83zdM1zds3zd81zec3zes1zfM3zfc1zf83zgM1zgs3zg81zhc3zhs1ziM3zic1zi01es8l3NnnQJj/a5E2bfGqTZ23yr01etsnXNnncJr/b5H2bfHCTJ27yx01euck3N3noJj/d5K2bfHaT527y301evMmXN3n0Jr/e5N2bfHyTp2/y94u9dcdxyj5eyQlKTlRykpKTlfxXySlKTlVympLTlZyh5EwlZyk5W8k5Ss5Vcp6S85VcoORCJRcpuVjJJUouVXKZksuVXKHkSiX/U3KVkqtD6/LM03Q/eOti5irQMcDXyoP4AboN6Lag23kb/KmKR6A7gO4IuhPozqC7gO4Kuhvo7qB7gO4Juhfo3qD7gO4LOgraB10CuhR0Geh+oPuDLgddAXoA6IGgB4EeDHoI6KGgh4GOgR4OegTokaBHgR4NegzosaDHgR4PegLoiaAngd4K9GTQU0BPBT0N9HTQM0DPBD0L9GzQc0DPBT0P9Hxv43Gq7eNBnwD6RNAngT4Z9H9BnwL6VNCngT4d9BmgzwR9FuizQZ8D+lzQ54E+H/QFoC8EfRHoi0FfAvpS0JeBvhz0FaCvBP0/0FeBvhr0NSGv2hEGHQMdje/wdf2mrnj37dcS1pXubfiNFj5CxP5jzNE4D4z3OmSkWn2nD3Mtl+7AJ89qx+YxJ6CMtHEXnXRdiL7e6wkHrCu/rw+R91G1mwqcOW2oINDScxMEbkgGAdpOusFBELiReRDQft/oIAikexsGID44Ty6XOAuE4Mz36IOV1kPg/CZl3KzkFiW3KrlNye1K7lByp5K7lNyt5B4l9yq5T8n9Sh5Q8qCSh5Q8rOQRJY8qeUzJ40qeUPKkkqeUPK3kGSXPKnlOyfNKXlDyopKXlLys5BUlryp5TcnrSt5Q8qaSt5S8reQdJe8qeU/JaiXvK/lAyYdKPlLysZJPlHyq5DMlnyv5QsmXSr5S8rWSb5R8i+ZWE9BZ3sYBOwvNlxAqwwFdH+noPEbUTw4WiKi++s5EfniWvzngSzppu6VLdVtpXvXDXohiAXxqrHlwvmTRTjtN3X3F3ov2rByz18ole67YZSUeyqZ6M6RTAtyzy1MRFRlwnobKzOcykA7Z+GOg411HbqS7KvHDXnV+qePRLSE3cZMQY8l3CuP3IYcbnhCMEN3QP96GxygENUr9Nd4tBBuYdSlhy5Z9R7gZ+p5wYLgexLcKGMQ/KIw/NsQg/sEaxD82wCC+lXAQ/0A4iH8UNIjvFDCIf1IY1zTEIP7JGsRrGmAQ30k4iH8iHMRrBA3iuwQM4p8Vxl8aYhD/bA3iXxpgEN9FOIh/JhzEvwgaxHcLGMS/Koy/NcQg/tUaxL81wCC+m3AQ/0o4iH8TNIi/FTCIf1cY/2iIQfy7NYj/aIBB/C3hIP6dcBD/4WhgUPOH7zzH6/NNhPz9SchfQ31FRokZ4/0LGcmvyOKsU3fSXyH6ev8mHPyu/P47RN5H1YKTnXhDeYs33rr+CfEel7pv/gnR3yYfKuSHFpR9vZawr4cS/mijoRaitY4Won+TCxFtJ/3rYCHSPWLq4rgQrTWXB7T1Os0noObUHNRBFOdnxIvzZsKAHArL281TYsZ4w2jsJ4NonHXqTtKEUtebwjyIar9THAdRzrv51DDvcan7JjVMv5uPJeBuPo2wr2MCd/Npjhai9ORCRNtJ6Q4WogzmC5H2O0PYbp6aUw8NZEqcOIs5Xpz3EAbkTIG7+UxHQTQrGURpOynLQRDNZh5Etd/ZCbybjzDfzeu+iTjYzY9IwN18I8K+HiFwN9/I0ULUOLkQ0XZSYwcLUQ7zhUj7nSNsN0/JaUMFAcrsIIy3STII0HZSEwdBoCnzIKD9bprAu9Fc5rtR3Te5DnajoxJwN9qMsK9HCdyNEvpfbSHKSy5EtJ2U52Ahyme+EGm/84XtRik5baggsMbRbrR5MgjQdlJzB0GggHkQ0H4XJPButAXz3ajumxYOdqNjEnA32pKwr8cI3I0S+l9tISpMLkS0nVToYCEqYr4Qab+LhO1GKTltqCDwi6PdaKtkEKDtpFYOgkBr5kFA+906gXejbZjvRnXftHGwGx2XgLvRtoR9PU7gbpTQ/2oLUbvkQkTbSe0cLETFzBci7XexsN0oJacNFQR+c7QbbZ8MArSd1N5BEOjAPAhovzsk8G60I/PdqO6bjg52oxMScDfaibCvJwjcjRL6X20h6pxciGg7qbODhagL84VI+91F2G6UmlMPDWSMM966w4Q+30YYkLsSBqSGCqJdHQXRbskgSttJ3RwE0e7Mg6j2u3sC7+Z7MN/N677p4WA3PykBd/M9Cft6ksDdfE9HC1Gv5EJE20m9HCxEvZkvRNrv3sJ289ScemggY5xxp3gR+nw7YUDuI3A338dREO2bDKK0ndTXQRCNMg+i2u9oAu/mfea7ed03voPd/OQE3M2XEPb1ZIG7+RJHC1FpciGi7aRSBwtRGfOFSPtdJmw3T8mpxob/x1s/13itt+5vR7X+EXS2kn6q3f4wRvRnKuAzt8F7bgd9B+g1oH8B/Rvoe0DfC/o+0PeDfgD0g6AfAv0w6EdAPwr6MdCPg34C9JOgnwL9NOhnQD8L+jnQz4N+AfSLoF8C/TLoV0C/Cvo10K+DfgP0m6DfAv026HdAvwv6PdCrQb8P+gPQH4L+CPTHoD8B/Snoz0B/DvoL0F+C/gr016C/Ad1DSbnq1wrUt2Y83ATv0X2/Ft6ndTMlA9T5QBxxPd6brkFhNwsAZ58HJ6DPQxLQ56EJ6POwBPQ5loA+D09An0ckoM8jE9DnUQno8+gE9HlMAvo8NgF9HpeAPo9PQJ8nJKDPExPQ50kJ6PNWCejz5AT0eQqxz9T3uc9SdVzl0X8JOZXO76gkv6cR+y1hjE8nHOMN9YVpIV1d1b4wnRHecJ78wjTOOguBUOp6Z4Z5f2Gq/Z4ZJu+jKP7SCR+cJ5dLnC2E4Gzu0QcrrSNwPkuNtdlK5iiZq2SekvlKtlayQMlCJdso2RaNySags7yNA10WGmchVIYDoT7S0XmMyD8HgTWapurIRH54lr854Es6bbuLdVtpXvXDDuCxAD411kI4r1y5216Ve1VO3WvxTiuWjNlr5ZI9V+yycuSinXbCA8E0YgZESoCTdnkqIiQDztNQmflcBtIh24sY6Hij8EzCLUjYq84y9Wye42iLSIixZDuFcVHY4XYhBCNEN/QPkKztoEapEw/nECz/lcvWHdsRbiUWEQ4M14N4roBBvFhhXNIQg3ixNYiXNMAgnks4iBcTDuIlggbxAgGDeKnCWNkQg3ipNYgrG2AQLyAcxEsJB3GloEG8UMAgXqYwLm+IQbzMGsTLG2AQLyQcxMsIB/FyQYN4GwGDeHuFcUVDDOLtrUG8ogEG8TaEg3h7wkG8wtHAoOYP3/KK1+dZhPztQMhfQ92bp8SM8e4Y3nCevDcfZ526k3YM09e7E+Hgd+X3TmHyPnL6ZR/l9x07h3mPS903O4cdfKEt5Fe1lH29krCvpwr8VS2h/9UWol2SCxFtJ+3iYCHalflCpP3e1fFCxJ1TDw1kSpz4i+F4cc4m9Hk3gbv53RwF0d2TQZS2k3Z3EET3YB5Etd97JPBufk/mu3ndN3s62M1PT8Dd/F6EfT1d4G6e0P9qC9HeyYWItpP2drAQ7cN8IdJ+7yNsN0/NqYcGMiVOnD4ZL85tCX3eV+Bufl9HQXS/ZBCl7aT9HATR/ZkHUe33/gm8mz+A+W5e980BDnbzMxNwN38gYV/PFLibJ/S/2kJ0UHIhou2kgxwsRAczX4i03wcL281TctpQQaDSURA4JBkEaDvpEAdB4FDmQUD7fWgC70YPY74b1X1zmIPd6OwE3I0eTtjXswXuRgn9r7YQHZFciGg76QgHC9GRzBci7feRwnajlJw2VBBY7igIHJUMArSddJSDIHA08yCg/T46gXejxzDfjeq+OcbBbnRuAu5G/0PY13MF7kYJ/a+2EB2bXIhoO+lYBwvRKuYLkfZ7lbDdKCWnDRUEVjgKAsclgwBtJx3nIAgczzwIaL+PT+Dd6AnMd6O6b05wsBudn4C70RMJ+3q+wN0oof/VFqKTkgsRbSed5GAhOpn5QqT9PlnYbtQ1p/HWqenUz5emrncB8eLhwu/BDhbNhUIWzXmE4/K/hIvmNkL4Ixzf/kLCjQIlfw216SAcP9U2HackNx20nXSKg03Hqcw3HdrvUxP46vc05le/um9Oc7CQL07Aq9/TCft6scCrX0L/qy1EZyQXItpOOsPBQnQm84VI+32msKtfak49NJAxznjrJvwTFH8+oc9nEQakhgqiZzkKomcngyhtJ53tIIiewzyIar/PSeDd/LnMd/O6b851sJtfmoC7+fMI+3qpwN08of/VFqLzkwsRbSed72AhuoD5QqT9vkDYbp6SU40N/8WhfvLiWm/df0ppvQR0tpIL1flFMEbwX7fNg/fMB7016ErQy0GvAJ2r5GJ1fgmerR79YnNpuGH6M16clwnBeTlxIMfj7lIYG5eBvhy0/le8K9T5lY7Hyv+E9MFVQnBe7XCs/A/GxlWgr0Zj5Rp1fq3jsXKdkD64XgjOGxyOletgbFwP+gY0Vm5U5zc5His3C+mDW4TgvNXhWLkZxsYtoG9FY+U2dX6747Fyh5A+uNNBHxhq7wDO7wSt/5b3LnV+t2Pu7xHC/b0Oub8HOL8XcX+fOr/fMfcPCOH+QYfcPwCcP4i4f0idP+yY+0eEcP+oQ+4fAc4fRdw/ps4fd8z9E0K4f1IIzqeE4HxaCM5nhOB8VgjO54TgfF4IzheE4HxRCM6XhOB8WQjOV4TgfFUIzteE4HxdCM43hOB8UwjOt4TgfFsIzneE4HxXCM73HFxDt4f6LoZr521BPwH6SdBPgX4a9BWgrwF9I+jbQN8F+j7QD4F+DPQzoJ8F/Rzo50G/APpF0C+Bfhn0K6BfBf0a6NdBvwH6TdBvgX4b9Dug3wX9HuieSlar8/fDG74nN/eXZ8F7LgS9GnQzJR+o8w/DXrUjTNz/lElNH9GNJSf5LLo+F7+nXeb497TR+I4qvweF6f1e3kCJe/Hi/JhwXBL2tS+Fv08SjD/OMfZT4hjrasx8RujzAsIE14VC5tznCcYf5zn3BfN9jR57LvY1OzDf12i/hzjY1+woJEZ8STguCfval8LfVwnGH+cY+zXzGKt/TOIixq5kHmO130MdxNhdhMSIbwjHJWFf+1L4+zbB+OMcY79jHmNVlziJsbszj7Ha72EOYuweQmLE94TjkrCvfSn8/ZBg/HGOsT8yj7H6uycXMXZv5jFW+x1zEGP3ERIjfiIcl4R97Uvhb02C8cc5xv7MPMZmeG5i7P7MY6z2e7iDGHuAkBjxC+G4JOxrXwp/vyYYf5xj7G/MY6z+PZaLGHsw8xir/R7hIMYeIiRG/E44Lgn72pfC3x8Jxh/nGPsn8xhb9TwMBzH2cOYxVvs90kGMPUJIjPiLcFwS9rUvhb+/E4w/zjH2H+YxVj9Dz0WMPZp5jNV+j3IQY48REiPWEo5Lwr72pfD3b4LxxznG6s6l4k/XQR1rIp6bGLuKeYzVfo92EGOPExIjQoTjkrCvfSn8hROMP84xNoV5jG3kuYmxJzKPsdrvMQ5i7ElCYkQq4bgk7GtfCn9pCcYf5xibzjzGNvbcxNhTmMdY7fdYBzH2VCExIoNwXBL2tS+Fv8wE449zjM1iHmP1n/S4iLFnMI+x2u9xDmLsmUJiRDbhuCTsa18Kf5EE449zjG3EPMY28dzE2HOYx1jt93gHMfZcITGiMeG4JOxrXwp/OQnGH+cY24R5jG3quYmxFzCPsdrvCQ5i7IVCYkRTwnFJ2Ne+FP5yE4w/zjG2GfMYq/+z1EWMvYR5jNV+T3QQYy8VEiPyCMclYV/7UvjLTzD+OMfY5sxjrH4OtosYewXzGKv9nuQgxl4pJEYUEI5Lwr72pfDXIsH44xxjWzKPsXmemxh7NfMYq/3eykGMvUZIjCgkHJeEfe1L4a8owfjjHGNbMY+xx3huYuz1zGOs9nuygxh7g5AY0ZpwXBL2tS+FvzYJxh/nGNuWeYzV8XWag1hzM/MYO0X5PNWB37cIiRHtCMclYV/7UvgrTjD+OMfY9sxj7ADl63QHsaZDCu8Y68rvjimJN8Y7MR/j2tdPHPT17cz3Efr/Oz924PcdQtbBzoTjkrCv/TuYjxs9Xz53MG7uZu63/i/Gzxz4fY+Q+dKFcL4Q9rV/j4D58pWDcXM/c7/1/yh+6cDvB4TMl66E84Wwr/0HBMyXbx2Mm4eZ+63/E+8bB34/ImS+dCOcL4R97T8iYL784GDcPM7cb/3/Zt878PsJIfOlO+F8Iexr/wkB82WNg3HzNHO/9X9V/eTA72eEzJcehPOFsK/9ZwTMF/29LPW4eZ653zrHpLUDv18QMl96Es4Xwr72XfFH3c+9UmTg7C0EZx8hOPsy/25Lx/NiB3HtZebxXOeztHPg9ytC4nmUMJ4T9rX/ipB47guJPyVCcJYKwVkmBGc/ITj7C8FZLgRnhRCcA4TgHCgE5yAhOAcLwTlECM6hQnAOE3Ad1NHB9cDrzK+DdM5pBwd+vyHkOihGeB1E2Nf+G0Kug4YLiT8jhOAcyTxOfqDiZCcH8WKUkP4ZLQTnGCE4xwrBOU4IzvFCcE4QgnOiEJyThODcSgjOyUJwThFwXfWrgzyTt5lfV/2sfP7Fgd/vCLmumkp4XUXY1/47AvJr/nAwblYz9/s35fPvDvx+X8h8mUY4Xwj72n9fwHz528G4+Yi5338qn/9y4PfHQubLdML5QtjX/scC5su/DsbNZ8z9/kf5vNaB358LmS8zCOcLYV/7nwuYL2EH9zu/Yu63HoAhB35/LWS+zCScL4R97X8tYL6kORg33zH3W/9He6oDv78XMl9mEc4Xwr72vxcwXzIdjJufmPut/287w4Hfa4TMl9mE84Wwr/01AuZLxMG4+ZW53/q/k7Md+P2bkPkyh3C+EPa1/5uA+ZLjYNz8ydxv/T+4jR34/ZeQ+TKXcL4Q9rX/l4D5kutg3Kzl/v/EyuemDvz+V8h8mUc4Xwj72v9XwHzJdzBuwum8/db/T5nnwO+UdBnzZT7hfCHsaz+F+bjR86WFg3GTztxv/V+DBQ78zhAyX7YmnC+Efe1nCJgvRQ7GTTZzv/X/xhU68DsiZL4sIJwvhH3tu+IvTDx+8POs4+2LhSkyfO5C6PM2QnzuSujztkJ87kbo83ZCfO5O6PMiIT73IPR5sRCfexL6vESIz70IfV4qxOfehD5XCvG5D6HPy4T43JfQ5+VCfI4S+ry9EJ99Qp9XCPG5hNDnHYT4XEro845CfC4j9HknIT73I/R5ZyE+9yf0eaUQn8sJfd5FiM8VhD7vKsTnAYQ+7ybE54GEPu8uxOdBhD7vIcTnwYQ+7ynE5yGEPu8lxOehhD7vLcTnYYQ+7yPE5xihz/sK8Xk4oc/7CfF5BKHP+wvxeSShzwcI8XkUoc8HCvF5NKHPBwnxeQyhzwcL8Xksoc+HCPF5HKHPhwrxeTyhz4cJ8XkCoc+HC/F5IqHPRwjxeRKhz0cK8XkrQp+PEuLzZEKfjxbi8xRCn48R4vNUQp//I8TnaYQ+HyvE5+mEPq8S4vMMQp+PE+LzTEKfjxfi8yxCn08Q4vNsQp9PFOLzHEKfTxLi81xCn08W4vM8Qp//K8Tn+YQ+nyLE560JfT5ViM8LCH0+jdDn+VBPCHzWv1FLVZKmJF1JhpJMJVlKspVElDRS0lhJjpImSpoqyVXSTEmeknwlzZUUKGmhpKWSQiVFSlopaa2kjZK2StopKVbSXkkHJR2VdFLSWUkXJV2VdFPSXUkPJT2V9FLSW0kfJX01B0p8JSWaWyVlSvop6a+kXEmFkgFKBioZpGSwkiFKhioZBn08XMkIJSOVjFIyWskYJWOVjFMyXskEJROVTFKylZLJSqYomapkmpLpSmYomalklpLZSuYomatknpL5gEUf+vdi+vdT+vdE+vc1+vcm+vcX+vcIOj9f56vr/G2dz6zze3W+q87/1PmQOj9Q58vp/DGdT6Xzi3S+jc4/0fkYOj9Bf1+vv7/W3+fq7zf19336+y/9fZD+fkR/X6Dvn+v7yfr+qr7fqO+/6ftR+v6Mvl+hr9/19ay+vtPXO3r/r/fDen+o90t6/6DXU72+6Hir44+ej3p8/h9jYPnKZy4FAA==", + "bytecode": "H4sIAAAAAAAA/+1dBXgctxLeO7PPceLYATvkOMy3thM7aeDC2FDDpXCbNk3KzMzcvravzMzMzMzclOGVMeUnOaNkrGwc2ze6zHx3+33zzY7Olv75JY20u3N7hZmed3W6V3OElISVpMO5sTMsOxPOs5UUQpk+ipS0gPIiVN5SSSsob4HKWyspRvW2gb8xdlvLbmfZ7S27g2WXWnZHyy6z7E6W3dmyu1h2V8vuZtndLbuHZfe07F6W3duy+1h2X8vuZ9lRy/Ytu9yyKyy70rL7W/YAy66y7GrLHmjZgyx7M8sebNlDLHuoZQ+z7JhlD7fsEZY90rJHWfZoyx5j2WMte5xlj7fsCZY90bInWfbmlj3ZsqdY9lTLnmbZ0y17C8ueYdkzLXuWZc+27DmWPdey54GtpRX0lz50HNBzX893Pcf1vC711szfMm/NPNVzU89HPQf1vOvurZlfek7peaTnjp4veo7oeaHngh7/eszrca7Hth7PegzrcavHqh6fekzqcajHnh5veowNA2x6/Ogxo8eJHht6POgxMBb6ejz06UTou82hj6ZAX0wDzrcAbmcCh7OBq7nAieYnE3zWh46l/3hrYqfWLUG3At0adDHoEtBtQLcF3Q50e9AdQJeC7gi6DHQn0J1BdwHdFXQ30N1B9wDdE3Qv0L1B9wHdF3Q/0FHQPuhy0BXo/7dUslUAN5XwN/1BDwBdBboa9EDQg0BvBnow6CGgh4IeBjoGejjoEaBHgh4FejToMaDHgh4HejzoCaAngp4EenPQk0FPAT0V9DTQ00FvgbjZWsk2Xu0jBDoGuiI6oLJySVX5Er/CXxAtH7iwun+0sv/CAdV+td+/uv/i8uqKiiXVldVVAxcOrIoO9CsrlvhL+w+sWBpdc2yL6orGebjEOV8IzgVCcC4UgnOREJyLheBcIgTnUiE4txOCc3shOJcJwbmDEJw7CsG5XAjOnYTgXCEE50ohOHcWgnMXITh3FYJzNyE4dxeCcw8hOPcUgnMvQpz2PRh9L0vfi5gJehbo2aDngJ4Leh7obUHPB70A9ELQi0AvBr0E9FLQ24HeHvQy0DuA3hH0ctA7gV4BeiXonUHvAnpX0LuB3h30HqD3BL2Xt+4ezN5K9vFqH9R9uK8nY6ztJwTn/kJwHiAE54FCcB4kBOfBQnAeIgTnoUJwHiYE5+FCcB4hBOeRHv0erRnUp5+f6b3K1qD3Br0v6P1A7w/6ANAHgj4I9MGgDwF9KOjDQB8O+gjQR3rr9khHKTkacOV4Gz5iNBz47uquWOyw7iUO617qru7KqMO6HfZlZbnDuisc1l2Zieo8BvSxoI8DfTzoE0CfiP7n/ew1Ws/FXCiDopoyM0ezUJn5PBOVmc8zUJn5PB2Vmc/TUJn5PIzKzOchVGY+96z29REDHY3zyPTWj+nROA/tcyHywwvwNxTASziAP/N5RgB/uD/M56Zf8pVEAtrOROUxGn/9kFf7iKHziKWxzxywpDPCksEISyYjLFmMsGQzwpLDCEsuIyyhTYwFx3dz6Ln9aWjd5wVQjteE5nCO1wSzjuA1oQjVacpaIJ9NWUs4x2u5wViAyvLgvDkqawLneB3Lh/MiVNYUzlugMnP90TIAC+4b8z8x0NH4jpq+we3EkG3aykUYWjLAkssISw4jLNmMsGQxwpLJCEsGIyzpjLCkMcISDsBSRIslitcfD2HCRwydFyEshcRYdJ3NHfhX2AD/miP/Chz4R1ynr+ts5QBnMW2dA3Q/tPbq3w/FqB9KiP3TdbRBbRlcpp0I+jyCcLQh7rsQatPUa2yMr75Y8wRhbSIIa74grE0FYW22ibHSt+tX5Vjt6qOuOIextCXFsiaOtyOuU9fRHuE3vhrsEfR5O+Rbe1ocNf3b1qvNqbHbo3ZT/pO2m/LfS/mf8j/lf8r/lP8p/1P+p/xP+Z/yP+V/yv+U/yn/U/6n/E/5n/I/5T8H/zeUQ0t8n73OvLK2AVjSGGFJZ4QlgxGWTEZYshhhyWaEJYcRllxGWCKMsOQxwtKEEZZ8RliaMsLSjBGWAkZYmjPCUsgISxEjLC0YYWnJCEsrRlhaM8JSzAhLCSMsDnOiGoylHSMsoU2MJei7UTno8zAqM9fg+PtQHeAcfx+qFM7x96E6Ij9NWRmc4+9DdYJz/B3ozujc6C5wnovKusI5/u5TNzjH35vqDuf4O1c94LwVKusJ561RWS84L0FlhiPMqeGoPSozHHVAZYajUlRmOOqIygxHZajMcNQJlRmOMGeGoy6ozIzBrqjM7Ou7oTKzv+6Oysw+twcqM/vNnqjM7PsMZ9rXrPC6z83f4jHWK6Aec47nimk7Bjoa31EzV3A7MWSbtvB31XoywNKOEZY2jLCUMMJSzAhLa0ZYWjHC0pIRlhaMsBQxwlLICEtzRlgKGGFpxghLU0ZY8hlhacIISx4jLBFGWHIZYclhhCWbEZYsRlgyGWHJYIQlnRGWNEZYwgFYXOSUmHsG+jDX9e0QDoOpO8LRjZgTXUfXABzdEA7TfleEowstjpr3G3YOwIHvY5n2OyMcnWhx1LwLsSwARyeEw7RfhnB0pMWhfzJw7T0vjKMjwmHaL0U4OtDi0D9ZWCv3yeDogHCY9vG9PHOO74GZ+3/4XllvOMf32frAOb5H1xfO8f29fpb/+F4jxmJiC77/aGJfb1RmYnMfVGbWjr6ozKxtpn1tb+ietcETAx2N76jznjW+T2j/nfZteNa6z7MD/sfsZfD9a7PXwvevI6hOU4ZzHkyZ2Uvj+9emPXz/GrdntGkvF5WZ9vB7y0x7eajMtNckAAvuG/M/MdDR+I6avsHtxJCdh/wJBeAzn+P+MH5urD8Mb7g/gt6Baq6zgvoD82fawzzX1R+430x7uH/xOz5N+/rviN97U67bMtf75qhrvuD3x5n7Jzj/gfi9QzXjo9DCYmzTVgRhaOoOy4DIBto2Rxi1TfzOozpjWGEAljRGWNIZYclghCWTEZYsRliyGWHJYYQllxGWCCMseYywNGGEJZ8RlqaMsDRjhKWAEZbmjLCENjGWoOtBvOfF1xz2XlCXmWeu+BrBPBPG1zDmmXU+KjPP1JuhsnAAPrPHw+9qNnstnK9kv8MVX3Pg3CSzBzDt6/+bn7U+1nAA1lYBPuE+NG3HQEfjO2r6ELcTQ7ZpC183tmKApTkjLAWMsDRjhKUpIyz5jLA0YYQljxGWCCMsuYyw5DDCks0ISxYjLJmMsGQwwpLOCEsaIyzhACzE77yvecZr9rP6MPtL/L57g8nlO+ZDFo5S1C7+Xhvx+89rni2XBPhfjPw37Zc47IccVL+pW8+Ls8LufHfw/oeafsTvfzgI+YXff+Gi3XZWu8VWu/pv8HeYDkJYzf+mob+5NLyuHy6E81xUH/7uSQerLXwNaT4zz5RKHfhu2vCg/hJ0bnwvRb6Xov8pQr6bv7kK+T4ka93/ldFir8kh6Ah1hRFunLfQmbbNmjwOkyvhofo7orKu6NzEBJxf0cX6O1exCeMw7ePvJ3anbbNCj9tuXu2jrvs3OO+nBy2WqKv1rifCb3w12CPoc/y94Z60OGr2AD282pwaG+d0pfwnbVeU/xt61u0i59CzsHgBvJgjjRGWdEZYMhhhyWSEJYsRlmxGWHIYYcllhCXCCEseIyxNGGHJZ4SlKSMszRhhKWCEpTkjLIWMsBQxwtKCEZaWjLC0YoSlNSMsxYywlDDC0oYRlraMsLRjhKU9IywdGGEpZYSlIyMsZYywdGKEpTMjLF0YYenKCEs3RlgcPi9oMJbQJsaS4wXnvJrP8TvrzD1h/F63XnCOv5caDmjD/t46zlvF73XbNWv99sIB7fUMwOWay/p8Jz5k4duUWLozwtKNEZaujLB0YYSlMyMsnRhhKWOEpSMjLKWMsHRghKU9Iyyc3u3ZlhGW1HtGg7Gk3jMajCX1ntFgLKn3jAZjSb1nNBhL6j2jwVhS7xkNxpJ6z2gwltR7RoOx5DDCknrPaDCWTEZYUu8ZDcbC+T2jqZzkjWNJ5SQHY0nlJAdjSeUkB2PJZYQllZMcjCWVkxyMJZWTHIwllZMcjCWVkxyMJZWTHIwllZMcjCWVkxyMJZWTHIwllZMcjCWVkxyMpSMjLGWMsKRykoOxpHKSg7GkcpKDsbi+59sQLL0YYQltYiw5Xt252r1QWdj6X30P9hqUW+1DeRj9Tzmc499RqYBz/DsqlahOU9YfzjNR2QA4zwrA6qMy89tC5ajM/LZQBSozvy1UicrMbwv1R2VROB8QgAX3ofmfGOhofEdNH+J2Ysg2beUiDAMYYOnFCEtPRli6M8LSjRGWroywdGGEpTMjLJ0YYSljhKUjIyyljLB0YISlPSMs7RhhacsISxtGWEoYYSlmhKU1IyytGGFpyQhLC0ZYihhhKWSEpTkjLAWMsDRjhKUpIyz5jLA0YYQljxGWCCMsuYyw5DDCks0ISxYjLJmMsGQwwpLOCEsaIyzhACyVtFjK8f1/D2HCRwyd4/v3FRZmja/cAVcVFhZjm7YiCEMPh1giAW07aKc8x/JZH3X1CX72Yp7NVCB8VcQ8hFA7pl5jm7YwV70dYokEtO2gnfIcy2d91NUnpn39f9Vw7iN8A4l5CKF2TL3GNm1hrvo4xBIJaNtBO+U5ls/6qKtPTPv6/wbBeTXCtxkxDyHUjqnX2KYtzFVfh1giAW07aKc8x/JZH3X1iWlf/99gOB+E8A0h5iGE2jH1Gtu0hbnq5xBLJKBtB+2U51g+66OuPjHt6/8bCueDEb5hxDyEUDumXmObtjBXUYdYIgFt56KyAlRmPsd7NoOjApUNh3MflY2A82pUNhLOB6GyUXA+GPFgjjDiYTQxD3WNj9EBWNIYYUlnhCWDEZZMRliyGGHJZoQlhxGWXEZYIoyw5DHC0oQRlnxGWJoywtKMEZYCRliaM8JSyAhLESMsLRhhackISytGWFozwlLMCEsJIyxtGGFpywhLO0ZY2jPC0oERllJGWDoywlLGCEsnRlg6M8LShRGWroywdGOEpTsjLD0YYenJCEsvRlh6M8LShxGWvoyw9GOEJcoIi88ISzkjLBWMsFQywtKfEZYBjLBUMcJSzQjLQEZYBjHCshkjLIMZYRnCCMtQRliGMcISY4RlOCMsIxhhGckIyyhGWEKbGMuG3rtjPh+GysZY9eiysXA+HJWNg/MRqGw8nI9EZRPgfBQqmwjnhahsEpx3QWWbw3kYlYUDfDN5V2NQmcl/GovKMuB8HCoz+UDjUZnJy5mAykx+zERUZvJUJqEyky9isOs2/0DvLRob4JPBjd9bZPzD7y2ajOo0ZVPgPBOVTYVz/N4igwfzYXBj3ox/mF/Dw2RUZviagsoMr1MDsOA5YP4nBjoa31EzB3A7MWSbtvB7i6YywDKKEZaRjLCMYIRlOCMsMUZYhjHCMpQRliGMsAxmhGUzRlgGMcIykBGWakZYqhhhGcAIS39GWCoZYalghKWcERafEZYoIyz9GGHpywhLH0ZYejPC0osRlp6MsPRghKU7IyzdGGHpyghLF0ZYOjPC0okRljJGWDoywlLKCEsHRljaM8LSjhGWtoywtGGEpYQRlmJGWFozwtKKEZaWjLC0YISliBGWQkZYmjPCUsAISzNGWJoywpLPCEsTRljyGGGJMMKSywhLDiMs2YywZDHCkskISwYjLOmMsKQxwhIOwDKZFssA3KZuz1yTTUZtjiFuE+e0eYgHfMTQ+RiEZRotlqhudzqqP4bawO1uQduuj9sNgZg2THkaOn/FBA/0d/owOS8Gsx43YwP+Dp+Ptv4ngj4f69jnaQhHDNmmLR0LnkS+jg3APQXhNp9vjnAXE+PWdYxBOEz7+N0exONyAM4PNUddc2QawkLcbzVzZAaqP4bawO3OJOYdt2vmiGnDlKeh88/QuJm57nTtuDGY9RyZHvB3+NyeQxH0+XTHPuO5GkO2aUvPkXeQr9MDcI9BuM3nkxBuF3MEz23TPp4jxOOyZo5g3/VR1xzZAmEh7reaOTIL1R9DbeB2ZxPzjts1c8S0YcrT0PnvaNzMXne6dtwYzHqOzAj4O3xuz6EI+nyGY5/xXI0h27Sl58i3yNcZAbjx+mc+n4hwu5gjeG6b9vEcIR6XNXME+66PuubITISFuN9q5sgcVH8MtYHbnUvMO27XzBHThilPQ+d55qIR/Z0+zLgxmPUcmRXwd/jcnkMR9Pksxz7juRpDtmlLz5EQ8nVWAG68/pnPJyDcLuYIntumfTxHiMdlzRzBvuujrjkyG2Eh7reaOTIP1R9DbeB2tyTmHbdr5ohpw5SnofMOaNxsue507bgxmPUcmRPwd/jcnkMR9Pkcxz7juRpDtmlLz5Ei5OucANx4/TOfj0e4XcwRPLdN+3iOEI/LmjmCfddHXXNkLsJC3G81c2QrVH8MtYHb3ZqYd9yumSOmDVOehs7L0bjZet3p2nFjMOs5Mi/g7/C5PYci6PN5jn3GczWGbNOWniPdkK/zAnDj9c98Pg7hdjFH8Nw27Zt2chAO/A5gl3HV1Gts3JcFFl8OsAyIBLSt+25Iltt+wP6XBPSDKZuHMJ0VXseNOUKImzAxzrpiWRhhtf9O30dfnL3u84yA/zGXIfg7vVnIV1MWRnWaMvw7EqbM/E9WQH2Yo0zLl2h8Rw1HuJ2YV/t3C/SBv1ub5Q5LVEqd+PviuA9zAspyA8rM+MfjyTyPxePJPC8OGk/ZqAz/j9Hmf3JRmRmDEVRmcOWhMtPHpv0s+DtTfwx0NL6jHPNojrrmLPYv1+IhE/lFhK9mbuRaWHItDiMIQ5YzLH5VJKDt3ITw4FfpOpsQ14nHvDnq6vsmyE/j63ZLdp+8cvclu4XQ/5s6W1l9oo8w+rs0b/220731jwx0jm49reUYjxHTpvbN5J3geWXaz0fYHMSncjzXsX/4iAX4hed+BvosmxZfrTXH1Gts01YEYUhzh6UiEtC2g3aiOQHt6PF2INqn5RL7Rj9v11yn4f3bQd7664WrdvOsdnOtdvXf4DX4IIQVr6/mb47NWtcPR8I5ztPCe7Z8q60NzWecc4bnYFN0bu8T9VGAzsPW/+D8PnxdY3IhY6Cj8R0VORYOfdQVN/BvmxTRYqnpb/y7HDHUBm63JW27Pm7X3A8wbZjyNHR+HgpkLdedrh0DBjPOo8V/h88LrP+JoM8LHftchHDEkG3a0mP1VORrYQDuLITbfN4M4S4kxq3raI5wZFnYcpAfeD1rkUD+WiBOMiy+HGCpWc/stl1xX7QR7k2Z+Tt7vUunxRT1vNoxN4za1QfOBcPjgfqaGvOBceDr6QyLNwd7jnLTDzaObIQD32/Qx4Z+e5P42s+vz3Xehn57c1NjSWeEJYMRlkxGWLIYYclmhCW0ibHU536r2avj+2Nm343vdZk9Fr4/ZtrB1932dQK+B5cfUB/miPg6poYj3E7MW//aAt9vzWeAJZsRlixGWDIZYclghCWdEZY0Rljs+wUbimsmduH7D+ZeAN6vNUPnRuPfbjdl5hoJ3/cPW/jwcwQcO01fNkVlBhdu38yFAlRmsDZH2De0v3Rx7x4fMXQesbTn1d5fbmos6YywZDDCkskIi7tnPQ3H4voZWEOw5DDCkssIS2gTYwnad8f7LNq+z43XKfxMyawTeO0y6wR+jt0cnRtt7ifh9Swc4Ftdaxde4+x9El678BpnsOI1zmDFa5zBirEbrAa7bnMFur4xeDbGufEPc27fz9Rl+D6fKTP3bTHnBg/mw+DGvBn/ML+GhyJUZvhqgcoMry0DsOA54OIeLG4n5q1/3x5fV7VkgCWXEZYcRliyGWHJYoQlkxGWDEZY0hlhSWOEJWxhwWtF0DMyvIaZ2I/XOrNG4DXRrCV47TR5MHiNDVv48JqN1xTTl3jtMWMNr1FmLuC1zMxVnPvjIK80KqVOzF04gLtwAHe4zJw3NHfV8J5H6085HpfmqGvvi8eLGScRhD+fFl/NvGxiYTF2Pmrf3nO7wBIJaNtBO+U5ls/6qKtPcEwwMQPnDTUj5iHk1c69iSHbtIW5SnOIJRLQtoN2ynMsn/VRV5/geG7iPb6OI84zqumTAguLsfG9SoMh3SGWSEDbDtopz/Eal1uFr9tw3ghxvlVNnxRaWIyN85EMhgyHWCIBbTtopzzH8lkfdfUJ3qfY+yjXuWimXmObtiIWBldYIgFtO2inPMfyWR919Qne25p9H74f0pqYhxBqx9RrbNMW5irLIZZIQNv4/a54D93aKnPxvbAQasfUa+xi1L7B0MohlkhA2/g9vPi6odgq03hKHHBj2jH1GrsEcWMwtHaIJRLQNn5fMr6WK7HKNJ42Drgx7Zh6jd0GcWMwFDvEEgloG/NQwIAH+975puChkAEP+B7GpuKhBQMe8D2fRPKA3/eOv5NmPse5D+Z9+fg7DeZ9/jhnwfzeAH7uY34PAd87KoXzElTW0cKny8rgvC0qM7/H0Q6Vmd8LaY/KzO+ZdEBl5pq9FJWZa8aOqMxcs5ShMrNn7oTKzJ6tMyozewbTvrbtPRBZx2YGVY7KqNo5hq6uKMZ7Ejo3pIdRGb6gp/bJs9qxecz3HHacq046yUG9J6O6KqIDKiuXVJUv8Sv8BdHygQur+0cr+y8cUO1X+/2r+y8ur66oWFJdWV01cOHAquhAv7Jiib+0/8CKpVCZK79Ppu+jaKIm17Gem8l1CjpPTa446zwWCKWu91SP9+TSfp9K30drB+rJgPlU0Kd5tQckPqh9O85zM/FOR+epiRdnnccBodT1nuHxnnja7zPo+2jtQD0NMJ8B+kwvcRPvTM/NxPsPOk9NvDjrPBMIpa73LI/3xNN+n0XfR1HPGiAeIQ9hQv+PJ8R1NiF/iQpOlJgx3nPQeSo4xVnn2UAodb3/9XgHJ+33f+n7yAnWswCrXW+8vJ6bJiMoUy505xL2CyV/iQrKhP7XCsrnofNUUI6zznOBUOp6z/d4B2Xt9/n0fVQrOHHn1BxhYpwnEuK8gLCuRAW+Czw3ge9CdJ4KfHHWeQEQSl3vRR7vwKf9voi+j5ztRi/y6Hej5yfhbvRiwn45X+BulND/WkH5EnSeCspx1nkxEEpd76Ue76Cs/b6Uvo+c7kYpOdXYMr11k0WnB/yj5FjQx4HWx2VKLgd/8Je4ToS/uQz97RVKrgz42xPgb64Ardu9SsnV8Ddhh7wV0dUVLYV6rlFyrZLrlFyv5AYlNyq5ScnNSm5RcquS25TcruQOJXcquUvJ3UruUXKvkvuU3K/kASUPKnlIycNKHlHyqJLHlDyu5AklTyp5SsnTQFIIeNNYsr119rWWfZ1lX2/ZN1j2jZZ9k2XfbNm3WPatln2bZd9u2XdY9p2WfZdl323Z91j2vZZ9n2Xfb9kPWPaDlv2QZT9s2Y9Y9qOW/ZhlP27ZT1j2k5b9lGU/7a3/owIBG6GKOOKD/xSqq3xpXLHGf9qji1sXJnYj6TfW5yfsuhY3nr8nCfm7KPEb8WhjfH4sqK5o4/h7nJC/izfNhUx1Q31+ZAN1DVzacP4eJeTvkk12IVi5tCE+P1RXXVUN4+9hQv4u3bQX0v3r6/MDG6ursv78PUjI32Wb/kZEtD4+31efuqL14+9+Qv4u53EjZ9HGfL6nvnVVbZy/ewn5u4LPjbDyuny+qyF1VdXN392E/F3J60Zi1YZ8vqOhdVVtmL87Cfm7it+N2Oogn29rTF3VwfzdTsjf1TxvZEdtn29pZF0Dlq7P362E/F3D90FAFPt8Uzx1ldfm72ZC/q7l/SCl3Ph8Q7x1Va7j70ZC/q5j/iBqydKlGqp/HUlda/i7npC/6xPEXzS+wyfsZx/7HC9/NwjhjzBO+9cS8nejEP4I91n+1YT83SSEP8LrJP9KQv5uFsIf4X0O/3JC/m4Rwh/hfUr/UkL+bhXCH+FzBv9iQv5uE7D/UztA/1rCvriQkL/bhYw/wn72byfk7w4h/BHGaf9WQv7uFMIf4T7Lv5mQv7uE8Ed4neTfSMjf3UL4I+xn/25C/u4Rwh9hnPbvJOTvXiH84Zy7uO8ZE+K6Twh/hPPEv5dw/FHyp3PZwohD6rzPFnR1rc37fEbJs0qeU/K8kheUvKjkJSUvK3lFyatKXlPyupI3lLyp5C0lbyt5R8m7St5T8r6SD5SsUvKhko+UfKzkEyWfKvlMyedKvlDypZKvgCSTB6ix4LzAZy37Oct+3rJfsOwXLfsly37Zsl+x7Fct+zXLft2y37DsNy37Lct+27Lfsex3Lfs9y37fsj+w7FWW/aFlf2TZH1v2J5b9qWV/ZtmfW/YXlv2lZX/luc/7/BLVFW/e51ceXdx5V0je5+d2XXHkfX5ByN97QvI+Pw2qq5F5n58R8ve+kLzPjzdQV2PyPj8h5O8DIXmfH9ZVVwPzPj8i5G+VkLzPDzZWVwPyPlcR8vehkLzP9+pTVz3zPt8n5O8jIXmf79S3rnrkfb5LyN/HQvI+32pIXRvJ+3ybkL9PhOR9vtHQuurI+3yTkL9PheR9vtaYujaQ9/k6IX+fCcn7fKWRdQXlfb5KyN/nQvI+X4qnLivv82VC/r4Qkvf5Qrx1obzPFwn5+1JI3udzJHWt4e95Qv6+EnLfnLCf/a8I75v/Twh/hHHa/4KQv6+F8Ee4z/I/I+TvGyH8EV4n+Z8Q8vetEP4I73P4HxHy950Q/gjvU/qrCPn7Xgh/hM8Z/PcJ+ftBSN7ns4R98S4hfz8KGX+E/ez/SMjfT0L4I4zT/veE/P0shD/CfZb/LSF/vwjhj/A6yf+akL9fhfBH2M/+r4T8/SaEP8I47f9MyN9qIfzhnLt4fX6GENfvQvgjnCf+asLxR8mfzmULIw6p8z5b0tW1Nu/zf0q+VvKNkm+VfKfkeyU/KPlRyU9Kflbyi5JflfymZLWS35X8oeRPJX8p+dtb8/7Tf8HxkJKwkjQl6UoylGQqyVKSrSRHSW7Iq5X3qbHgvMCvLfsby/7Wsr+z7O8t+wfL/tGyf7Lsny37F8v+1bJ/s+zVlv27Zf9h2X9a9l+W/bdl/2PZ/1q2PsF2yLLDlp1m2emWnWHZmZadZdnZlp1j2bkh93mfuk1TV7x5n7khurjTOj2h1+2NzvvMsn2OI+8zm5C/4sTy1+i8z4wgnxuZ95lJyF9J4vlrVN5n2gZ8bkzeZzohf202DX8NzvsM1eVzA/M+w4T8td1k/DUs7/PfjdXVgLxPj5C/dpuWv3rnff5dn7rqmff5j0fHX/tNz1+98j7/rG9d9cj7/IuQvw48+Nto3ufvDalrI3mffxDyV8qHvzrzPn9raF115H2uJuSvIy/+Npj3+Utj6tpA3uevhPyV8eMvMO/zp0bWFZT3+TMhf5148rde3ucP8dRl5X3+SMhfZ7781cr7/C7eulDe5/eE/HXhzd/avM9vSOpaw9+3hPx1TRB/0fgOn7CffexzvPx1E8IfYZz2OxPy110If4T7LL+MkL8eQvgjvE7ySwn56ymEP8L7HH57Qv56CeGP8D6l35aQv95C+CN8zuCXEPLXR8D+T+d9fk3YF60J+esrZPwR9rPfl5C/fkL4I4zTfm9C/qJC+CPcZ/k9CfnzhfBHeJ3kdyfkr1wIf4T97JcT8lchhD/COO1HCfmrFMIfzrmL+7uyhLj6C+GPcJ74lYTjj5I/ncsWRhxS5322oqtrbd5nRIHMU9JESb6SpkqaKSlQ0lxJoZIiJS2UtFTSSklrJcVKSpS0UdJWSTsl7ZV0UFKqpKOSMiWdlHRW0kVJVyXdlHRX0kNJTyvvM2LlBeZZdhPLzrfsppbdzLILLLu5ZRdadpFlt7DslpbdyrJbW3axZZdYdhvLbmvZ7Sy7vWV3sOxSy+5o2WWW3cmyO1t2F8vuatndLLu7Zfew7J4h93mfPQjzPnsS5u3MEJL32Y0w77M7IX8zheR9diHM++xKyN8sIXmfnQjzPjsT8jdbSN5nR8K8zzJC/uYIyfvssDGfG5D3WUrI31wheZ/t6uNzPfM+2xPyN09I3meb+vpcj7zPtoT8bSkk77O4IT5vJO+zhJC/rYTkfbZqqM915H22JuRvayF5ny0a4/MG8j5bEvK3jZC8z8JG+hyU91lEyN+2QvI+C+Lx2cr7bE7I33wheZ9N4/UZ5X02I+RvgZC8zyYhirrW8JdPyN9CIffNCfvZX0h433yREP4I47Q/n5C/xUL4I9xn+dsQ8rdECH+E10n+VoT8LRXCH+F9Dn8eIX/bCeGP8D6lP4eQv+2F8Ef4nMGfRcjfMiF5n3khOv5mEPK3g5DxR9jP/g6E/O0ohD/COO1vT8jfciH8Ee6z/KWE/O0khD/C6yR/MSF/K4TwR9jP/gpC/lYK4Y8wTvvLCfnbWQh/OOcuXp8jhHuhXYTwRzhP/J0Jxx8lfzqXLYw4DBFz2JqurrV5n70UyN5K+ijpq6SfkqgSX0m5kgollUr6KxmgpEpJtZKBSgYp2UzJYCVDlAxVMkyPbSXDlYxQMlLJKCWjlYxRMlbJOCXjlUwIebXyPntZeYG9LbuPZfe17H6WHbVs37LLLbvCsistu79lD7DsKsuutuyBlj3Isjez7MGWPcSyh1r2MMuOWfZwyx5h2SMte5Rlj7bsMZY91rLHWfZ4y54Qcp/3OR7F2njzPicQPnc4WUje51jb5zjyPscR8neKkLzP0UE+NzLvcwwhf6cKyfscuQGfG5P3OYqQv9OE5H0Or8vnBuZ9jiDk73QheZ/DNuZzA/I+Y4T8nSEk73NIfXyuZ97nUEL+zhSS97lZfX2uR97nYEL+/iMk73NgQ3zeSN7nIEL+zhKS91nVUJ/ryPusJuTvbCF5n/0b4/MG8j4HEPJ3jpC8z4pG+hyU91lJyN9/heR9+vH4bOV9lhPyd66QvM9+8fqM8j6jhPydJyTvs0+Ioq41/PUl5O98IffNCfvZP5/wvvkFQvgjjNP+uYT8XSiEP8J9ln8OIX8XCeGP8DrJP4uQv4uF8Ed4n8M/k5C/S4TwR3if0j+dkL9LhfBH+JzBP5WQv8uE5H32DtHxdzIhf5cLGX+E/exfTsjfFUL4I4zT/qWE/F0phD/CfZZ/MSF/Vwnhj/A6yb+QkL+rhfBH2M/+1YT8XSOEP8I47V9JyN+1QvjDOXfx+tyLcC90nRD+COeJfy3h+KPkT+eyhRGHIWIOi+nqWpv3OVGBnKRkcyWTlUxRMlXJNCXTlWyhZIaSmUpmKZmtZI6SuUrmKdlSyVZKtlayjZJtlcxXskDJQiWLlCxWskTJUiXbKdleyTIlO4S8WnmfE628wEmWvbllT7bsKZY91bKnWfZ0y97CsmdY9kzLnmXZsy17jmXPtex5lr2lZW9l2Vtb9jaWva1lz7fsBZa90LIXWfZiy15i2UstezvL3t6yl1n2DiH3eZ/LUKyNN+9zB8LnDs8KyfvczvY5jrzP7Qn5e05I3ueSIJ8bmfe5lJC/54XkfS7agM+NyftcTMjfC0LyPhfU5XMD8z4XEvL3opC8z2035nMD8j7nE/L3kpC8z63r43M98z63IeTvZSF5n1vW1+d65H1uRcjfK0LyPuc2xOeN5H3OI+TvVSF5n7Mb6nMdeZ9zCPl7TUje58zG+LyBvM9ZhPy9LiTvc4tG+hyU9zmDkL83hOR9TovHZyvvczohf28KyfucEq/PKO9zKiF/bwnJ+9w8RFHXGv4mE/L3tpD75oT97L9NeN/8HSH8EcZp/01C/t4Vwh/hPst/nZC/94TwR3id5L9KyN/7QvgjvM/hv0zI3wdC+CO8T+m/SMjfKiH8ET5n8J8n5O9DIXmfk0J0/D1LyN9HQsYfYT/7HxHy97EQ/gjjtL+KkL9PhPBHuM/y3yfk71Mh/BFeJ/nvEvL3mRD+CPvZ/4yQv8+F8EcYp/1PCPn7Qgh/OOcuXp8nEu6FvhTCH+E88b8gHH+U/OlctjDiMETMYQldXWvzPndUIJcr2UnJCiUrleysZBcluyrZTcnuSvZQsqeSvZTsrWQfJfsq2U/J/koOUHKgkoOUHKzkECWHKjlMyeFKjlBypJKjlByt5Bglx4a8WnmfO1p5gcsteyfLXmHZKy17Z8vexbJ3tezdLHt3y97Dsve07L0se2/L3sey97Xs/Sx7f8s+wLIPtOyDLPtgyz7Esg+17MMs+3DLPsKyj7Tsoyz7aMs+xrKPDbnP+zwGxdp48z6PJXzukJ2R0Ov2Rud9HmX7HEfe59GE/OUklr9G530eEeRzI/M+jyTkLzfx/DUq7/OwDfjcmLzPwwn5i2wa/hqc93lIXT43MO/zUEL+8jYZfw3L+zxoYz43IO/zYEL+mmxa/uqd93lAfXyuZ97ngYT85W96/uqV97lffX2uR97n/oT8NeXB30bzPvdpiM8byfvcl5C/Znz4qzPvc6+G+lxH3ufehPwV8OJvg3mfezTG5w3kfe5JyF9zfvwF5n3u1kifg/I+dyfkr5Anf+vlfe4Sj89W3ueuhPwV8eWvVt7nynh9RnmfOxPy14I3f2vzPncKUdS1hr8VhPy1TBB/0fgOn7CffexzvPy1EsIfYZz2iwj5ay2EP8J9lt+ckL9iIfwRXif5zQj5KxHCH+F9Dj+fkL82QvgjvE/p5xHy11YIf4TPGfxcQv7aCdj/6bzP5SE6/rIJ+WsvZPwR9rPfnpC/DkL4I4zTfltC/kqF8Ee4z/JLCPnrKIQ/wuskvzUhf2VC+CPsZ7+MkL9OQvgjjNN+KSF/nYXwh3Pu4vV5R8K9UBch/BHOE78z4fij5C8EvK2C+p721uS1PQX6SdBPgH4c9GOgHwX9COiHQT8E+kHQD4C+H/R9oO8FfQ/ou0HfBfpO0HeAvh30baBvBX0L6JtB3wT6RtA3gL4e9HWgrwV9DeivQH8J+gvQn4P+DPSnoD8B/THoj0B/CHoV6A9Avw/6PdDvgn4H9Nug3wL9Jug3QL8O+jXQr4J+BfTLoF8C/SLoF0A/D/o50M+CfgZ0LuQ15oDOBp0FOhN0Buh00GmgwyZP0uRHgv4X6v8H9N+g/wL9J+g/QP8OejXo30D/CvoX0D+D/gn0j6B/AP096O9Afwv6G9Bfg/4f6J6Atwfo7qC7ge4KugvozqA7gS4D3RF0KegOoNuDbge6Leg2oEtAF4NuDboV6JagW4AuAl0IujnoAtDNQDcFnQ+6Ceg80BHQ5nfsze/bm9+9Hwt6DOjRoEeBHgl6BOjhoGOgh4EeCnoI6MGgNwM9CPRA0NWgq0APAN0fdCXoCtDloH3QUdD9QPcF3Qd0b9C9QJv3uZr3vJr3v5r3wpr3xZr3yJr3y5r3zpr30Zr31M4Hbd5ra953a96Da96Pa96ba96na96za96/a97La97Xa97ja97va977a94HbN4TbN4fbN4rbN43bN5DbN5PbN5bbPKaTb6zyYM2+dEmb9rkU5s8a5N/bfKyTb62yeM2+d0m79vkg5s8cZM/bvLKTb65yUM3+ekmb93ks5s8d5P/bvLiTb68yaM3+fUm797k45s8fZO/X+qtOY5T9vFKTlByopKTlJys5BQlpyo5TcnpSs5QcqaS/yg5S8nZSs5R8l8l5yo5T8n5Si5QcqGSi5RcrOQSJZcquUzJ5UquUHKlkquUXB1ak2eeofvBWxMzjwUdA3xtPIgfoNuBbg+6g7fOn5p4BLoMdCfQnUF3Ad0VdDfQ3UH3AN0TdC/QvUH3Ad0XdD/QUdA+6HLQFaArQfcHPQB0Fehq0ANBDwK9GejBoIeAHgp6GOgY6OGgR4AeCXoU6NGgx4AeC3oc6PGgJ4CeCHoS6M1BTwY9BfRU0NNATwe9BegZoGeCngV6Nug5oOeCnuetP061fTzoE0CfCPok0CeDPgX0qaBPA3066DNAnwn6P6DPAn026HNA/xf0uaDPA30+6AtAXwj6ItAXg74E9KWgLwN9OegrQF8J+irQV4O+JuTVOsKgY6Cj8R2+rt/UFffvRBDWlemt+44WPkLE/mPM0TgPjPc6ZKRbfacPcy2X6cAnz2rH5jE/oIy0cReddF2Ivt7rCQesK7+vD5H3Ua2bCpw5TVQQaO25CQI3pIIAbSfd4CAI3Mg8CGi/b3QQBDK9dQMQH5wnl0ucLYXgLPLog5XWQ+H8JmXcrOQWJbcquU3J7UruUHKnkruU3K3kHiX3KrlPyf1KHlDyoJKHlDys5BEljyp5TMnjSp5Q8qSSp5Q8reQZJc8qeU7J80peUPKikpeUvKzkFSWvKnlNyetK3lDyppK3lLyt5B0l7yp5T8n7Sj5QskrJh0o+UvKxkk+UfKrkMyWfK/lCyZdKvlLyPyVfK/lGybdofjUFneOtH7Rz0JwJoTIc1PWRic5jRH3lYJGI6ivwbOSHZ/mbD75kkrZbsUS3leHVPuzFKBbAp8ZaCOeLFixfPnXXZXsu2H3JmD1WLNp92coVeDib6s2wTgtwzy5PR1RkwXkGKjP/l4V0yMYfAx3vWnIj3ZWJH/Zq80sdk24JuYmdhBjLv1MYvw853PSEYITohv721r1KIahR6kd5txBsYtakhS1d+h3hhuh7woHhehDfKmAQ/6Aw/piIQfyDNYh/TMAgvpVwEP9AOIh/FDSIbxMwiH9SGH9OxCD+yRrEPydgEN9GOIh/IhzEPwsaxHcJGMS/KIy/JmIQ/2IN4l8TMIjvIhzEvxAO4l8FDeK7BQzi3xTG1YkYxL9Zg3h1Agbx3YSD+DfCQbxa0CC+R8Ag/l1h/CMRg/h3axD/kYBBfA/hIP6dcBD/IWgQfytgEP+pMP6ViEH8pzWI/0rAIP6WcBD/STiI/3I0MKj5w49Q4vX5JkL+/ibkL1HPeikxY7z/ICP1rDfOOnUn/ROir/dfwsHvyu9/Q+R9VCs4ha26KZ9TxM1pmPe4/BdWTepnPaOEfGOIsq9DhH09ivDbR4laiAj9r7UQhdGqk1qI4qxTd1I4TF9vWpj3QqT9TguT95HTxBhqTj00kClx4kSjeHHeTBiQ0wkDUqKCaLqjIJqRCqK0nZThIIhmMg+i2u9Mx0GU824+i/luXvdNloPd/Jgk3M1nE/b1GIG7+WxHC1FOaiGi7aQcBwtRLvOFSPudK2w3T82phwYyJU6cjh8vznsJA3JE4G4+4iiI5qWCKG0n5TkIok2YB1Htd5Mk3s3nM9/N677Jd7CbH5eEu/mmhH09TuBuvqmjhahZaiGi7aRmDhaiAuYLkfa7QNhunpLTRAUByuwgjLd5KgjQdlJzB0GgkHkQ0H4XJvFutIj5blT3TZGD3eiEJNyNtiDs6wkCd6OE/tdaiFqmFiLaTmrpYCFqxXwh0n63ErYbpeQ0UUHgV0e70dapIEDbSa0dBIFi5kFA+12cxLvREua7Ud03JQ52o5OScDfahrCvJwncjRL6X2shaptaiGg7qa2Dhagd84VI+91O2G6UktNEBYHVjnaj7VNBgLaT2jsIAh2YBwHtd4ck3o2WMt+N6r4pdbAbnZyEu9GOhH09WeBulND/WgtRWWohou2kMgcLUSfmC5H2u5Ow3Sglp4kKAn842o12TgUB2k7q7CAIdGEeBLTfXZJ4N9qV+W5U901XB7vRqUm4G+1G2NdTBe5GCf2vtRB1Ty1EtJ3U3cFC1IP5QqT97iFsN0rNqYcGMsYZb91hQp9vJwzIPQkDUqKCaE9HQbRXKojSdlIvB0G0N/Mgqv3uncS7+T7Md/O6b/o42M1PT8LdfF/Cvp4ucDff19FC1C+1ENF2Uj8HC1GU+UKk/Y4K281Tc+qhgYxxxls34U9W+ncQBmRf4G7edxREy1NBlLaTyh0E0QrmQVT7XZHEu/lK5rt53TeVDnbzM5JwN9+fsK9nCNzN93e0EA1ILUS0nTTAwUJUxXwh0n5XCdvNU3KqsekJYiaQfq/xP96a387V+kfQP4POVVKt2h8IY0X/bzX87+3wN3eAvhP0r6BXg/4D9L2g7wN9P+gHQD8I+iHQD4N+BPSjoB8D/TjoJ0A/Cfop0E+Dfgb0s6CfA/086BdAvwj6JdAvg34F9KugXwP9Oug3QL8J+i3Qb4N+B/S7oN8D/T7oD0CvAv0h6I9Afwz6E9Cfgv4M9OegvwD9JeivQP8P9NegvwHdU8kg1a+bob41QfQm+Bvd9//A32ndXMlgdT4ER16P9+ZraNjNQsDZ52FJ6HMsCX0enoQ+j0hCn0cmoc+jktDn0Uno85gk9HlsEvo8Lgl9Hp+EPk9IQp8nJqHPk5LQ582T0OfJSejzlCT0eWoS+jwtCX2eTuwz9f3us1QdV3n0DyO3oPM7KsnvGcR+SxjjMwnHeKIenBbT1VXrwems8Lrz1IPTOOssBkKp650d5v3gVPs9O0zeR1H80AkfnCeXS5ythOBs4dEHK63z4HyOGmtzlcxTsqWSrZRsrWQbJdsqma9kgZKFShahcdkUdI63frDLQWMthMpwMNRHJjqPEfnoILhGM1Qd2cgPz/I3H3zJpG13kW4rw6t92EE8FsCnxloM50tW7LLHkj2WTN1j4fJli8bssWLR7stWrhi5YPlyPBhMI2ZQpAU4aZenI0Ky4DwDlZn/y0I6ZHsRAx1vJJ5NuA0Je7VZpp7R8xxtEwkxli9WGJeEHW4ZQjBCdEN/A8naDmqUOglxHsEWYMnSNcdiwu3EEsKB4XoQbylgEC9VGLdLxCBeag3i7RIwiLckHMRLCQfxdoIG8VYCBvH2CuOyRAzi7a1BvCwBg3grwkG8PeEgXiZoEM8XMIh3UBh3TMQg3sEaxDsmYBDPJxzEOxAO4h0FDeIFAgbxcoVxp0QM4uXWIN4pAYN4AeEgXk44iHcSNIgXChjEKxTGlYkYxCusQbwyAYN4IeEgXkE4iFc6GhjU/OF7t/H6PIeQv50J+UvUQyZKzBjvLuF156mHTHHWqTtplzB9vbsSDn5Xfu8aJu8jp0+tKR/c7RbmPS513+wWpr9NPkvI18Qp+3p3wr6eJfBr4oT+11qI9kgtRLSdtIeDhWhP5guR9ntPxwsRd049NJApceIMh3hxziX0eS+Bu/m9HAXRvVNBlLaT9nYQRPdhHkS13/sk8W5+X+a7ed03+zrYzc9Jwt38foR9PUfgbp7Q/1oL0f6phYi2k/Z3sBAdwHwh0n4fIGw3T82phwYyJU6cBxwvzkWEPh8ocDd/oKMgelAqiNJ20kEOgujBzIOo9vvgJN7NH8J8N6/75hAHu/l5SbibP5Swr+cJ3M0T+l9rITostRDRdtJhDhaiw5kvRNrvw4Xt5ik5TVQQ2NFREDgiFQRoO+kIB0HgSOZBQPt9ZBLvRo9ivhvVfXOUg93oVkm4Gz2asK+3ErgbJfS/1kJ0TGohou2kYxwsRMcyX4i038cK241ScpqoILCToyBwXCoI0HbScQ6CwPHMg4D2+/gk3o2ewHw3qvvmBAe70W2ScDd6ImFfbyNwN0rof62F6KTUQkTbSSc5WIhOZr4Qab9PFrYbpeQ0UUFgpaMgcEoqCNB20ikOgsCpzIOA9vvUJN6NnsZ8N6r75jQHu9H5SbgbPZ2wr+cL3I0S+l9rITojtRDRdtIZDhaiM5kvRNrvM4XtRl1zGm+dmk79onTqehcSLx4u/B7mYNFcJGTR3JpwXP6HcNFcLIQ/wvHtLyLcKFDyl6hNB+H4qbXpOCu16aDtpLMcbDrOZr7p0H6fncRXv+cwv/rVfXOOg4V8+yS8+v0vYV9vL/Dql9D/WgvRuamFiLaTznWwEJ3HfCHSfp8n7OqXmlMPDWSMM966CX/Nx9+G0OfzCQNSooLo+Y6C6AWpIErbSRc4CKIXMg+i2u8Lk3g3fxHz3bzum4sc7OZ3SMLd/MWEfb2DwN08of+1FqJLUgsRbSdd4mAhupT5QqT9vlTYbp6SU41NTxAzgfSbF//x1vwwmtbbgV4GOlfJZer8chgr+HcIt4a/2Qb0tqB3BL0T6JWgC5Rcoc6vxLPWo190rgonpl/jxXm1EJzXEAd0/FuxV8HYuBr0NaD1Tzxeq86vczxWrhfSBzcIwXmjw7FyPYyNG0DfiMbKTer8Zsdj5RYhfXCrEJy3ORwrt8DYuBX0bWis3K7O73A8Vu4U0gd3CcF5t8OxcieMjbtA343Gyj3q/F7HY+U+IX1wv4M+MNTeB5zfD1r/xvQD6vxBx9w/JIT7hx1y/xBw/jDi/hF1/qhj7h8Twv3jDrl/DDh/HHH/hDp/0jH3Twnh/mmH3D8FnD+NuH9GnT/rmPvnhHD/vBCcLwjB+aIQnC8JwfmyEJyvCMH5qhCcrwnB+boQnG8IwfmmEJxvCcH5thCc7wjB+a4QnO8Jwfm+EJwfCMG5SgjOD4Xg/EgIzo8dXEN3hPqugGvnRaCfA/086BdAvwj6WtA3gb4d9D2gHwD9COgnQD8D+iXQL4N+BfSroF8D/TroN0C/Cfot0G+Dfgf0u6DfA/0+6A9ArwL9IeiPQH8MupeST9T5p+F1z8nN/eU58DeXgf4EdHMln6nzz8NerSNM3P+UyU1f0I0lJ3ktuj4X36td7vh7tdH4jhq/h4bp/d4pQQl88eL8knBcEva1L4W/r5KMP84x9n/EMdbVmPma0OeFhImui4TMuW+SjD/Oc+5b5vsaPfZc7Gt2Zr6v0X7HHOxrdhESI74jHJeEfe1L4e/7JOOPc4z9gXmM1TnxLmLs7sxjrPZ7uIMYu4eQGPEj4bgk7GtfCn8/JRl/nGPsz8xjrOoSJzF2b+YxVvs9wkGM3UdIjPiFcFwS9rUvhb9fk4w/zjH2N+YxVj97chFj92ceY7XfIx3E2AOExIjVhOOSsK99Kfz9nmT8cY6xfzCPsVmemxh7MPMYq/0e5SDGHiIkRvxJOC4J+9qXwt9fScYf5xj7N/MYq7+P5SLGHs48xmq/RzuIsUcIiRH/EI5Lwr72pfD3b5LxxznG6s6l4k/XQR1r9DsOXMTYo5nHWO33GAcx9hghMSJEOC4J+9qXwl84yfjjHGPTmMdY/Q49FzH2eOYxVvs91kGMPUFIjEgnHJeEfe1L4S8jyfjjHGMzmcfYiOcmxp7MPMZqv8c5iLGnCIkRWYTjkrCvfSn8ZScZf5xjbA7zGJvnuYmxpzOPsdrv8Q5i7BlCYkQu4bgk7GtfCn+RJOOPc4zNYx5jm3huYuxZzGOs9nuCgxh7tpAY0YRwXBL2tS+Fv/wk449zjG3KPMbqH+txEWPPZR5jtd8THcTY84TEiGaE45Kwr30p/BUkGX+cY2xz5jG2qecmxl7IPMZqvyc5iLEXCYkRhYTjkrCvfSn8FSUZf5xjbAvmMbaZ5ybGXso8xmq/N3cQYy8TEiNaEo5Lwr72pfDXKsn44xxjWzOPsfo3S13E2CuZx1jt92QHMfYqITGimHBcEva1L4W/kiTjj3OMbcM8xur3YLuIsdcyj7Ha7ykOYux1QmJEW8JxSdjXvhT+2iUZf5xjbHvmMbbQcxNjb2QeY7XfUx3E2JuExIgOhOOSsK99KfyVJhl/nGNsR+Yx9ijPTYy9lXmM1X5PcxBjbxMSI8oIxyVhX/tS+OuUZPxxjrGdmcdYHV9nOIg1dzKPsdOVz1s48PsuITGiC+G4JOxrXwp/XZOMP84xthvzGDtY+TrTQazpnsY7xrryu0da8o3xnszHuPb1Kwd9fS/zfYT+/c4vHfh9n5B1sBfhuCTsa/8+5uNGz5dvHIybB5n7rX+L8WsHfj8kZL70JpwvhH3tPyRgvnzvYNw8ytxv/TuK3znw+zEh86UP4Xwh7Gv/MQHz5ScH4+ZJ5n7r38T70YHfTwmZL30J5wthX/tPCZgvvzoYN88y91v/vtkvDvx+Tsh86Uc4Xwj72n9OwHz53cG4eZG53/q3qlY78PslIfMlSjhfCPvaf0nAfNHPZanHzavM/dY5JmUO/H5NyHzxCecLYV/7rvij7ufyNBk4K4TgrBSCsz/zZ1s6nnd1ENfeZB7PdT5LFwd+vyUkng8gjOeEfe2/JSSeVwmJP9VCcA4UgnOQEJybCcE5WAjOIUJwDhWCc5gQnDEhOIcLwTlCCM6RQnCOEoJztIDroB4OrgfeZX4dpHNOuzvw+z0h10FjCK+DCPvaf0/IddBYIfFnnBCc45nHyc9UnOzpIF5MENI/E4XgnCQE5+ZCcE4WgnOKEJxTheCcJgTndCE4txCCc4YQnDMFXFf95SDPZBXz66o/lM9/OvD7QyHXVbMIr6sI+9r/UEB+zb8Oxs0nzP3+W/n8jwO/PxUyX2YTzhfCvvY/FTBfwg6uR79g7rcegCEHfn8pZL7MIZwvhH3tfylgvmQ4GDdfM/c7Tfmc7sDvb4TMl7mE84Wwr/1vBMyXbAfj5nvmfmcqn7Mc+P2DkPkyj3C+EPa1/4OA+RJxMG5+Zu63/o32XAd+/yJkvmxJOF8I+9r/RcB8yXcwblYz91v/3nYTB37/LmS+bEU4Xwj72v9dwHwpcDBu/uL++5HK52YO/P5byHzZmnC+EPa1/7eA+VLkYNx4mbz91r+DW+jA71CmjPmyDeV79uh89kPMx42eL60cjJt05n7r3zRt6cDvDCHzZVvC+ULY136GgPlS4mDcZDP3W/8+ZbEDv3OEzJf5hPOFsK/9HAHzpZ2DcZPH3G/9W4NtHfjdRMh8WUA4Xwj72m8iYL6UOhg3zZj7rX83roMDvwuEzJeFhPOFsK99V/yFiccPfp91vH2xKE2Gz70JfV4sxOc+hD4vEeJzX0KflwrxuR+hz9sJ8TlK6PP2Qnz2CX1eJsTnckKfdxDicwWhzzsK8bmS0OflQnzuT+jzTkJ8HkDo8wohPlcR+rxSiM/VhD7vLMTngYQ+7yLE50GEPu8qxOfNCH3eTYjPgwl93l2Iz0MIfd5DiM9DCX3eU4jPwwh93kuIzzFCn/cW4vNwQp/3EeLzCEKf9xXi80hCn/cT4vMoQp/3F+LzaEKfDxDi8xhCnw8U4vNYQp8PEuLzOEKfDxbi83hCnw8R4vMEQp8PFeLzREKfDxPi8yRCnw8X4vPmhD4fIcTnyYQ+HynE5ymEPh8lxOephD4fLcTnaYQ+HyPE5+mEPh8rxOctCH0+TojPMwh9Pl6IzzMJfT5BiM+zCH0+UYjPswl9PkmIz3MIfT5ZiM9zCX0+RYjP8wh9PlWIz1sS+nyaEJ+3IvT5dCE+b03o8xlCfN6G0Oczhfi8LaHP/xHi83xCn88S4vMCQp/PFuLzQkKfzyH0eR7UEwKf9XfU0pVkKMlUkqUkW0mOklwlESV5SpooyVfSVEkzJQVKmispVFKkpIWSlkpaKWmtpFhJiZI2StoqaaekvZIOSkqVdFRSpqSTks5KuijpqqSbku5KeijpqaSXkt5K+ijpq6Sf5kCJr6Rcc6ukUkl/JQOUVCmpVjJQySAlmykZrGSIkqFKhkEfD1cyQslIJaOUjFYyRslYJeOUjFcyQclEJZOUbK5kspIpSqYqmaZkupItlMxQMlPJLCWzlcxRMlfJPMCiD/19Mf39Kf19Iv39Gv19E/39C/19BJ2fr/PVdf62zmfW+b0631Xnf+p8SJ0fqPPldP6YzqfS+UU630bnn+h8DJ2foJ/X6+fX+nmufr6pn/fp51/6eZB+PqKfF+j75/p+sr6/qu836vtv+n6Uvj+j71fo63d9Pauv7/T1jt7/6/2w3h/q/ZLeP+j1VK8vOt7q+KPnox6f/wf4lPV0CTQFAA==", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "stev", "functionType": "unconstrained", + "isInternal": false, "parameters": [ { "name": "contract_address", diff --git a/yarn-project/noir-contracts/src/artifacts/schnorr_single_key_account_contract.json b/yarn-project/noir-contracts/src/artifacts/schnorr_single_key_account_contract.json index b33ce4a49b01..a2946b77168e 100644 --- a/yarn-project/noir-contracts/src/artifacts/schnorr_single_key_account_contract.json +++ b/yarn-project/noir-contracts/src/artifacts/schnorr_single_key_account_contract.json @@ -4,6 +4,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [], "returnTypes": [], "bytecode": "H4sIAAAAAAAA/9XcR2/iUBiFYcIkmV7Te+/NxjbYUzOZ3ntvhAlML/n/m3AUI0XZ5mTxXskCb6zzCLBv+S7bhUKhWthtbc2j2Dza8/et84595535+72tdb6ev0ZBOY7rlVI9jMLNoJTV0iSIk1o5DdMwSZOtUhpF9TROK1ktqwRZGEf1sJFkUSPYbd17rhUcsB1mzh5Izl5Izj5Izn5IzgFIzkFIziFIzmFIzhFIzlFIzjFIznFIzglIzklIzilIzmlIzhlIzllIzjlIznlIzgVIzkVIziVIzmVIzhVIzlVIzjVIzgCSM4TkLEFyRpCcMSRnAslZhuSsQHKmh5SzuC9ncLAWthnNGcRcNJovQsxHjOZLEHO70XwZYu4wmq9AzJ1G81WIudtovgYx9xjN6xBzr9F8HWLuM5o3IOZ+o/kGxDxgNN+EmAeN5lsQ85DRfBtiHjaa70DMI0bzXYh51Gi+BzGPGc33IeZxo/kBxDxhND+EmCeN5kcQ85TR/Bhinjaan0DMM0bzU4h51mh+BjHPGc3PIeZ5o/kFxLxgNL+EmBeN5lcQ85LR/BpiXjaa30DMK0bzW4h51Wh+BzGvGc3vIebAaP4AMYdG80eIuWQ0f4KYI6P5M8QcG81fIObEaK5CzGWjeRNirhjNNYg5NZq/QsxHjeYtiPmY0VyHmI8bzQ2I+YTR/A1iPmk0f4eYTxnNPyDm00bzT4j5jNH8C2I+azT/hpjPGc1/IObzRvNfiPmC0fwPYu4ymv8bzV35dVr/36a9Mto7or0U2lugcYL6zepHql+lfoaeu3oO6b6s+5R+t/oe63PV9dL8mtoTpT1C2jOjPSTaU6E9Bq2ae9VkbzQP1eyqhlU1napxVM2fauBUE6YaKdUMqYZGNSWqsVDNgdbgtSatNVqtWWoNT2taWuPRmofWADQnrjlizZlqDlFzappj0pxLtXloTK4xqsZsGsOoT68+rvp86gOpT6BnpJ4ZuofqnqLfmL5z+gx2AG+NEYEgTwAA", @@ -12,6 +13,7 @@ { "name": "entrypoint", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "payload", @@ -93,7 +95,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/artifacts/test_contract.json b/yarn-project/noir-contracts/src/artifacts/test_contract.json index 1c5569952dbc..aec0b0794f99 100644 --- a/yarn-project/noir-contracts/src/artifacts/test_contract.json +++ b/yarn-project/noir-contracts/src/artifacts/test_contract.json @@ -4,6 +4,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [], "returnTypes": [], "bytecode": "H4sIAAAAAAAA/9XbRW/jUBiF4TTTdpjLzAx2bCf2YKfDzExpps4w/f9Nc9REqrrtyeK9kmV7E50nSuwL3/1fKBSqhd3W0TiKjaOzed2679p339283tta9xvNcxSU4zivlPIwCreCUlZLkyBOauU0TMMkTbZLaRTlaZxWslpWCbIwjvKwnmRRPdhtPXs+Kzhga2fOXkjOPkjOfkjOAUjOQUjOIUjOYUjOEUjOUUjOMUjOcUjOCUjOSUjOKUjOaUjOGUjOWUjOOUjOeUjOBUjORUjOJUjOZUjOFUjOVUjONUjOdUjOAJIzhOQsQXJGkJwxJGcCyVmG5KxAcqZtylnclzM4WAs7jOYMYi4azRcg5kNG80WIudNovgQxdxnNlyHmbqP5CsTcYzRfhZh7jeYNiLnPaL4GMfcbzZsQ84DRfB1iHjSab0DMQ0bzTYh52Gi+BTGPGM23IeZRo/kOxDxmNN+FmMeN5nsQ84TRfB9injSaH0DMU0bzQ4h52mh+BDHPGM2PIeZZo/kJxDxnND+FmOeN5mcQ84LR/BxiXjSaX0DMS0bzS4h52Wh+BTGvGM2vIeZVo/kNxLxmNL+FmNeN5ncQc2A0v4eYQ6P5A8RcMpo/QsyR0fwJYo6N5s8Qc2I0VyHmstG8BTFXjOYaxJwazV8g5sNG8zbEfMRoziHmo0ZzHWI+ZjR/hZiPG83fIOYTRvN3iPmk0fwDYj5lNP+EmE8bzb8g5jNG82+I+azR/AdiPmc0/4WYzxvN/9pgTptn7WPSvh7tc9G+D+2D0L6AVp286qg3G4fqbFV3qjpM1SWqTk91a6rjUl2T6nxU96I6ENVFqE5A6+ZaR9a6qtYZte6mdSity2idQvP2msfWvK7mOTXvp3kwzQtpnqTaODSO1rhS4yyNO9QPV79U/TT1W/Qe13tNz3k99/Qc0P9CvxN9bzsboWaB1E4AAA==", @@ -12,6 +13,7 @@ { "name": "createL2ToL1MessagePublic", "functionType": "open", + "isInternal": false, "parameters": [ { "name": "amount", @@ -35,6 +37,7 @@ { "name": "createNullifierPublic", "functionType": "open", + "isInternal": false, "parameters": [ { "name": "amount", @@ -62,6 +65,7 @@ { "name": "getPublicKey", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "address", diff --git a/yarn-project/noir-contracts/src/artifacts/uniswap_contract.json b/yarn-project/noir-contracts/src/artifacts/uniswap_contract.json index 7a2ce1463020..fb1adb4ed770 100644 --- a/yarn-project/noir-contracts/src/artifacts/uniswap_contract.json +++ b/yarn-project/noir-contracts/src/artifacts/uniswap_contract.json @@ -4,6 +4,7 @@ { "name": "_compute_swap_content_hash", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "inAmount", @@ -76,6 +77,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [], "returnTypes": [], "bytecode": "H4sIAAAAAAAA/9XbRW/jUBiF4TTTdpjLzAx2bCf2YKfDzExpps4w/f9Nc9REqrrtyeK9kmV7E50nSuwL3/1fKBSqhd3W0TiKjaOzed2679p339283tta9xvNcxSU4zivlPIwCreCUlZLkyBOauU0TMMkTbZLaRTlaZxWslpWCbIwjvKwnmRRPdhtPXs+Kzhga2fOXkjOPkjOfkjOAUjOQUjOIUjOYUjOEUjOUUjOMUjOcUjOCUjOSUjOKUjOaUjOGUjOWUjOOUjOeUjOBUjORUjOJUjOZUjOFUjOVUjONUjOdUjOAJIzhOQsQXJGkJwxJGcCyVmG5KxAcqZtylnclzM4WAs7jOYMYi4azRcg5kNG80WIudNovgQxdxnNlyHmbqP5CsTcYzRfhZh7jeYNiLnPaL4GMfcbzZsQ84DRfB1iHjSab0DMQ0bzTYh52Gi+BTGPGM23IeZRo/kOxDxmNN+FmMeN5nsQ84TRfB9injSaH0DMU0bzQ4h52mh+BDHPGM2PIeZZo/kJxDxnND+FmOeN5mcQ84LR/BxiXjSaX0DMS0bzS4h52Wh+BTGvGM2vIeZVo/kNxLxmNL+FmNeN5ncQc2A0v4eYQ6P5A8RcMpo/QsyR0fwJYo6N5s8Qc2I0VyHmstG8BTFXjOYaxJwazV8g5sNG8zbEfMRoziHmo0ZzHWI+ZjR/hZiPG83fIOYTRvN3iPmk0fwDYj5lNP+EmE8bzb8g5jNG82+I+azR/AdiPmc0/4WYzxvN/9pgTptn7WPSvh7tc9G+D+2D0L6AVp286qg3G4fqbFV3qjpM1SWqTk91a6rjUl2T6nxU96I6ENVFqE5A6+ZaR9a6qtYZte6mdSity2idQvP2msfWvK7mOTXvp3kwzQtpnqTaODSO1rhS4yyNO9QPV79U/TT1W/Qe13tNz3k99/Qc0P9CvxN9bzsboWaB1E4AAA==", @@ -84,6 +86,7 @@ { "name": "swap", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "withdrawFnSelector", @@ -192,7 +195,7 @@ } ], "returnTypes": [], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/artifacts/zk_token_contract.json b/yarn-project/noir-contracts/src/artifacts/zk_token_contract.json index 081072113725..cb0ec5e9dad6 100644 --- a/yarn-project/noir-contracts/src/artifacts/zk_token_contract.json +++ b/yarn-project/noir-contracts/src/artifacts/zk_token_contract.json @@ -4,6 +4,7 @@ { "name": "claim", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", @@ -34,6 +35,7 @@ { "name": "constructor", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "initial_supply", @@ -57,6 +59,7 @@ { "name": "createClaims", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amounts", @@ -95,6 +98,7 @@ { "name": "getBalance", "functionType": "unconstrained", + "isInternal": false, "parameters": [ { "name": "owner", @@ -115,6 +119,7 @@ { "name": "mint", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", @@ -138,6 +143,7 @@ { "name": "stev", "functionType": "unconstrained", + "isInternal": false, "parameters": [ { "name": "contract_address", @@ -181,12 +187,13 @@ } } ], - "bytecode": "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", + "bytecode": "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", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { "name": "transfer", "functionType": "secret", + "isInternal": false, "parameters": [ { "name": "amount", diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/Nargo.toml b/yarn-project/noir-contracts/src/contracts/lending_contract/Nargo.toml new file mode 100644 index 000000000000..2af281619636 --- /dev/null +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/Nargo.toml @@ -0,0 +1,6 @@ +[package] +authors = [""] +compiler_version = "0.1" + +[dependencies] +aztec = { path = "../../../../noir-libs/noir-aztec" } diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr new file mode 100644 index 000000000000..45330fc228d7 --- /dev/null +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/main.nr @@ -0,0 +1,313 @@ +mod storage; + +contract Lending { + use dep::aztec::{ + abi, + abi::PrivateContextInputs, + abi::PublicContextInputs + }; + use dep::aztec::context::Context; + use dep::aztec::oracle::{ + logs::emit_unencrypted_log, + create_nullifier::create_nullifier, + }; + use dep::aztec::public_call_stack_item::{ + call_public_function, + call_public_function_no_args, + PublicCallStackItem + }; + use crate::storage::{Storage, Tot, Account}; + + // Constructs the contract. + fn constructor( + inputs: PrivateContextInputs + ) -> distinct pub abi::PrivateCircuitPublicInputs { + // Return private circuit public inputs. All private functions need to return this as it is part of the input of the private kernel. + Context::new(inputs, 0).finish() + } + + open fn init( + inputs: PublicContextInputs + ) -> pub Field { + let storage = Storage::init(); + + let asset = storage.assets.at(0); + + let tot = asset.read(); + + assert (tot.last_updated_ts == 0); + assert (tot.interest_accumulator == 0); + + asset.write(Tot { + interest_accumulator: 1000000000, + last_updated_ts: inputs.public_global_variables.timestamp as u120, + }); + + 1 + } + + // Create a position. + + open fn update_tot( + inputs: PublicContextInputs + ) -> pub Field { + let storage = Storage::init(); + + let asset = storage.assets.at(0); + let mut tot = asset.read(); + + let dt: u120 = inputs.public_global_variables.timestamp as u120 - tot.last_updated_ts; + + // Need proper interest computation here. + // Assume constant rate because too few reads :cry: + let rate: u120 = 100000; + // Just need something that increases, but :cry: + let multiplier: u120 = 1000000000 + dt * rate; + let divisor: u120 = 1000000000; + + tot.interest_accumulator = (tot.interest_accumulator * multiplier) / divisor; + tot.last_updated_ts = inputs.public_global_variables.timestamp as u120; + + asset.write(tot); + + 1 + } + + // This don't need to be on behalf of self. We should be able to repay on behalf of someone else. + fn deposit_private( + inputs: PrivateContextInputs, + secret: Field, + owner: Field, + amount: Field + ) -> distinct pub abi::PrivateCircuitPublicInputs { + let mut initialContext = Context::new(inputs, abi::hash_args([ + secret, + owner, + amount + ])); + + assert (!((secret == 0) as bool & (owner == 0) as bool)); + let mut account = owner; + let me = inputs.call_context.msg_sender; + + if (secret != 0) { + account = Account::new(me, secret).key(); + } + + // Unshield tokens into this contract. + + // _deposit(account, amount) + let (_callStackItem, mut context) = PublicCallStackItem::call( + inputs.call_context.storage_contract_address, + 3009041984, + [account, amount], + initialContext + ); + + context.finish() + } + + open fn deposit_public( + inputs: PublicContextInputs, + owner: Field, + amount: Field + ) -> Field { + // @todo @LHerskind Transfer tokens into this contract. We can't do it now because too few writes. + + call_public_function(inputs.call_context.storage_contract_address, 3009041984, [owner, amount])[0] + } + + open internal fn _deposit( + inputs: PublicContextInputs, + owner: Field, + amount: Field + ) -> Field { + let _void = call_public_function_no_args(inputs.call_context.storage_contract_address, 1259373467)[0]; + + let storage = Storage::init(); + + let coll_loc = storage.collateral.at(owner); + let collateral = coll_loc.read(); + + coll_loc.write(collateral + amount); + 1 + } + + fn withdraw_private( + inputs: PrivateContextInputs, + secret: Field, + amount: Field + ) -> distinct pub abi::PrivateCircuitPublicInputs { + let mut initialContext = Context::new(inputs, abi::hash_args([ + secret, + amount + ])); + + let me = inputs.call_context.msg_sender; + let account = Account::new(me, secret).key(); + let (_callStackItem, mut context) = PublicCallStackItem::call( + inputs.call_context.storage_contract_address, + 1065861440, + [account, amount], + initialContext + ); + + context.finish() + } + + + open fn withdraw_public( + inputs: PublicContextInputs, + amount: Field + ) -> Field { + // @todo @LHerskind Transfer tokens into this contract. We can't do it now because too few writes. + + call_public_function(inputs.call_context.storage_contract_address, 1065861440, [inputs.call_context.msg_sender, amount])[0] + } + + open internal fn _withdraw( + inputs: PublicContextInputs, + owner: Field, + // recipient: Field, + amount: Field + ) -> Field { + // Access control. + let _void = call_public_function_no_args(inputs.call_context.storage_contract_address, 1259373467)[0]; + + let storage = Storage::init(); + + let coll_loc = storage.collateral.at(owner); + let collateral: Field = coll_loc.read(); + + let debt_loc = storage.static_debt.at(owner); + let static_debt: Field = debt_loc.read(); + + assert (collateral as u120 >= amount as u120); + assert (collateral as u120 - amount as u120 >= static_debt as u120); + + coll_loc.write(collateral - amount); + + // Transfer tokens to recipient (could be with shielding or without, for now, can't to either). + 1 + } + + fn borrow_private( + inputs: PrivateContextInputs, + secret: Field, + amount: Field + ) -> distinct pub abi::PrivateCircuitPublicInputs { + let mut initialContext = Context::new(inputs, abi::hash_args([ + secret, + amount + ])); + + let me = inputs.call_context.msg_sender; + let account = Account::new(me, secret).key(); + + let (_callStackItem, mut context) = PublicCallStackItem::call( + inputs.call_context.storage_contract_address, + 1462609836, + [account, amount], + initialContext + ); + + context.finish() + } + + open fn borrow_public( + inputs: PublicContextInputs, + amount: Field + ) -> Field { + call_public_function(inputs.call_context.storage_contract_address, 1462609836, [inputs.call_context.msg_sender, amount])[0] + } + + open internal fn _borrow( + inputs: PublicContextInputs, + owner: Field, + amount: Field + ) -> Field { + // Access control. + let _void = call_public_function_no_args(inputs.call_context.storage_contract_address, 1259373467)[0]; + + let storage = Storage::init(); + + let coll_loc = storage.collateral.at(owner); + let collateral: Field = coll_loc.read(); + + let debt_loc = storage.static_debt.at(owner); + let static_debt: Field = debt_loc.read(); + + assert (static_debt as u120 + amount as u120 < collateral as u120); + + debt_loc.write(static_debt + amount); + + // @todo @LHerskind Transferring funds to the recipient. + + 1 + } + + // This don't need to be on behalf of self. We should be able to repay on behalf of someone else. + fn repay_private( + inputs: PrivateContextInputs, + secret: Field, + owner: Field, + amount: Field + ) -> distinct pub abi::PrivateCircuitPublicInputs { + let mut initialContext = Context::new(inputs, abi::hash_args([ + secret, + owner, + amount + ])); + + assert (!((secret == 0) as bool & (owner == 0) as bool)); + let mut account = owner; + let me = inputs.call_context.msg_sender; + + if (secret != 0) { + account = Account::new(me, secret).key(); + } + + // @todo @lherskind Transfer tokens from me to this contract. + + let (_callStackItem, mut context) = PublicCallStackItem::call( + inputs.call_context.storage_contract_address, + 3985016136, + [account, amount], + initialContext + ); + + context.finish() + } + + open fn repay_public( + inputs: PublicContextInputs, + owner: Field, + amount: Field + ) -> Field { + // @todo @LHerskind Transfer tokens from msg.sender to this contract. + call_public_function(inputs.call_context.storage_contract_address, 3985016136, [owner, amount])[0] + } + + open internal fn _repay( + inputs: PublicContextInputs, + owner: Field, + amount: Field + ) -> Field { + let _void = call_public_function_no_args(inputs.call_context.storage_contract_address, 1259373467)[0]; + + let storage = Storage::init(); + // Should constrain access from private. + // should only be callable from self from private. + + let debt_loc = storage.static_debt.at(owner); + + // @todo @LHerskind using "as" after using maps key => field have issues. + // Need to be explicitly specified as field first. + let static_debt: Field = debt_loc.read(); + + assert (static_debt as u120 >= amount as u120); + + debt_loc.write(static_debt - amount); + 1 + } +} diff --git a/yarn-project/noir-contracts/src/contracts/lending_contract/src/storage.nr b/yarn-project/noir-contracts/src/contracts/lending_contract/src/storage.nr new file mode 100644 index 000000000000..b72b1a10eb3f --- /dev/null +++ b/yarn-project/noir-contracts/src/contracts/lending_contract/src/storage.nr @@ -0,0 +1,101 @@ +use dep::aztec::state_vars::map::Map; +use dep::aztec::state_vars::public_state::PublicState; +use dep::aztec::state_vars::public_state_value::PublicStateValueInterface; +use dep::aztec::state_vars::public_state_value::field_value::FieldValueInterface; +use dep::std::hash::pedersen; + +// Utility struct used to easily get a "id" for a private user that sits in the same +// "space" as the public users. +// It help us to have a single mapping for collateral that have both public and private users. +struct Account { + address: Field, + secret: Field, +} + +impl Account { + fn new( + address: Field, + secret: Field + ) -> Self { + Self { + address, + secret + } + } + + fn key(self: Self) -> Field { + pedersen([self.address, self.secret])[0] + } +} + + +global TOT_SIZE: Field = 2; + +// Struct to be used to represent "totals". Generally, there should be one per asset. +// It stores the global values that are shared among all users, such as an accumulator +// and last time it was updated. +// In practice, it should also point to an oracle and have more fields related to +// loan to value ratios and other things, but we did not have enough reads/writes for this. +struct Tot { + interest_accumulator: u120, + last_updated_ts: u120, +} + +fn deserialiseTot(fields: [Field; TOT_SIZE]) -> Tot { + Tot { + interest_accumulator: fields[0] as u120, + last_updated_ts: fields[1] as u120, + } +} + +fn serialiseTot(tot: Tot) -> [Field; TOT_SIZE] { + [tot.interest_accumulator as Field, tot.last_updated_ts as Field] +} + +global TotInterface = PublicStateValueInterface { + deserialise: deserialiseTot, + serialise: serialiseTot, +}; + + +// Struct to be used to represent positions when we have more reads. +global POS_SIZE: Field = 2; + +struct Pos { + owner: Field, + value: Field, +} + +fn deserialisePos(fields: [Field; POS_SIZE]) -> Pos { + Pos { + owner: fields[0], + value: fields[1], + } +} + +fn serialisePos(pos: Pos) -> [Field; POS_SIZE] { + [pos.owner, pos.value] +} + +global PosInterface = PublicStateValueInterface { + deserialise: deserialisePos, + serialise: serialisePos, +}; + + +// Storage structure, containing all storage, and specifying what slots they use. +struct Storage { + assets: Map>, + collateral: Map>, + static_debt: Map>, // abusing keys very heavily +} + +impl Storage { + fn init() -> Self { + Storage { + assets: Map::new(1, |s| PublicState::new(s, TotInterface)), // uses 2 storage slots. + collateral: Map::new(2, |s| PublicState::new(s, FieldValueInterface)), // uses 1 storage slots. + static_debt: Map::new(3, |s| PublicState::new(s, FieldValueInterface)), // uses 1 storage slots. + } + } +} \ No newline at end of file diff --git a/yarn-project/noir-contracts/src/index.ts b/yarn-project/noir-contracts/src/index.ts deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/yarn-project/noir-contracts/src/scripts/copy_output.ts b/yarn-project/noir-contracts/src/scripts/copy_output.ts index b6ec9c8f1a2d..14f7cdc6a915 100644 --- a/yarn-project/noir-contracts/src/scripts/copy_output.ts +++ b/yarn-project/noir-contracts/src/scripts/copy_output.ts @@ -50,12 +50,13 @@ function getFunction(type: FunctionType, params: ABIParameter[], returns: ABITyp // If the function is not unconstrained, the first item is inputs or CallContext which we should omit if (type !== FunctionType.UNCONSTRAINED) params = params.slice(1); // If the function is not secret, drop any padding from the end - if (type !== FunctionType.SECRET && params[params.length - 1].name.endsWith('padding')) + if (type !== FunctionType.SECRET && params.length > 0 && params[params.length - 1].name.endsWith('padding')) params = params.slice(0, params.length - 1); return { name: fn.name, functionType: type, + isInternal: fn.is_internal, parameters: params, // If the function is secret, the return is the public inputs, which should be omitted returnTypes: type === FunctionType.SECRET ? [] : returns, diff --git a/yarn-project/noir-contracts/src/types/index.ts b/yarn-project/noir-contracts/src/types/index.ts index 103b9e57749f..d57653e759cd 100644 --- a/yarn-project/noir-contracts/src/types/index.ts +++ b/yarn-project/noir-contracts/src/types/index.ts @@ -10,3 +10,4 @@ export * from './schnorr_single_key_account.js'; export * from './test.js'; export * from './uniswap.js'; export * from './zk_token.js'; +export * from './lending.js'; diff --git a/yarn-project/noir-contracts/src/types/lending.ts b/yarn-project/noir-contracts/src/types/lending.ts new file mode 100644 index 000000000000..3bcfd3d652c8 --- /dev/null +++ b/yarn-project/noir-contracts/src/types/lending.ts @@ -0,0 +1,140 @@ +/* Autogenerated file, do not edit! */ + +/* eslint-disable */ +import { + AztecAddress, + Contract, + ContractFunctionInteraction, + ContractMethod, + DeployMethod, + Wallet, +} from '@aztec/aztec.js'; +import { ContractAbi } from '@aztec/foundation/abi'; +import { Fr, Point } from '@aztec/foundation/fields'; +import { AztecRPC, PublicKey } from '@aztec/types'; + +import { LendingContractAbi } from '../artifacts/index.js'; + +/** + * Type-safe interface for contract Lending; + */ +export class LendingContract extends Contract { + constructor( + /** The deployed contract's address. */ + address: AztecAddress, + /** The wallet. */ + wallet: Wallet, + ) { + super(address, LendingContractAbi, wallet); + } + + /** + * Creates a tx to deploy a new instance of this contract. + */ + public static deploy(rpc: AztecRPC) { + return new DeployMethod(Point.ZERO, rpc, LendingContractAbi, Array.from(arguments).slice(1)); + } + + /** + * Creates a tx to deploy a new instance of this contract using the specified public key to derive the address. + */ + public static deployWithPublicKey(rpc: AztecRPC, publicKey: PublicKey) { + return new DeployMethod(publicKey, rpc, LendingContractAbi, Array.from(arguments).slice(2)); + } + + /** + * Returns this contract's ABI. + */ + public static get abi(): ContractAbi { + return LendingContractAbi; + } + + /** Type-safe wrappers for the public methods exposed by the contract. */ + public methods!: { + /** _borrow(owner: field, amount: field) */ + _borrow: (( + owner: Fr | bigint | number | { toField: () => Fr }, + amount: Fr | bigint | number | { toField: () => Fr }, + ) => ContractFunctionInteraction) & + Pick; + + /** _deposit(owner: field, amount: field) */ + _deposit: (( + owner: Fr | bigint | number | { toField: () => Fr }, + amount: Fr | bigint | number | { toField: () => Fr }, + ) => ContractFunctionInteraction) & + Pick; + + /** _repay(owner: field, amount: field) */ + _repay: (( + owner: Fr | bigint | number | { toField: () => Fr }, + amount: Fr | bigint | number | { toField: () => Fr }, + ) => ContractFunctionInteraction) & + Pick; + + /** _withdraw(owner: field, amount: field) */ + _withdraw: (( + owner: Fr | bigint | number | { toField: () => Fr }, + amount: Fr | bigint | number | { toField: () => Fr }, + ) => ContractFunctionInteraction) & + Pick; + + /** borrow_private(secret: field, amount: field) */ + borrow_private: (( + secret: Fr | bigint | number | { toField: () => Fr }, + amount: Fr | bigint | number | { toField: () => Fr }, + ) => ContractFunctionInteraction) & + Pick; + + /** borrow_public(amount: field) */ + borrow_public: ((amount: Fr | bigint | number | { toField: () => Fr }) => ContractFunctionInteraction) & + Pick; + + /** deposit_private(secret: field, owner: field, amount: field) */ + deposit_private: (( + secret: Fr | bigint | number | { toField: () => Fr }, + owner: Fr | bigint | number | { toField: () => Fr }, + amount: Fr | bigint | number | { toField: () => Fr }, + ) => ContractFunctionInteraction) & + Pick; + + /** deposit_public(owner: field, amount: field) */ + deposit_public: (( + owner: Fr | bigint | number | { toField: () => Fr }, + amount: Fr | bigint | number | { toField: () => Fr }, + ) => ContractFunctionInteraction) & + Pick; + + /** init() */ + init: (() => ContractFunctionInteraction) & Pick; + + /** repay_private(secret: field, owner: field, amount: field) */ + repay_private: (( + secret: Fr | bigint | number | { toField: () => Fr }, + owner: Fr | bigint | number | { toField: () => Fr }, + amount: Fr | bigint | number | { toField: () => Fr }, + ) => ContractFunctionInteraction) & + Pick; + + /** repay_public(owner: field, amount: field) */ + repay_public: (( + owner: Fr | bigint | number | { toField: () => Fr }, + amount: Fr | bigint | number | { toField: () => Fr }, + ) => ContractFunctionInteraction) & + Pick; + + /** update_tot() */ + update_tot: (() => ContractFunctionInteraction) & Pick; + + /** withdraw_private(secret: field, amount: field) */ + withdraw_private: (( + secret: Fr | bigint | number | { toField: () => Fr }, + amount: Fr | bigint | number | { toField: () => Fr }, + ) => ContractFunctionInteraction) & + Pick; + + /** withdraw_public(amount: field) */ + withdraw_public: ((amount: Fr | bigint | number | { toField: () => Fr }) => ContractFunctionInteraction) & + Pick; + }; +} diff --git a/yarn-project/noir-libs/noir-aztec/src/abi.nr b/yarn-project/noir-libs/noir-aztec/src/abi.nr index eb9bfe72b586..f4b835061357 100644 --- a/yarn-project/noir-libs/noir-aztec/src/abi.nr +++ b/yarn-project/noir-libs/noir-aztec/src/abi.nr @@ -147,6 +147,7 @@ impl PublicGlobalVariables { struct FunctionData { function_selector: Field, + is_internal: bool, is_private: bool, is_constructor: bool, } @@ -155,6 +156,7 @@ impl FunctionData { fn hash(self) -> Field { dep::std::hash::pedersen_with_separator([ self.function_selector, + self.is_internal as Field, self.is_private as Field, self.is_constructor as Field, ], GENERATOR_INDEX__FUNCTION_DATA)[0] diff --git a/yarn-project/noir-libs/noir-aztec/src/constants_gen.nr b/yarn-project/noir-libs/noir-aztec/src/constants_gen.nr index 6071c8ecd00c..89a8f3e36b20 100644 --- a/yarn-project/noir-libs/noir-aztec/src/constants_gen.nr +++ b/yarn-project/noir-libs/noir-aztec/src/constants_gen.nr @@ -54,7 +54,7 @@ global MAX_NOTES_PER_PAGE: comptime Field = 10; global VIEW_NOTE_ORACLE_RETURN_LENGTH: comptime Field = 212; global CALL_CONTEXT_LENGTH: comptime Field = 6; global COMMITMENT_TREES_ROOTS_LENGTH: comptime Field = 5; -global FUNCTION_DATA_LENGTH: comptime Field = 3; +global FUNCTION_DATA_LENGTH: comptime Field = 4; global CONTRACT_DEPLOYMENT_DATA_LENGTH: comptime Field = 6; global PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH: comptime Field = 56; global CONTRACT_STORAGE_UPDATE_REQUEST_LENGTH: comptime Field = 3; @@ -62,7 +62,7 @@ global CONTRACT_STORAGE_READ_LENGTH: comptime Field = 2; global PUBLIC_CIRCUIT_PUBLIC_INPUTS_LENGTH: comptime Field = 55; global GET_NOTES_ORACLE_RETURN_LENGTH: comptime Field = 86; global EMPTY_NULLIFIED_COMMITMENT: comptime Field = 1000000; -global CALL_PRIVATE_FUNCTION_RETURN_SIZE: comptime Field = 61; +global CALL_PRIVATE_FUNCTION_RETURN_SIZE: comptime Field = 62; global PUBLIC_CIRCUIT_PUBLIC_INPUTS_HASH_INPUT_LENGTH: comptime Field = 33; global GENERATOR_INDEX__COMMITMENT = 1; global GENERATOR_INDEX__COMMITMENT_NONCE = 2; diff --git a/yarn-project/noir-libs/noir-aztec/src/oracle/enqueue_public_function_call.nr b/yarn-project/noir-libs/noir-aztec/src/oracle/enqueue_public_function_call.nr index 1cf2b67d1eeb..0c2a216a3772 100644 --- a/yarn-project/noir-libs/noir-aztec/src/oracle/enqueue_public_function_call.nr +++ b/yarn-project/noir-libs/noir-aztec/src/oracle/enqueue_public_function_call.nr @@ -3,8 +3,8 @@ // args_hash + // crate::abi::FUNCTION_DATA_SIZE + // crate::abi::CALL_CONTEXT_SIZE + -// = 2 + 3 + 6 -global ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE: comptime Field = 11; +// = 2 + 4 + 6 +global ENQUEUE_PUBLIC_FUNCTION_CALL_RETURN_SIZE: comptime Field = 12; #[oracle(enqueuePublicFunctionCall)] fn enqueue_public_function_call_oracle( diff --git a/yarn-project/noir-libs/noir-aztec/src/private_call_stack_item.nr b/yarn-project/noir-libs/noir-aztec/src/private_call_stack_item.nr index 6cc8f72958f3..14879cc9264d 100644 --- a/yarn-project/noir-libs/noir-aztec/src/private_call_stack_item.nr +++ b/yarn-project/noir-libs/noir-aztec/src/private_call_stack_item.nr @@ -8,28 +8,11 @@ use crate::types::vec::BoundedVec; use crate::types::point::Point; use crate::utils::arr_copy_slice; use crate::constants_gen; -use crate::constants_gen::GENERATOR_INDEX__FUNCTION_DATA; -use crate::constants_gen::GENERATOR_INDEX__CALL_STACK_ITEM; +use crate::abi::FunctionData; use crate::oracle::call_private_function::call_private_function_internal; use crate::oracle::arguments; -struct FunctionData { - function_selector: Field, - is_private: bool, - is_constructor: bool, -} - -impl FunctionData { - fn hash(self) -> Field { - dep::std::hash::pedersen_with_separator([ - self.function_selector, - self.is_private as Field, - self.is_constructor as Field, - ], GENERATOR_INDEX__FUNCTION_DATA)[0] - } -} - struct PrivateCallStackItem { contract_address: Field, function_data: FunctionData, @@ -58,52 +41,53 @@ impl PrivateCallStackItem { contract_address: fields[0], function_data: FunctionData { function_selector: fields[1], - is_private: fields[2] as bool, - is_constructor: fields[3] as bool, + is_internal: fields[2] as bool, + is_private: fields[3] as bool, + is_constructor: fields[4] as bool, }, public_inputs: PrivateCircuitPublicInputs { call_context: CallContext { - msg_sender : fields[4], - storage_contract_address : fields[5], - portal_contract_address : fields[6], + msg_sender : fields[5], + storage_contract_address : fields[6], + portal_contract_address : fields[7], - is_delegate_call : fields[7] as bool, - is_static_call : fields[8] as bool, - is_contract_deployment: fields[9] as bool, + is_delegate_call : fields[8] as bool, + is_static_call : fields[9] as bool, + is_contract_deployment: fields[10] as bool, }, // TODO handle the offsets as a variable incremented during extraction? - args_hash: fields[10], - return_values: arr_copy_slice(fields, [0; constants_gen::RETURN_VALUES_LENGTH], 11), - read_requests: arr_copy_slice(fields, [0; constants_gen::MAX_READ_REQUESTS_PER_CALL], 15), - new_commitments: arr_copy_slice(fields, [0; constants_gen::MAX_NEW_COMMITMENTS_PER_CALL], 19), - new_nullifiers: arr_copy_slice(fields, [0; constants_gen::MAX_NEW_NULLIFIERS_PER_CALL], 23), - nullified_commitments: arr_copy_slice(fields, [0; constants_gen::MAX_NEW_NULLIFIERS_PER_CALL], 27), - private_call_stack: arr_copy_slice(fields, [0; constants_gen::MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL], 31), - public_call_stack: arr_copy_slice(fields, [0; constants_gen::MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL], 35), - new_l2_to_l1_msgs: arr_copy_slice(fields, [0; constants_gen::MAX_NEW_L2_TO_L1_MSGS_PER_CALL], 39), - encrypted_logs_hash: arr_copy_slice(fields, [0; constants_gen::NUM_FIELDS_PER_SHA256], 41), - unencrypted_logs_hash: arr_copy_slice(fields, [0; constants_gen::NUM_FIELDS_PER_SHA256], 43), - encrypted_log_preimages_length: fields[45], - unencrypted_log_preimages_length: fields[46], + args_hash: fields[11], + return_values: arr_copy_slice(fields, [0; constants_gen::RETURN_VALUES_LENGTH], 12), + read_requests: arr_copy_slice(fields, [0; constants_gen::MAX_READ_REQUESTS_PER_CALL], 16), + new_commitments: arr_copy_slice(fields, [0; constants_gen::MAX_NEW_COMMITMENTS_PER_CALL], 20), + new_nullifiers: arr_copy_slice(fields, [0; constants_gen::MAX_NEW_NULLIFIERS_PER_CALL], 24), + nullified_commitments: arr_copy_slice(fields, [0; constants_gen::MAX_NEW_NULLIFIERS_PER_CALL], 28), + private_call_stack: arr_copy_slice(fields, [0; constants_gen::MAX_PRIVATE_CALL_STACK_LENGTH_PER_CALL], 32), + public_call_stack: arr_copy_slice(fields, [0; constants_gen::MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL], 36), + new_l2_to_l1_msgs: arr_copy_slice(fields, [0; constants_gen::MAX_NEW_L2_TO_L1_MSGS_PER_CALL], 40), + encrypted_logs_hash: arr_copy_slice(fields, [0; constants_gen::NUM_FIELDS_PER_SHA256], 42), + unencrypted_logs_hash: arr_copy_slice(fields, [0; constants_gen::NUM_FIELDS_PER_SHA256], 44), + encrypted_log_preimages_length: fields[46], + unencrypted_log_preimages_length: fields[47], commitment_trees_roots: CommitmentTreesRoots { // Must match order in `private_circuit_public_inputs.hpp` - private_data_tree_root : fields[47], - nullifier_tree_root : fields[48], - contract_tree_root : fields[49], - l1_to_l2_messages_tree_root : fields[50], - blocks_tree_root : fields[51], + private_data_tree_root : fields[48], + nullifier_tree_root : fields[49], + contract_tree_root : fields[50], + l1_to_l2_messages_tree_root : fields[51], + blocks_tree_root : fields[52], }, contract_deployment_data: ContractDeploymentData { - deployer_public_key: Point::new(fields[52], fields[53]), - constructor_vk_hash : fields[54], - function_tree_root : fields[55], - contract_address_salt : fields[56], - portal_contract_address : fields[57], + deployer_public_key: Point::new(fields[53], fields[54]), + constructor_vk_hash : fields[55], + function_tree_root : fields[56], + contract_address_salt : fields[57], + portal_contract_address : fields[58], }, - chain_id: fields[58], - version: fields[59], + chain_id: fields[59], + version: fields[60], }, - is_execution_request: fields[60] as bool, + is_execution_request: fields[61] as bool, }; assert(contract_address == item.contract_address); assert(function_selector == item.function_data.function_selector); @@ -132,6 +116,6 @@ impl PrivateCallStackItem { self.contract_address, self.function_data.hash(), self.public_inputs.hash(), - ], GENERATOR_INDEX__CALL_STACK_ITEM)[0] + ], constants_gen::GENERATOR_INDEX__CALL_STACK_ITEM)[0] } } \ No newline at end of file diff --git a/yarn-project/noir-libs/noir-aztec/src/public_call_stack_item.nr b/yarn-project/noir-libs/noir-aztec/src/public_call_stack_item.nr index e0faf3d4f880..d87ecec64edb 100644 --- a/yarn-project/noir-libs/noir-aztec/src/public_call_stack_item.nr +++ b/yarn-project/noir-libs/noir-aztec/src/public_call_stack_item.nr @@ -51,20 +51,21 @@ impl PublicCallStackItem { contract_address: fields[0], function_data: FunctionData { function_selector: fields[1], - is_private: fields[2] as bool, - is_constructor: fields[3] as bool, + is_internal: fields[2] as bool, + is_private: fields[3] as bool, + is_constructor: fields[4] as bool, }, public_inputs: PublicCircuitPublicInputs { call_context: CallContext { - msg_sender : fields[4], - storage_contract_address : fields[5], - portal_contract_address : fields[6], + msg_sender : fields[5], + storage_contract_address : fields[6], + portal_contract_address : fields[7], - is_delegate_call : fields[7] as bool, - is_static_call : fields[8] as bool, - is_contract_deployment: fields[9] as bool, + is_delegate_call : fields[8] as bool, + is_static_call : fields[9] as bool, + is_contract_deployment: fields[10] as bool, }, - args_hash: fields[10], + args_hash: fields[11], return_values: [0; RETURN_VALUES_LENGTH], contract_storage_update_requests: [crate::abi::empty_contract_storage_update_request(); MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL], contract_storage_read: [crate::abi::empty_contract_storage_read(); MAX_PUBLIC_DATA_READS_PER_CALL], diff --git a/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts b/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts index 70bc0be8c63a..00fafca6531e 100644 --- a/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts +++ b/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts @@ -172,7 +172,7 @@ describe('public_processor', () => { makePublicExecutionResult({ from: publicExecutionResult.execution.contractAddress, to: makeAztecAddress(30), - functionData: new FunctionData(makeSelector(5), false, false), + functionData: new FunctionData(makeSelector(5), false, false, false), args: new Array(ARGS_LENGTH).fill(Fr.ZERO), }), ];