From 4097f094ea3ef0dfb50872f73d41d13fe293d7f8 Mon Sep 17 00:00:00 2001 From: LHerskind Date: Tue, 27 Jun 2023 17:36:36 +0000 Subject: [PATCH 01/14] feat: globalvars in public noir --- .../acir-simulator/src/public/executor.ts | 39 ++++++++++++++----- .../acir-simulator/src/public/index.test.ts | 30 +++++++++----- .../src/structs/global_variables.ts | 4 ++ .../src/contracts/child_contract/src/main.nr | 4 +- .../src/contracts/noir-aztec3/src/abi.nr | 15 +++++++ .../src/examples/child_contract.json | 4 +- .../examples/non_native_token_contract.json | 6 ++- .../src/examples/parent_contract.json | 4 +- .../src/examples/public_private_contract.json | 6 +-- .../src/examples/public_token_contract.json | 4 +- .../src/sequencer/public_processor.test.ts | 9 +++-- .../src/sequencer/public_processor.ts | 16 +++++--- .../src/sequencer/sequencer.ts | 10 ++++- 13 files changed, 110 insertions(+), 41 deletions(-) diff --git a/yarn-project/acir-simulator/src/public/executor.ts b/yarn-project/acir-simulator/src/public/executor.ts index 464a1cde94d..f6f4c01e701 100644 --- a/yarn-project/acir-simulator/src/public/executor.ts +++ b/yarn-project/acir-simulator/src/public/executor.ts @@ -1,4 +1,12 @@ -import { AztecAddress, CallContext, EthAddress, Fr, FunctionData, PrivateHistoricTreeRoots } from '@aztec/circuits.js'; +import { + AztecAddress, + CallContext, + EthAddress, + Fr, + FunctionData, + GlobalVariables, + PrivateHistoricTreeRoots, +} from '@aztec/circuits.js'; import { padArrayEnd } from '@aztec/foundation/collection'; import { createDebugLogger } from '@aztec/foundation/log'; import { FunctionL2Logs } from '@aztec/types'; @@ -43,9 +51,12 @@ export class PublicExecutor { /** * Executes a public execution request. * @param execution - The execution to run. + * @param globalVariables - The global variables to use. * @returns The result of the run plus all nested runs. */ - public async execute(execution: PublicExecution): Promise { + public async execute(execution: PublicExecution, globalVariables: GlobalVariables): Promise { + // @todo Should we add the global variables up here as an input? Or should it be similar to "treeRoots" below? + // Out main diff would be the that those vars are not in dp and depends on the block execution :thinking: const selectorHex = execution.functionData.functionSelectorBuffer.toString('hex'); this.log(`Executing public external function ${execution.contractAddress.toString()}:${selectorHex}`); @@ -53,7 +64,7 @@ export class PublicExecutor { const acir = await this.contractsDb.getBytecode(execution.contractAddress, selector); if (!acir) throw new Error(`Bytecode not found for ${execution.contractAddress.toString()}:${selectorHex}`); - const initialWitness = getInitialWitness(execution.args, execution.callContext, this.treeRoots); + const initialWitness = getInitialWitness(execution.args, execution.callContext, this.treeRoots, globalVariables); const storageActions = new ContractStorageActionsCollector(this.stateDb, execution.contractAddress); const newCommitments: Fr[] = []; const newL2ToL1Messages: Fr[] = []; @@ -125,6 +136,7 @@ export class PublicExecutor { frToSelector(fromACVMField(functionSelector)), args.map(f => fromACVMField(f)), execution.callContext, + globalVariables, ); nestedExecutions.push(childExecutionResult); @@ -162,6 +174,7 @@ export class PublicExecutor { targetFunctionSelector: Buffer, targetArgs: Fr[], callerContext: CallContext, + globalVariables: GlobalVariables, ) { const portalAddress = (await this.contractsDb.getPortalContractAddress(targetContractAddress)) ?? EthAddress.ZERO; const functionData = new FunctionData(targetFunctionSelector, false, false); @@ -182,7 +195,7 @@ export class PublicExecutor { callContext, }; - return this.execute(nestedExecution); + return this.execute(nestedExecution, globalVariables); } } @@ -190,13 +203,16 @@ export class PublicExecutor { * Generates the initial witness for a public function. * @param args - The arguments to the function. * @param callContext - The call context of the function. + * @param historicTreeRoots - The historic tree roots. + * @param globalVariables - The global variables. * @param witnessStartIndex - The index where to start inserting the parameters. * @returns The initial witness. */ function getInitialWitness( args: Fr[], callContext: CallContext, - commitmentTreeRoots: PrivateHistoricTreeRoots, + historicTreeRoots: PrivateHistoricTreeRoots, + globalVariables: GlobalVariables, witnessStartIndex = 1, ) { return toACVMWitness(witnessStartIndex, [ @@ -207,10 +223,15 @@ function getInitialWitness( callContext.isStaticCall, callContext.isContractDeployment, - commitmentTreeRoots.privateDataTreeRoot, - commitmentTreeRoots.nullifierTreeRoot, - commitmentTreeRoots.contractTreeRoot, - commitmentTreeRoots.l1ToL2MessagesTreeRoot, + historicTreeRoots.privateDataTreeRoot, + historicTreeRoots.nullifierTreeRoot, + historicTreeRoots.contractTreeRoot, + historicTreeRoots.l1ToL2MessagesTreeRoot, + + globalVariables.chainId, + globalVariables.version, + globalVariables.blockNumber, + globalVariables.timestamp, ...args, ]); diff --git a/yarn-project/acir-simulator/src/public/index.test.ts b/yarn-project/acir-simulator/src/public/index.test.ts index 00cd29be6a8..4d75b53ea1e 100644 --- a/yarn-project/acir-simulator/src/public/index.test.ts +++ b/yarn-project/acir-simulator/src/public/index.test.ts @@ -5,6 +5,7 @@ import { CircuitsWasm, PrivateHistoricTreeRoots, L1_TO_L2_MESSAGES_TREE_HEIGHT, + GlobalVariables, } from '@aztec/circuits.js'; import { AztecAddress } from '@aztec/foundation/aztec-address'; import { EthAddress } from '@aztec/foundation/eth-address'; @@ -84,7 +85,7 @@ describe('ACIR public execution simulator', () => { publicState.storageRead.mockResolvedValue(previousBalance); const execution: PublicExecution = { contractAddress, functionData, args, callContext }; - const result = await executor.execute(execution); + const result = await executor.execute(execution, GlobalVariables.empty()); const expectedBalance = new Fr(160n); expect(result.returnValues).toEqual([expectedBalance]); @@ -151,7 +152,7 @@ describe('ACIR public execution simulator', () => { const recipientBalance = new Fr(20n); mockStore(senderBalance, recipientBalance); - const result = await executor.execute(execution); + const result = await executor.execute(execution, GlobalVariables.empty()); const expectedRecipientBalance = new Fr(160n); const expectedSenderBalance = new Fr(60n); @@ -174,7 +175,7 @@ describe('ACIR public execution simulator', () => { const recipientBalance = new Fr(20n); mockStore(senderBalance, recipientBalance); - const result = await executor.execute(execution); + const result = await executor.execute(execution, GlobalVariables.empty()); expect(result.returnValues).toEqual([recipientBalance]); @@ -228,9 +229,18 @@ describe('ACIR public execution simulator', () => { }); const execution: PublicExecution = { contractAddress: parentContractAddress, functionData, args, callContext }; - const result = await executor.execute(execution); - - expect(result.returnValues).toEqual([new Fr(42n + initialValue)]); + const globalVariables = new GlobalVariables(new Fr(69), new Fr(420), new Fr(1), new Fr(7)); + const result = await executor.execute(execution, globalVariables); + + expect(result.returnValues).toEqual([ + new Fr( + initialValue + + globalVariables.chainId.value + + globalVariables.version.value + + globalVariables.blockNumber.value + + globalVariables.timestamp.value, + ), + ]); }); }); @@ -265,7 +275,7 @@ describe('ACIR public execution simulator', () => { publicContracts.getBytecode.mockResolvedValue(Buffer.from(publicToPrivateAbi.bytecode, 'hex')); const execution: PublicExecution = { contractAddress, functionData, args, callContext }; - const result = await executor.execute(execution); + const result = await executor.execute(execution, GlobalVariables.empty()); // Assert the commitment was created expect(result.newCommitments.length).toEqual(1); @@ -295,7 +305,7 @@ describe('ACIR public execution simulator', () => { publicContracts.getBytecode.mockResolvedValue(Buffer.from(createL2ToL1MessagePublicAbi.bytecode, 'hex')); const execution: PublicExecution = { contractAddress, functionData, args, callContext }; - const result = await executor.execute(execution); + const result = await executor.execute(execution, GlobalVariables.empty()); // Assert the l2 to l1 message was created expect(result.newL2ToL1Messages.length).toEqual(1); @@ -359,7 +369,7 @@ describe('ACIR public execution simulator', () => { }); const execution: PublicExecution = { contractAddress, functionData, args, callContext }; - const result = await executor.execute(execution); + const result = await executor.execute(execution, GlobalVariables.empty()); expect(result.newNullifiers.length).toEqual(1); }); @@ -383,7 +393,7 @@ describe('ACIR public execution simulator', () => { publicContracts.getBytecode.mockResolvedValue(Buffer.from(createNullifierPublicAbi.bytecode, 'hex')); const execution: PublicExecution = { contractAddress, functionData, args, callContext }; - const result = await executor.execute(execution); + const result = await executor.execute(execution, GlobalVariables.empty()); // Assert the l2 to l1 message was created expect(result.newNullifiers.length).toEqual(1); diff --git a/yarn-project/circuits.js/src/structs/global_variables.ts b/yarn-project/circuits.js/src/structs/global_variables.ts index 34696077368..5037b0ed915 100644 --- a/yarn-project/circuits.js/src/structs/global_variables.ts +++ b/yarn-project/circuits.js/src/structs/global_variables.ts @@ -30,6 +30,10 @@ export class GlobalVariables { return new GlobalVariables(...GlobalVariables.getFields(fields)); } + static empty(): GlobalVariables { + return new GlobalVariables(Fr.zero(), Fr.zero(), Fr.zero(), Fr.zero()); + } + static fromBuffer(buffer: Buffer | BufferReader): GlobalVariables { const reader = BufferReader.asReader(buffer); return new GlobalVariables(reader.readFr(), reader.readFr(), reader.readFr(), reader.readFr()); diff --git a/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr b/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr index e00450c617e..d913ca85c38 100644 --- a/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr +++ b/yarn-project/noir-contracts/src/contracts/child_contract/src/main.nr @@ -34,8 +34,8 @@ contract Child { // @param _padding: Nested public functions always get called with MAX_ARGS, since we don't have the ABI available // during execution time to know how many args are expected, hence the _padding argument. We should // be able to remove it when we migrate to brillig. - open fn pubValue(_inputs: PublicContextInputs, base_value: Field, _padding: [Field; abi::MAX_ARGS - 1]) -> pub Field { - base_value + 42 + open fn pubValue(inputs: PublicContextInputs, base_value: Field, _padding: [Field; abi::MAX_ARGS - 1]) -> pub Field { + base_value + inputs.public_global_variables.chain_id + inputs.public_global_variables.version + inputs.public_global_variables.block_number + inputs.public_global_variables.timestamp } // Increments `current_value` by `new_value` and returns `new_value` + 1. diff --git a/yarn-project/noir-contracts/src/contracts/noir-aztec3/src/abi.nr b/yarn-project/noir-contracts/src/contracts/noir-aztec3/src/abi.nr index 189aac84eb5..b290d6bf1c1 100644 --- a/yarn-project/noir-contracts/src/contracts/noir-aztec3/src/abi.nr +++ b/yarn-project/noir-contracts/src/contracts/noir-aztec3/src/abi.nr @@ -27,6 +27,8 @@ struct PrivateContextInputs { struct PublicContextInputs { call_context: CallContext, roots: CommitmentTreesRoots, + + public_global_variables: PublicGlobalVariables, } global CALL_CONTEXT_SIZE: comptime Field = 6; @@ -115,6 +117,19 @@ impl PrivateGlobalVariables { } } +struct PublicGlobalVariables { + chain_id: Field, + version: Field, + block_number: Field, + timestamp: Field, +} + +impl PublicGlobalVariables { + fn serialize(self) -> [Field; 4] { + [self.chain_id, self.version, self.block_number, self.timestamp] + } +} + global FUNCTION_DATA_SIZE: comptime Field = 3; struct FunctionData { diff --git a/yarn-project/noir-contracts/src/examples/child_contract.json b/yarn-project/noir-contracts/src/examples/child_contract.json index f2c4779fe8b..c6f415768cc 100644 --- a/yarn-project/noir-contracts/src/examples/child_contract.json +++ b/yarn-project/noir-contracts/src/examples/child_contract.json @@ -26,7 +26,7 @@ "kind": "field" } ], - "bytecode": "b5924d4ec250148529b44dd42520aea1a52db4335b22fec49f04068e1ff4515f2c6df32806866f07ed039de80cd02892b804b7e16e045b2468c2a4e5ce6e6e7272ceb9dff0e0817c183668de1a6eafda759a1560db6452d32f8f8f42ca321b8edca623cf90170323db46d67d489eebc8b16c380882af4321d9883f6a6dcf86f9e0918c2edc3bca64c8a4e23a1d9f66c2c4fa0299565d0c91e52cf20ca61ddfc5c0823508cc90bc9e40e0e918833ecd322199d5a0853a3ec4a78e097bccd2059b868b99811c80fb55046df3ca1b7223dd34b32c199fbbc0a4392e4acee5e20638323eebb6bd7027da33ccb8eebbdee7ea0734d51facc4284daeb69782463e79e5bf60ed074f518d5966fb80bdc7805d63e4c335c2720cfd47d8fa9e5ddae2b6401cbf206e0e5a441ccb4755f06c5c091f13b7fb87b8377d1ee4a60d7dd44c8f0e4928c9322c17a1288940286a0d551164a5515245555454c52caa920455592d6b0dad2c68a22c41b1a568522b162924b71184856f", + "bytecode": "b5924d4ec250148529b44d74e2121057d0d216da992d117fe24f0203c70ffaa82f96b6791403c3b783f6814e74066814495c82db7037822d123461d2726737373939e7dc6f78f0403e0c1b346f0db757ed3acd0ab06d32a9e997c7472165990d476ed39167c88b81916d23eb3e24cf75e458361c04c1d7a1906cc41fb5b667c37cf0484617ee1d65326452719d8e4f3361627d814cab2e86c872167906d38eef6260c11a0466485e4f20f0748c419f669990cc6ad0421d1fe253c7843d66e9824dc3c5cc400ec0fd2a82b679e50db9916e9a59968ccf5d60d21c1725e77271031c199f75db5eb813ed19665cf75def73f5039aea0f5662942657db4b41239fbcf25fb0f683a7a8c62cb37dc0de63c0ae31f2e11a613986fe236c7dcf2e6d715b208e5f1037072d228ee5a32a7836ae848f89dbfd43dc9b3e0f72d3863e6aa6478724946419968b5094442014b586aa08b2d228a9a22a2aaa6216554982aaac96b5865616345196a0d85234a9158b1492db08c2c237", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -46,7 +46,7 @@ "kind": "field" } ], - "bytecode": "a58ebb0dc230140015096818210ce1e74ffcdc9120a0a36003db3822c280848244eb0d12931568a858876da0489d26d79e74ba6ed1854fe1b53d15d7c7e67eb12bed7d78edf3dd76ddc6493220a743729684777eabeae3d9d5957d36317e97641c30ff3718c93877923a60a009550605e1c264080802c58122630e394a6594240a3873500ac5ca3e928edda0ba69d31f", + "bytecode": "cdd23b0e82401080e190a88daf231030b1de657761b6138cda597803c02512511383892d37e061e2096cacbc8eb7d1829a86299876922f993ff3983fb38f97f8e1d1bbdcd7b773b8f493247beddced6655943dad61d96f5a0eb4eced5ee3f47052691c5679557e17a4ddd0e9df60c4e65c3996a28cfac4920108c2456003052a40ec2d604c01074706d2219272a66824248b6a4447308cd6a710fc386304638210c7ec629c2182314230665d8c63201826c2e720c4c90bfd07", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { diff --git a/yarn-project/noir-contracts/src/examples/non_native_token_contract.json b/yarn-project/noir-contracts/src/examples/non_native_token_contract.json index 69d99431be5..45076f69c67 100644 --- a/yarn-project/noir-contracts/src/examples/non_native_token_contract.json +++ b/yarn-project/noir-contracts/src/examples/non_native_token_contract.json @@ -228,7 +228,11 @@ "kind": "field" } ], +<<<<<<< HEAD "bytecode": "ed9d777454c5fbc673c982d7de2bbd77c8a6879ed07bef3565131642129250adb1779309202252430769f60a2a8a3817e935f45e45444444fcbdf702bf2ff88517489e85f78fafe7cc7b84e79c87bb9f9dbd7b77e699991196eb4cae7fb58c795189d1b1fda39287361a94145b3f3a3131634abbc8568d1b662997c1880539b11027163619b1082716e5c4629c589c134b7062494e2cc589a539b10c2796e5c4729c589e132b7062454eacc4899539b10a2756e5c46a9c589d130338d1cd89819c18c489c19c18c289a19c18c689e19c18c18935cc8c9991a9def4be033ce9ded8eccc6cb5b15e50406850b0272cd0e30e7247070446c48487040487c48486bbc3dd21e1217181e141419ef0e0f0b0889888b08008777090c71d1f1211141fe0fce78e208fc0f8d0e0fc78d438771df9f108b08c5f36d60bc8e77f97c5635f963baf2f2dec82475cdef18443f01cf3211efbb202f2f2d2422ef608c81b9e50089e5f7d8cc7beacf0eb7d6941fff28888bf7e3cc1103cc76f001ebaace0f8eb7969eecb79845d1f9e40089edf6e0c1ee7b242aef5a555bf9247f0b5e30980e0397103f1d89715702d2fad2ae711706d78aa41f0fc7e83f1d897157bb59756f96a1e6157c7530582e7e44dc0635f5620f7d22a5e8b47188fa71204cf1f37098f7d5961577a69e5afd523ecca782a40f09cba8978eccb0abfdc4b2b7b3d1ee197c7530e82e7cf9b8cc7beac807fbfb4d2d7e9111affdf78ca40f09c1680c7beac808b5f5ac9bc78045e8aa71404cf5f42f0d8971578e1a515cfab47f07ff09480e03923084f90273edebe3277d17c799cc3530c82e76f5fe0c9a7a19bde3588cbdf10446765223a0d71f90b82e81f99884e415cfe44202ae02713d14988cb1f1044864c4427202ebf4310159089e838c4e53708227f99888e415c7e852072497b26a2a722771108a05f20800a8aec43055c10978210448564222a0071f18720ba4526223f888b014164cabc599f85b8fc034174abcc5e64425c6e8520ba4d26a24210975b20886e9788e876c04b2b0c817c87cc1e741bc4e576480f42209ad1c09bea894df70ef664cce890dcc2d32e3ace3b343b3b330bd199f27f7db97e250a17295aac788992a54a97295bae7c858a952a57a95aad3a4d5107058784868547d4b00c3f26dd53938bfed4e2c4da9c588713eb72623d4e8ce4c4284eaccf890d38b1212736e2c4c69cd884139b7262334e6cce892d38b12527b6e2c4d69cd88613db72623b4e6ccf891d38b1232776e2c4ce9cd88513bb7262371f04ecba020276dd2037e1ca1203769d0101bb2e103c552406ec3a0202769d2078aa4a0cd8b50704ec3a40f0549318b06b0b08d8b583e0a92e3160d71a10b06b03c113203160d71210b06b05c1e39618b06b0e08d8b580e0099418b06b0a08d83583e0099218b06b0c08d83581e0099618b06b0808d83582e0099118b0ab0f08d83580e0099518b08b0404eca22078c22406ecea020276f52078c22506ec6a03027675207822648e2c87435c2220886ac844140a71098320aa29135130c4250482a8964c448110972008a2da321105405cdc1044756422aa0671a90e41545726a22a1097aa1044f52406ec6a41005586008a94d987ea415c222188a26422aa0371a90b41545f2622cc07ad3604510399886a405c6a4210359489a801c4a5210451239988a2202ef521881a4b447407e0a5d584406e22b3073582b83486f4a026c2037677400276356bd5ae53b75e6454fd060d1b356ed2b459f3162d5bb56ed3b65dfb0e1d3b75eed2b51b1fb0ebce457f7a70624f4eecc589bd39b10f274673620c27c672621c277a38319e131338b12f277a39b11f27f6e7c4444e1cc089499c98cc89299c3890135339318d13d3397110270ee6c4219c3894138771e2701f04ec86010276c32137e1048901bb218080dd50089ebe120376830001bbc1103c5e8901bb3440c02e1d82a79fc480dd4040c02e1582a7bfc4805d3220609702c193283160370010b04b82e019203160d71f10b04b84e0499218b0f3020276fd2078922506ec120001bbbe103c291203761e40c02e1e8267a0c4805d2c20601707c1932a3160170d08d8c540f0a4490cd8f50604ecfa40f0a44b0cd8f50404ec7a41f00c9239b29c0e71190441345826a254884b1a04d110998852202e03218886ca449404714986201a26135122c4650004d1709988fa415cfa43103d2e13515f888b1782e8098901bb1e10400910404fcaec434f405c9e84207a4a26a2e11097c721889e96896828c4651804d13332110d86b80c8120ca9089e819884b0604d1b332113d0571791a82e8398988ee06bcb4ee10c8cfcbec41cf425c9e83f4a0e78507ecee8604ecbaf7e8d9ab779fe898d8384f7c425f6fbffe890392925306a6a6a50f1a3c64e8b0e176c0ee92373a0b0037df3f593c1efc45e5fb47424c18fea2f2fd601e1480bfa87c3f0a87b92f93189bdabe49646048a8caf58b538f9bea09533d69aaa74c55c35411a60a375598a9424d1562aa605305992ad0546e530598aabaa9aa99aaaaa9aa98aab2a92a99aaa2a92a98aabca9ca99aaaca9ca98aab4a94a99aaa4a94a98aab8a98a99aaa8a98a98aab0a9ba99aaaba9ba98aab3a93a99aaa3a93a98aabda9da99aaada9da98aab5a95a99aaa5a95a98aab9a99a99aaa9a99a98aab1a91a99aaa1a91a98aabea9a24c1569aa7aa6aa6baa3aa6aa6daa5aa6aa69aae1a61a66aaa1a61a62aac1a61a64aa7453a5992ad554034d9562aa645325996a80a9124dd5df54fd4ce535555f5325982ade541e53c5992ad65431a68a36551f53f536552f53f534550f537537e933fcb47e4667e867f573fa79fd827e51bfa45fd6afe857f56bfa75fd867e53bfa5337596563a5b8fd023f528fdb61eaddfd163f4bb7aac7e4f8fcb981695ea4d4cf4268ccca237c19b9490e8c1dca1eeccff1d2a2b634a646a6af4b05cbffbf4783d414fd493f4649da3a7e8a97a9a9eae67e8997a969eade7e8f7f55c3d2f7374c6e496c98315ddb4a6d44f4e4a4b577e5980dbf8ac46c9a91e6f4292dd4fb3e72578d25bb8e96e1ed8d29396169de0c9ca98d1c4139de25ca72a705f56c69c769e046f5aba27b569529c67a871ee92fc0b9cbf34ff8c9c668306a464153af7673f23a77d7a72caa28bbf2ba6b71d949ceef524a58fc4bc117a4afe21646766e6d9c47de17ff4023d7f119316d5f34b70ea02bd15370e73e16ea6a72008cf57083ad8470e78379a7a73ba91fbdf7fa13fd00bd96eb4b01ea77ea0bff241379a8a20bc5021e8481aeebcc007b139b59e8778a33e04e0f1d55726e2e29c4b1a9092e8d11f658ec898617fd9348d6f954cdf85fe17be158dfc7f2bba33e6447993a2538735f27a12e35aa78cf09bdcc03bd8f073becdf2f365f19f7fe0e23e98958d80ab3f82bc491fe7bf17fae2c57d9c89fee08ba405b91d214e7ed11311b7a34f24df8e3e41de8e3efddfede852b8fa53c89bf499c4dbd127fa3399b7a3cf7c713bcaf7554d46dc4a3e870c7c4e96385baedf43001a070194230bd0f91ef42e20a7a9c742004d1103e8a278ad7e0790f3d5632080a68a00f4af78b67e1b9013d7a32180a6dd6c40978bf7eb918075067a1404d0f49b0ae80acb4334629d8a1e010134e3a601629617e92cc03a27ad208066de144057599ea6df02ac93d3991040b36e38a06b58dea8df00acb3d46f4200cdbea180ae7179ac7e0db04e57bf0e0134e78601ba8ee5d5fa15c03a6ffd2a04d0fb3704d0752ecfd72f01f609d02f4300cdf535a0bc6cefa05f00ec33a15f84009ae7534079dc1e443f07d8a7443f0f0134df6780f2b1bd8cce00ec73a39f85005a20330a371fe2b2008268a14c4473212ef320883e9089680ec4e57d08a20f65229a0571990d41f4914c4433202e3321883e9689681ac4653a04d12732114d81b84c8520fa5426a2c910971c08a2cf6422fa14e2f21904d1e732117d0c71f90482e80b99883e84b87c0441f4a54c440b212e1f40107d2513d1971097af2088be9689e87388cb1710448b7c8128bf1b113f0dd810596316a72e96d985be86b82c8274a1c592c37a9f23c37a5ffc2fac77295cfd05e44dfa526258ef73fda5ccb01e9a1664fda3cef7e3883bf832eb53a6b7f1c47952d33c49d94ae9aff45975973eeba7f4d77a910ff28688df88fa6b8489e85bea62e42df59bffdd522f85abbf81bc49df4abca52ed6dfcabca52268318bebbee34e03d14b58f57b56fd815597b2ea8facba8c557f6255cdaa16ab2e67d59f597505abae64d555acba9a55d7b0ea5a565dc7aaeb597503ab6e64d54dacba99557359750bab6e65d56dacba9d5577b0ea4e56dde5832379f44ec04f61bd0bf21b6d87c44379f476446c620704d04e89c7f2e8ad88e0cd3608a05d120fe6d1b988e8d61608a0dd128fe6d19b10e1bfcd10407b241ecea33720e2a31b2180f64a3c9e47af430490d74300ed9378408f5e8388b0af8500da2ff1881ebd0ab108623504d0018987f4e8158865342b21800e4a3ca6472f472cc4fa1902e890c4837ab4462ce5b320800e4b3caa472f432c06fd0902e888c4c37af452c472e21f21808e4a3cae477f8f5890fe0304d02f3227a58f425c7e81203a2613d16188cb1108a25f65223a0871390441745c26a2fd1097031044bfc944b417e2b20f82e8844c44bb212e7b20887e97896827c40533847f52e416444b20843063f87fc8ec4427212e7f40109d9289e804c4e57708a23f65223a0e71f90d82e8b44c44c7202ebf4210fd2513d16988cb5f10446764223a0571f91382e86f8988f47844c4f13b08e6b332fbd01988cbdf903e7456f8993d7a3ce4d01efd9d5ea2bfd73fe8a5fa47bd4cffa4b5b6f472fdb35ea157ea557ab55ea3d7ea757abddea037ea4d7ab3ced55bf456bd4d6fd73bf44ebdcb3ed4870908ed66e3437b58752fabee63d5fdac7a80550fb2ea21563dccaa4758f528abfec2aac758f557563dceaabfb1ea0956fd9d554fb2ea1fac7a8a55ff64d5d3acfa17ab9e61d5bf59f52cabfec3a9f429e36583970bf0b2bf0f627cf48f02727c746d88bbb97f5189413e7a5701493e7af321888a898cf29d4544f9fe81002a2e32ca770611e5833c32f9971019e53b8d88f2417ebaf9971419e53b8588f2417eb8f9971219e53b8988f2410622fd4b8b8cf29d4044f920c390fe654446f98e23a27c904148ffb222a37cc710513ec810a47f399151bea388281f2423e25f5e6494ef3022ca074988f8571019e53b8888f241f221fe154546f9f623a27c9074887f259151bebd88281f241be25f59e400b67f25884b6508a22a32115580b8548420aa2a135139884b7908a26a32119581b8948520aa2e135129884b6908a20099884a405c4a4210b965222a0671290e41142832cab70742a828845090cc4e1408710982200a96892800e2e286200a9189a81ac4a53a0451a84c4455202e552188c264220a85b884411085cb44140c710981208a1019e59b8088f2411692f8d790d987c2212e11903e54437a946f0226cab75befd17bf53ebd5f1fd007f5217d581fd147f52ffa98fe551fd7bfe913fa777d52ffa14fe93ff569fd973ea3ffd667f53f96e16719866514b00c7f3ece67192e3e485490970bf1f22dbc6cf2f2adbc7c1b2fdfcecb77f0f29dbc7c172fdfcdcbf7f0f2bdbc7c1f2fdfcfcb0ff0f283bcfc102f3fcccb8ff0f2a3bcfc182f17e6e522bc5c94978bf172715e2ec1cb2579b9142f97f649d4af1424ea87196bea2a33ea570212f5c38c35759318f5a38f0d20eb479f2e08a2ee12c37e745f02a4fde8f60541d44362dc8f6efc80bc1f7d3f4010f59418f8a36f5640e28fbe8021887a498cfcd1a30b20f3474f381044bd2586fee8d91090faa3474808a23e12637ff4f00dc8fdd1333a0451b4c4e01ffdba0124ffe8471004518cc4e81ffd7c0464ffe857260451acc4f01ffd3e07a4ffe8673c04519cc4f81f0d8000f27f344e0241e4911800a4112640029006a22088e225460069080f9001a4913e08a2049943dff110970408a2be3211c5415c3c10445e998862202eb11044fd6422ea0371898620ea2f13512f884b6f08a24499887a405c7a42100d9089a81bc4a53b045192c41020cd7c42107585204a96d98b92202ec9104429321125425c0640100d9489a81fc4a53f0451aa4c447d212e5e08a234998852212e691044e93211a5405c0642100d1299029c88786d860bc279b0cc4e940e711904e94483a5c70027426280d4a3e8719446ea68988d8634693c92c67e69e09606c969849b6613682a80a65d68ce84e6a768728926f268168e663c69ba92a686695e97e6d06902dc328a584651cb286619c52d836c4b5a4629cb287db58860193e80549697cbf172795eaec0cb1579b9122f57e6e52abc5c9597abf172755e0ee065372f07f272102f07f372082f87f272182f87f372042fd7e0e59abc5c8b976bf3721d5eaecbcbf578399297a378b9be4f2282519088607dc837c1489911c17a9088602404d1289911c13a9088605d08a2b76546046b412282b5218846cb8c08d68044046b4210bd233322180e890862d6ef8c9119110c854404312b09df9519110c864404312b09c7ca8c080642228298b5f1efc98c080640228298b5f1e3644604ab41228298b5f1e3654604ab40228298b5f1136446042b41228298edcb26ca8c085680440431db974d9219112c07890862b62f9b2c73587c12c4653204518e4c4413202e90291aff2932118d83b88c87209a2a13d15888cb7b1044d364221a037179178268ba4c44a3212eef4010cd90896814c4e56d08a299322382652188464210cd92d98b66425c664110cd9689683ac4650604d11c9988a6425ca64110bd2f13510ec4650a04d15c9988de87b8cc85209a2713d16c88cb1c08a2f922238293201141cc6ee70b6476a2791097f9904eb4407a447012282258861e4769a48e86d9684893c62369ec97066e69909c46b8693681a60268da85e64c687e8a269768228f66e168c693a62b696a98e675690e9d26c02da39665d4b68c3a9651d732ea5946a465445946fdab45041bf001a486bcdc88971bf372135e6ecacbcd78b9392fb7e0e596bcdc8a975bf3721b5e6ecbcbed78b93d2f77e0e58ebcdc89973bf372175eeecacbdd78b93b2ff7e0e59ebcdc8b977bf3721f5e8ee6e5185e8ef5494430061211c42c795e293322d8071211c42c795e253322d80b1211c42c795e2d3322d8031211c42c795e233322d80d1211c42c795e2b3322d8051211c42c795e273322d8091211ec0c41b45e6644b0032422d811826883cc88603b4844b03d04d1469911c1369088605b08a24d322382ad2011c1d610449b6546045b4022822d2188726546049b412282cd2188b6c88c08368144049b42106d9519116c048908368620da2673587c2bc4651b04d176998872212e5b208876c844b409e2b2198268a74c441b202e1b218876c944b40ee2b21e8268b74c446b202e6b2188f6c844b40ae2b21a8268afcc88604308a2951044fb64f6a2bd10977d1044fb6522c21c2cb90782e8804c443b212ebb20880eca44b41de2b20382e8904c4407212e8720880ecb44b41fe2720082e888c8882064159fd100c2f9a8cc4e7418e27204d2898e4a8f084e0645041bd0e3288dd4d1301b0d69d278248dfdd2c02d0d92d30837cd26d054004dbbd09c09cd4fd1e4124de4d12c1ccd78d274254d0dd3bc2ecda1d304b865f4b08c9e96d1cb327a5b461fcb88b68c18cb88bd5a44308e0f207978399e971378b92f2f7b79b91f2ff7e7e5445e1ec0cb49bc9ccccb29bc3c90975379398d97d37979102f0fe6e521bc3c949787f1f2705e7e9c979fe0e52779f9295e7e9a979fe1e50c5e7e96979ff34944f0594844f039c43781eb4e9911c1672011c10c08a2bb6446049f8244049f8620ba5b6644f0094844f04908a27b644604874322828f4310dd2b3322381412111c0641749fcc88e0604844700804d1fd322382e9908820641379d703322382a9908820e43c0bd78332238229908820e43c0bd74332238249908820e48426d7c332238289908820e48426d723322382fd201141c8094dae47654604fb42228290139a5c8fc98c08c64322829053745d85450e8bbb1e83b81486202a2213d12310974721888aca44f410c4e56108a26232113d0071791082a8b84c44f7415cee87202a2113d13d10977b21884aca447417c4e56e08a2523223821e08a23b21884acbec45a5202ea52188cac8445402e2521282a8ac4c44c5202ec52188cac9445404e2521482a8bc4c44e5202e90cdf05d15642282ec6ee72a0b4154516444300712118c8370ae24b3135580b840cee58020f26944300714118ca3c7511aa9a361361ad2a4f1481afba5815b1a24a7116e9a4da0a9009a76a139139a9fa2c9259ac8a359389af1a4e94a9a1aa6795d9a43a70970cb78c2329eb48ca72ce369cb78c632322ce359cb78ee6a11c1e7f900d20bbcfc222fbfc4cb2ff3f22bbcfc2a2fbfc6cbaff3f21bbcfc262fbfc5cb99bc9cc5cb8a97b37979042f8fe4e551bcfc362f8fe6e57778790c2fbfcbcb6379f93d5e1ec7cbe37979022f4fe4e549bc3cd92711c1499088202495ef6a2a332238011211849cade36a263322380e1211849cade36a2e332238161211849cade36a21332238061211849cade36a293322381a1211849cade36a253322380a1211849cade36a2d332238021211849cade36a233322a82011c16c08a2b6322382999088601604513b9911c1372111c1b72088dacb8c08be0e8908be0141d4416644f0554844f03508a28e3223822f432282af4010759219117c1112117c0982a8b3cc61f14e1017c806d4ae2e32117580b84036a076759589a81dc405b201b5ab9b4c446d202e900da85ddd65226a0571816c40edea2113510b880b64036a574f99889a415c201b50bb7ac98c08be004104d980dad55b662fea0571811c12e4ea2313510f880be4902057b44c44dd202e9043825c3132117581b8400e0972c5ca44140371811c7be78a9389a80fc40572ec9dcb2332220839ffd6781ec2395e6627c2e41f3d904e142f3d22381f14117c9e1e4769a48e86d9684893c62369ec97066e69909c46b8693681a60268da85e64c687e8a269768228f66e168c693a62b696a98e675690e9d26c02d63ac65bc6719e32c63bc654cb08c899631c932265f2d2298c30790a6f0f2545e9ec6cbd37979062fcfe4e559bc3c9b97e7f0f2fbbc3c9797e7f1f27c5e5ec0cb0b79f9035efe90973fe2e58f79f9135efe94973fe3e5cf79f90b5efe9297bfe2e5af7979112f2fe6e56f78f95b9f4404bf814404bf857c13bc203322b80812115c0c41f4a2cc88e0579088e0d710442fc98c087e0189087e0941f4b2cc88e0679088e0e71044afc88c087e0289087e0a41f4aacc88e0479088e0c71044afc98c087e0089087e0841f4bacc88e0024844702104d11b322382f3201141c8688deb4d9911c1f72111c1b910446fc98c08ce864404e7401065ca8c08ce84440467411065c98c084e874404674010299911c1a99088e03408a26c99c3e20ae2825917304226a24c880b665dc0489988de84b860d6058c9289e875880b665dc0db3211bd0a71c1ac0b182d13d1cb1017ccba807764227a11e282591730466644700a04d10b1044efcaec4563202e98b5db6365221a0d71c1acdd7e4f26a2511017ccdaed7132118d80b860d66e8f9789681cc405b31bc9049988c6425c30bb914c141911848ccb1b3910ce936476a2091017ccc64893a447041782228239f4384a237534cc46439a341e4963bf34704b83e434c24db309341540d32e346742f35334b9441379340b47339e345d4953c334af4b73e834016e195f58c69796f195657c6d198b2c63b1657c6319df5e3e2238b57d93c8c09050956bf829bdcb547a27b51dd4b653db466d2bb52dd472a96da6b689da466a1ba8ada7b68eda5a6a6ba8ada6b68ada4a6a2ba8fd4c6d39358b9aa6f613b565d47ea4b694da0fd4bea7b684da77a6b20c7fbb14b08b61173ffafb7fa89da5f637b533d4fea2769ada9fd44e51fb83da496abf533b41ed376ac7a9fd4aed18b55fa81da57684da616a87a81da47680da7e6afba8eda5b687da6efb1f2d6d9752762969971276296e976276296a972276296c97c7ecf2a85d1eb1cbc37679c82e0fdae501bbdc6f97fbec72af5deeb1cbdd76b9cb2e77dae50ebbdc6e97dbec72ab5d4cbbdc62974276296817975deadb25ca2e9176a96797ba76a96397da76a965979a76a9619708bb84db25cc2ea17609b14bb05d82ec126817b75d02ec52dd2ed5ec52d52e55ec52d92e95ec52d12e15ec52de2ee5ec52d62e65ec126b9718bb44dba58f5d7adba5975d7adaa5875dbadba59b5dbadaa58b5d3adba5935d3adaa5835ddadba59d5ddadaa58d5d5adba5955d5adaa5855d9adba5995d9adaa5895d1adba5915d1adaa581e99cc7eb9cd9eb9cebeb9cfdeb9c0fec9c21ec9c33ec9c45ec9c57ec9c69ec9c7bec9c8dec9c9fec9cb1ec9cc3ec9cd5ec9ce7ec9cf9ec9c0bed9c1ded9c2fed9c41ed9c53ed9c65ed9c77ed9c89ed9c9bed9caded9cbfed9cd1ed9ce3ed9cf5ed6c06e86c18e86c2ae86c3ce86c4ee86c60e86c72e86c84e86c96e86ca8e86cbae86ccce86cdee86cf0e86c02e96c14e96c26e96c38e96c4ae96c5ce96c6ee96c80e96c92e96ca4e96cb6e96cc8e96cdae96cece96cfee96c10ea6c22ea6c34ea24119db4a2936874528f4e32d2494f3a094b2785e924359d34a793f87452a14e72d449973a095427a5ea24599db4ab93887552b34eb2d649df3a095d27c5eb247d9d34b093187652c54ef2d849273b096627e5ecdc47bfb38c2596f1bd65fc60194b2de347cb5866193f5986b60ccb32965bc6cf96b1c232565ac62acb586d196b2c63ad65acb38cf596b1c132365ac626cbd86c19b996b1c532b65ac636cbd86e193b2c63a765ecbaf4eb1632966deccef73748880f9e028c5d9017b707f214b058d88392fbdc8bdb915fd06edb652704d1378210b903fefffddf961f44ee0b2edb2188be1582c87df11fe836935744ee8b5db642107d270091fbdf7f41f7e3bc2072ffdb25178268c94d46e4bedc5fd217d7f522725fce651304d1f7371191fb4a027dc35f0f22f7955c364010fd709310b939911e85ae15919b73590741b4f42620725fcd919e19af0591fb6a2e6b20887ebcc188dcd7e2480fd75743e4be1697551044cb6e2022f7b53ad2af100e91fb5a5d564010fd748310b9afc7917eae5d0991fb7a5c964310e91b80c87dbd8ef4bbf67288dcd7eba221882c1f2372e7c5910600fe8dc89d1797651044cb7d88c89d57471a29b918913baf2e4b21887e963925b21ce2f23304d10a998834c4c582205a2913d13288cb4f1044ab64225a0a71f9118268b54c44df435c7e80205a2313d17710972510446b6522fa06e282d9fd619dcf10b9f3ee489348104498dd1fd6cbec45eb202eeb218836c844b406e2b2168268a34c44ab202eab218836c944b402e2b2128268b34c449b202e9b2188726522da0071d90841b4c52788dcf973b48cf38f8eeefcb92c8180de2ab317e5425cb6407a1102d17f0723a7b7f1c47952d33c49d9239465ecd667a9eea17a17353d4d9ff5a33fefb58c7d19d3a252bd8989de8491591953db7b9312123d985829d9e7ff8565668ecd98dc3279b032fc32a6d44f4e4a4b577e8845fcb31a25a77abc094936aaecb9b1a99ee8744fab418421deeb49cdca98d1c4139d12999a1a3d4c1530b232e6b4f32478d3d23da94d93e23c438d0b5702d94e604e9437293a755823af2731ae75ca88829323e3e20ab832725a2447c729ff823efdb7a6361c38283a31cddf9531b5d9a001294de355c1db723aa446a764e4d87fceba3da77d7a72ca225f24c6f6e7fbe504fbe2b20ee4fbb202d9cf62367deaf63b9fc50354ef38f7313c6819877cf8313c98ff9ee35cd38094448f651cce7cd7f79fc85969e9c9a9d1099e769ee838519f46e79517f43f4fa0e0f9cfc9ade7feec679cffbcfcff7ba904be97ffb924c48611b7435ed66168173d72e14ba380e1fbae3afb7c57ed4cf722cf257dd5df50ffd5572ffd73810b9755d0077db790dd77a9cb9eebbbae42e75014729d4752e87cdfbdedd2be9b9945fcfe0f", +======= + "bytecode": "ed9d777854c51ac673c88247bd36ec95de5b363df484de7baf299bb010929042078dbd9b4cc0828808217441a558110b2a3a0711e984de7b111111f17ee700f782173f207917be3faecf33df73e1bdcfcbd9dfce9e3d3bf3cecc18aba85fbe7ff5ccb95189d1b103a2928736ce488a6d109d989839a57d64eb268db295cb60c4a29c588c134b988c5892134b7162694e2cc3896539b11c2796e7c40a9c5891132b7162654eacc2895539b11a2756e7c41a9c18c0896e4e0ce4c4204e0ce6c4104e0ce5c4304e0ce7c4084eacc989b538b13627d6e1c4ba66e68cc8546f7abf819e746f6c4e568e5a573f28203428d81316e87107b9a303022362c2430282436242c3dde1ee90f090b8c0f0a0204f78707858444c445840843b38c8e38e0f89088a0f70fe73d7218fc0f8d0e0c278d43d7b1d85f108b08c5fd6d50f28e47f97c4635f96bba02fadd6798fb882e3a90dc173dc8778eccb0a28c84b8bb8d023a060786a42f0fcea633cf665855fed4b0bfb9b4744fcd5e30987e039710df0d06505c75fcd4b0bb99447d8d5e10985e0f9eddae0712e2be44a5f5ad03f79045f399e60089e93d7108f7d590157f2d2dc9c47c095e10984e0f9fd1ae3b12f2bf6722fadc6e53cc22e8f270082e7d475c0635f5620f7d2aa5d8947188fa73a04cf1fd7098f7d5961fff4d2aa5ca947d83fe3a90ac173fa3ae2b12f2bfc522fadd2d578845f1a4f65089e3faf331efbb202fefed22a5ca54768fcffe2a908c17346001efbb2022e7c69e50ae21178319ef2103c7f09c1635f56e0f99756a6a01ec1ffc5531681a7889f203c419ef878fbcadca50ae571164f69081ec317780a69e8a6770de2624010151189c8380371f90b82c85f26a2d310973f21885c32119d82b8fc0141545426a2931097df21888ac9447402e2f21b04d10d32111d87b8fc0a41644a7b26a2a722774908a05f20806e94f95464425c6e8420ba4926a26210971b20886e9689c80571290a41f42f99888a405cfc21886e9189e85f10975b20886e9589e82688cbcd1044b74944741be0a5958040be5d660fba15e2721ba40721104d6fe84df5c4a67b077b32a7774c6ee9691f1de71d9a9393958de84c85bfbe7cbf92254a962a5da66cb9f2152a56aa5ca56ab5ea35688231283824342c3ca266adda75ea5a861f93eea9c7457fea73622427467162034e6cc8898d38b1312736e1c4a69cd88c139b73620b4e6cc989ad38b13527b6e1c4b69cd88e13db7362074eecc8899d38b1332776e1c4ae9cd88d13bb73620f4eecc989bd38b1b70f0276bd0001bbde909b700d8901bb1e80805d4f089e008901bb6e80805d77081eb7c4805d1740c0ae2b044fa0c4805d2740c0ae33044f90c4805d0740c0ae23044fb0c4805d3b40c0ae3d044f88c4805d1b40c0ae2d044fa8c4805d2b40c0ae35044f98c4805d0b40c0ae25044fb8c4805d3340c0ae39044f84c4805d1340c0ae29044f4d8901bb4680805d63089e5a1203760d0001bb86103cb52506ec220101bb28089e3a3247966b435cea4010d59589a826c4a51604513d9988c2212e111044f565220a85b884411045ca44140c710981208a92892810e2120441d44026a200888b1b82a8a1c4805d7d08a01a10408d64f6a18610974610448d65228a82b83480206a221311e683160941d45426a2ba10977a1044cd64226a0a71690641d45c26a2c610972610442d2422ba1df0d2ea4120b794d9839a435c5a407a504be101bbdb2101bb7af523a31a346cd4b849d366cd5bb46cd5ba4ddb76ed3b74ecd4b94bd76edd7bf4ecd59b0fd8f5e1a23f7d39319a136338319613e338d1c389f19c98c089fd38d1cb89fd397100272672e2404e4ce2c4644e4ce1c4419c98ca89699c98ce89199c3898138770e2504e1cc689c3397104278ee4c4519c38da0701bb518080dd68c84d7880c480dd0840c06e24044fa2c480dd3040c06e3804cf408901bb218080dd50089e248901bb0c40c06e30044fb2c4805d1a2060970ec193223160370810b04b85e019243160970c08d8a540f0a44a0cd80d0404ec922078d22406ec0600027689103ce91203765e40c0ae3f044f86c4805d022060d70f8267b0c4809d0710b08b87e019223160170b08d8c541f00c9518b08b0604ec62207886c91c591e0a71190641345c26a2c110972110442364224a87b86440108d94892815e2920641344a26a21488cb2008a2d1321125415c9221881e95892811e2321082e8318901bbbe10400320803265f6a1c7202e9910448fcb44341ae2f22804d11332118d84b88c82207a5226a2e110971110444fc944f424c4e52908a2a765227a1ce2f20404d1331211dd0978697d20909f95d9839e86b83c03e941cf0a0fd8dd0909d8f5e91b1d131be7894fe8e7ed3f2071605272caa0d4b4f48cc143860e1b3e62e4a8d176c0eea2373a1b00b7d03f593c1efc45e942ff4a8809f3c15515fad13c28c0075755e8a7e130f7254263791d9a46068684aa7cbf38f5a8a9f463d432a93d6eaabaa6aa63aadaa6aa65aa9aa68a3055b8a9c24c156aaa1053059b2ac85481a6729b2ac054354c55dd54d54c55d554554c55d954954c55d154154c55de54e54c55d654654c55da54a54c55d254254cd5db54bd4cd5d3543d4cd5dd54dd4cd5d5545d4cd5d9549d4cd5d1541d4cd5de54ed4cd5d6546d4cd5da54ad4cd5d2542d4cd5dc54cd4cd5d4544d4cd5d8548d4cd5d0540d4c1565aa4853d537553d538d36d528538d34d508530d37d530530d35d510530d365586a9d24d9566aa54530d32558aa9924d9564aa81a64a34d50053f53795d754fd4c9560aa7853794c1567aa5853c5982ada547d4dd5c7a44fb27e423fa99fd24feb67f4b3fa39fdbc7e41bfa85fd22feb577496ced64ae7e8317aac7e55bfa65fd76fe871fa4d3d5ebfa527e8b7f544fd8e9e9439352ad59b98e84d189b4d6f84372921d183b951dd51f81b5576e694c8d4d4e861f97ec5f5649daba7e83c3d554fd3d3f50c3d53cfd2b3f5bb7a8e9eabdfd3efeb0ff4bcacd73327b74a1eace8de35a54172525abaf2cb06dccd67364e4ef5781392ecbe9a3337c193ded24d37f5c0569eb4b4e8044f76e6f4a69ee814e73a5591e2d999b3db7b12bc69e99ed46649719ea1c6d94bf22f72eed2fc33739b670c4cc92e76f6cf7e466e87f4e494c5177e654c6b97919ceef524a58fc5bc117a7ae121e4646515d8c47dfe7fe8057afe622634aae797e4d4057a136e38e63fb7b4e908c2f315820ef6c903de8d665c9f6ee4fefb5fe80ff542b61b2daccfa91fea453ee846331084172a041d49a39ee7f9207639d7f3106fd447003cbefaca445c9c73490353123dfae3ac3199d3ed2f9b66f1ad93e9bbd0fffcb7a251f86f4577e6ec286f5274eab0c65e4f625c9b94317e931b7a071b7eceb75961be2cfefb0f5cd807b3731070f5c79037e993c2f7425fbcb84fb2d01f7c91b420b723c4d11d7a0ae276f4a9e4dbd1a7c8dbd167ffbf1d5d0c577f0679931649bc1d7daa17c9bc1d2df2c5eda8d0573515712bf91c32fe3955e2a4b97e0701681204d0345980cef5a0b701714d3d110268ba184017a46cf55b80b8af9e0001344304a0bfa5b4f59b80b8b81e0f0134f37a03ba54ca5fbf01586ea0c74100cdbaae80fe6195887e0db05c45bf0e0134fbba01625619e9b180e54efa5508a077af0ba0cbac52d388e5727a0c04d09c6b0ee80a5639ea6cc0724bad2080e65e534057b84a56bf0258aeabb32080debb6680ae6295b57e09b0dc5bbf0c01f4fe35017495abf4f50b80ed02f48b10401ff81a50417679d0cf01b69bd0cf4300cdf329a002ee12a29f016c57a29f85009aef334085d865463f05d8ee463f0d01b44066226e3ec4650104d14299883e80b8cc8320fa5026a2f7202eef43107d2413d11c88cb5c08a28f65229a0d71791782e813998866425c6641107d2a13d17488cb0c08a2cf64229a0a71990641b44826a2cf202e8b20883e9789e81388cba710448b6522fa08e2f23104d11732112d84b87c0841f4a54c445f405cbe8420fa4a26a2cf212e8b2188bef605a2c2ee47ac9f006c8cac318b5497c8ec435f415cbe86f4a12592d37a9f23d37a8bff9fd6bb18ae5e0c7993be9098d6fb5c7f2133ad87a685590559e8e71177dc2516a84c6beb89f3a4a679927294d25fea33aab83ee3a7f457fa6b1f040e113f12f5570813d1b7d425c85bea37ffbfa55e0c577f037993be95784b5da2bf95794b45d06256d77dc79d0aa297b2eaf7acfa03ab6a56b5587519abfec8aacb59f527565dc1aa3fb3ea4a565dc5aaab59750dabae65d575acba9e5537b06a3eab6e64d54dacba9955b7b0ea5656ddc6aadb597507abee64d55dacbadb0747f3e85d88dfc2bb21bfd1764a3c9c47ef40e426764200ed92783c8fde8648de6c8700da2df1801ebd0591ddda0a01b447e2113d7a1322fdb7190268afc4437a743e223fba1102689fc4637af47a4402790304d07e8907f5e8b5880cfb3a08a003128fead1ab11ab20d640001d9478588f5e895847b30a02e890c4e37af40ac44aac9f21800e4b3cb0472f47ace5fb0902e888c4237bf432c46ad01f21808e4a3cb4476bc47a620b02e898c4637bf4f78815e93f4000fd227352fa18c4e51708a2e332111d81b81c8520fa5526a2431097c310442764223a0071390841f49b4c44fb202efb21884eca44b407e2b21782e877998876415c3043f8a744ee41b41442083386ff87cc4e740ae2f20704d16999884e425c7e8720fa5326a2131097df2088cec844741ce2f22b04d15f32119d81b8fc8540e4ef2713d16988cb9f10448644447a3222e2f81d02b37f11917dc8df0fe26240fa5011e167f7e8c990c37bf4777aa9fe5effa0b5b6f432fda35eae7fd22bf4cf7aa55ea557eb357aad5ea7d7eb0d3a5f6fd49bf466bd456fd5dbf476bd43efd4bbf46efb701f2620b4878d0fed65d57dacba9f550fb0ea41563dc4aa8759f508ab1e65d563acfa0bab1e67d55f59f504abfec6aa2759f577563dc5aa7fb0ea6956fd9355cfb0ea5f9c4abd9d970d5e2ec2cbfebcece2e5a2bc5c8c976ff041948ffe5140968fae0d72472f2531cc47ef2a20cd476f3e04516989713efad800f27cf4e982202a2331d047f72540a28f6e5f1044654546face20227d989f70e54446fa4e23227d981f70e54546fa4e21227d900149ff0a22237d2711913ec870a47f459191be1388481f6430d2bf92c848df7144a40f3214e95f5964a4ef1822d207c98af8571119e93b8288f4419222fe554546fa0e21227d909c887f359191be0388481f2425e25f5d64a46f1f22d207c988f8d79039905d1de2520382284026a2aa10976a10446e99882a435caa401005ca445411e2520982284826a2f210970a1044c132119585b89483200a9189a834c4a50c0451a8c848df5e08a152104261323b5128c4250c82285c26a260884b080451844c448110972008a29a321105405cdc1044b56422aa0971a90541545b26a270884b0404511d9191be5c44a40fb2a0c4bfaecc3e541be25207d287ea4a8ff4e562227d7bf45ebd4fefd707f4417d481fd647f4517d4cffa28feb5ff509fd9b3ea97fd7a7f41ffab4fe539fd17f59861fcdfc5b4611cbf0b70c976514b58c629671031fedb30c930f14ddc8cb37f1f2cdbcfc2f5ebe85976fe5e5db78f9765ebe83978bf3f29dbc7c172fdfcdcbf7f0f2bdbc7c1f2fdfcfcb0ff0f283bcfc102f3fcccb8ff072095e2ec9cba578b9342f97e1e5b2bc5c8e97cbf372059f44feca43227f98f1a65e32237f6521913fcc78536f9991bfd290c81f66bca98fccc85f4948e40f33e0d45762e48f6efc80cc1f7d3f4010454b0cfdd1372b20f5475fc010443112637ff4e802c8fdd1130e0451acc4e01f3d1b02927ff4080941142731fa470fdf80ec1f3da34310792486ffe8d70d20fd473f822088e225c6ffe8e72320ff47bf32218812240600e9f7392001483fe32188fa498c00d20008200348e32410445e8921401a6102a40069200a82a8bfc418200de101728034d207413440e6f0777f88cb0008a2449988fa415cbc10440365228a87b824401025c944140771f1401025cb441403718985204a9189a82fc4251a8268904c44bd212e7d20885225060169e61382a81704519acc5e940a714983204a97892805e2320882284326a224884b3204d160998812212e03218886c8443418e232048268a84c44e910970c08a2612293805310afcd30219c87cbec4443212ec3209d68b8f428e0144814907a143d8ed2481d0db3d190268d47d2d82f0ddcd220398d70d36c024d05d0b40bcd99d0fc144d2ed1441ecdc2d18c274d57d2d430cdebd21c3a4d805b065995b28cd29651c632ca5a4639cb286f19152e1711acc807902af172655eaec2cb5579b91a2f57e7e51abc1cc0cb6e5e0ee4e5205e0ee6e5105e0ee5e5305e0ee7e5085eaec9cbb578b9362fd7e1e5babc5c8f97ebf372242f47f172035e6ec8cb8d78b9312f37f14944b0312422d804f24df086cc8860434844b01104d1389911c1284844b00104d19b322382f52111c14808a2f1322382752111c17a10446fc98c08d6864404316b7826c88c08d684440431ab09df9619110c87440431ab0927ca8c088642228298f5f1efc88c080643228298f5f19364460403211141ccfaf8c932238201908820667d7caecc886075484410b385d9149911c1aa908820660bb33c9911c1ca908820660bb3a93287c5f3202e532188a6c944940b71814cd1f84f97896812c4653204d10c998826425cde81209a2913d10488cbdb1044b364221a0f71790b8268b64c44e3202e6f4210bd2b3322580982e80d08a239327bd1bb10973910447365229a0571990d41f49e4c4433202e332188de9789681ac4653a04d1073211bd0f71f90082689e4c4473212eef4110cd171911cc834404313b9e2f90d989e6415ce6433ad102e911c13c5044b0223d8ed2481d0db3d190268d47d2d82f0ddcd220398d70d36c024d05d0b40bcd99d0fc144d2ed1441ecdc2d18c274d57d2d430cdebd21c3a4d805b467dcb88b48c28cb6860190d2da3916534b68c26978b0836e50348cd78b9392fb7e0e596bcdc8a975bf3721b5e6ecbcbed78b93d2f77e0e58ebcdc89973bf372175eeecacbdd78b93b2ff7e0e59ebcdc8b977bf3721f5eeecbcbd1bc1cc3cbb1bc1cc7cb1e5e8ee7e5049f4404e3211141cc92e7553223827190882066c9f36a9911c118484410b3e4798dcc88605f484410b3e479adcc88606f484410b3e4799dcc88604f484410b3e479bdcc8860774844b00704d1069911c1ae9088603708a27c9911c1ce9088601708a28d3223821d2111c14e10449b644604db4322821d208836cb8c08b6854404db41106d9119116c0d8908b68120da2a3322d81212116c0541b44d6644b0392422d8028268bbcc61f16d1097ed10443b6422da0271d90a41b45326a24d1097cd1044bb6422ca87b86c8420da2d13d17a88cb0608a23d3211ad85b8ac8320da2b13d16a88cb1a08a27d322382cd2088564110ed97d98bf6415cf643101d90890873b8e45e08a2833211ed82b8ec86203a2413d10e88cb4e08a2c332111d82b81c86203a2213d10188cb4108a2a322238290557c465308e763323bd11188cb5148273a263d22381514116c4a8fa3345247c36c34a449e39134f64b03b734484e23dc349b40530134ed427326343f45934b349147b37034e349d39534354cf3ba34874e13e096d1d732a22d23c632622d23ce323c96116f1909978b08f6e303485e5eeecfcb037839919707f272122f27f3720a2f0fe2e5545e4ee3e5745ecee0e5c1bc3c849787f2f2305e1ececb237879242f8fe2e5d1bcfc282f3fc6cb99bcfc382f3fc1cb4ff2f253bcfc342f3fe39388e0d39088e033886f02d71d3223824f4222824f4110159719117c1c12117c0282e84e9911c1c72011c14c08a2bb644604474322828f4210dd2d3322381212111c0541748fcc88e0704844700404d1bd32238243211141c826f2aefb6446040743228290f32c5cf7cb8c08a643228290f32c5c0fc88c08a642228290139a5c0fca8c08a640228290139a5c0fc98c082641228290139a5c0fcb8c082642228290139a5c8fc88c08f687440421a7e8ba4a881c16773d0271290141545226a287202e0f4310959289e80188cb831044a56522ba0fe2723f0451199988ee81b8dc0b41545626a2bb202e774310959389a838c4e54e08a2f23223825e08a23b20882ac8ec45e5212e1520882aca445416e2520e82a8924c44a5212e6520882acb445412e2520a82a88a4c4495212e90cdf05d55652282ec6ee7aa0441544d6444701a2422d80fc2b9bacc4e5415e20239970382c8a711c169a088603f7a1ca5913a1a66a3214d1a8fa4b15f1ab8a541721ae1a6d9049a0aa069179a33a1f9299a5ca2893c9a85a3194f9aaea4a9619ad7a539749a00b78cc72c23d3321eb78c272ce349cb78ca329eb68c672e17117c960f203dc7cbcff3f20bbcfc222fbfc4cb2ff3f22bbc9cc5cbd9bcac78398797c7f0f2585e7e95975fe3e5d779f90d5e1ec7cb6ff2f2785e7e8b9727f0f2dbbc3c9197dfe1e549bc3c99977379790a2fe7f1f2549f4404f3201141482adfd54a664430171211849cade36a2d332238091211849cade36a23332238111211849cade36a2b332238011211849cade36a273322381e1211849cade36a2f3322380e1211849cade3ea203322f83a242208395bc7d5516644f0554844f03508a24e322382632011c1b110449d654604152422980341d4456644300b1211cc8620ea2a3322f8322422f80a0451379911c1172111c1972088bacb8c083e0f8908be0041d443e6b07877880b64036a574f9988ba425c201b50bb7ac944d419e202d980dad55b26a28e1017c806d4ae3e3211b587b84036a076f59589a82dc405b201b52b5a26a2d61017c806d4ae189911c1e72088201b50bb6265f6a218880be49020579c4c447d212e9043825c1e99887a435c208704b9e26522ea0971811c12e44a9089281ee20239f6ced54f26a238880be4d83b975764441072feadf12c84737f999d08937ff4423a517fe911c1f9a088e0b3f4384a237534cc46439a341e4963bf34704b83e434c24db309341540d32e346742f35334b9441379340b47339e345d4953c334af4b73e834016e19132de31dcb986419932d23d732a658469e654cbd5c44701a1f409acecb337879262fcfe2e5d9bcfc2e2fcfe1e5b9bcfc1e2fbfcfcb1ff0f23c5e9ecfcb0b7879212f7fc8cb1ff1f2c7bcfc092f7fcacb9ff1f2225efe9c9717f3f217bcfc252f7fc5cb5ff3f2125efe8697bff54944f01b4844f05bc837c1733223825f4322824b20889e971911fc121211fc0a82e8059911c1c59088e01710442fca8c082e8244043f87207a496644f0534844f03308a2976546043f8644043f81207a456644f0434844f02308a22c9911c1059088e04208a26c9911c17990882064b4c6a5644604df8744043f8020ca9119119c0b8908be074134466644f05d4844700e04d1589911c1599088e06c08a257654604674022823321885e93392cfe2ac405b32ee0759988c6405c30eb02de908948415c30eb02c6c944940571c1ac0b785326a297212e987501e365227a11e2825917f0964c44cf435c30eb0226c88c084e87207a0e82e86d99bd6802c405b3767ba24c44e3212e98b5dbefc844340ee28259bb3d4926a2d7212e98b5db9365229a0471c1ec46922b13d144880b66379229222382907179631a84739ecc4e940b71c16c8c94273d22b81014119c468fa3345247c36c34a449e39134f64b03b734484e23dc349b40530134ed427326343f45934b349147b37034e349d39534354cf3ba34874e13e096b1d832beb08c2f2de32bcbf8da329658c63796f1eda52382791d9a46068684aa7cc34fe9dda6d2bba8eda4b683da766adba86da5b685da666a9ba86da4964f6d03b5f5d4d6515b4b6d0db5d5d456515b49ed676a2ba8fd446d39b51fa92da36651d3d47ea0f63db5a5d4be339565dc60976276296a17975dfced52c42e865dfce8fffb17b533d4fea4769ada1fd44e51fb9dda496abf513b41ed576ac7a9fd42ed18b5a3d48e503b4ced10b583d40e50db4f6d1fb5bdd4f6d8ff4805bb94b74b39bb94b54b19bb94b64b29bb94b44b09bb3c629787edf2905d1eb4cb0376b9df2ef7d9e55ebbdc6397bbed72975deeb44b71bbdc6197dbed729b5d6eb5cb2d76f9975d6eb6cb4d76b9d12ea65d9ad8a5b15d1ad9a5a15d1ad825ca2e9176a96f977a76a96b973a76a96d975a76a9699708bb84db25cc2ea17609b14bb05d82ec126817b75d02ec52c32ed5ed52cd2e55ed52c52e95ed52c92e15ed92609778bb78ec12679758bbc4d825da2e7dedd2c72ebdedd2cb2e3dedd2c32eddedd2cd2e5dedd2c52e9dedd2c92e1dedd2c12eededd2ce2e6dedd2c62eadedd2ca2e2dedd2c22ecdedd2cc2e4d4de74c5ee7dc5ee76c5fe7fc5fe78c60e71c61e7ac61e73c62e7cc62e75c63e7ec63e77c64e70c65e79c65e72c66e7bc66e74c67e7dc67e76c68e7fc68e78c69e71c6ae7ac6ae73c6be7cc6be75c6ce7ec6ce77c6de70c6ee79c6ee72c6fe7bc6f67434067d34067634167f34167834267134367a34367334467c34467534567e34567734667034767934767234867b34867434967d34967634a67f34a67834b67134c67a34c67334d67c34d67534e67e34e67734f67035067935067235167b351278de824169d54a3937c74d2914e82d249593a494c27ade9243a9dd4a7930c75d2a34ec2d449a13a495527cdea245e9d54ac939c75d2b54e02d749e93a495e27edeb24829dd4b0932c76d2c74e42d949313b4967e75efa9d652cb58cef2de307cbd0966159c632cbf8d132965bc64f96b1c2327eb68c9596b1ca32565bc61acb586b19eb2c63bd656cb08c7ccbd868199b2c63b3656cb18cad96b1cd32b65bc60ecbd86919bb2c63f7c55fb9909148634fa1bf45427cf02460ec86bcb8bd90278125c21e96dc675fdccec28276db2ebb2088be1184c81df09ff77f7b6110b9cfbbec8020fa560822f7857fa0db4c4111b92f74d90641f49d0044eebfff05dd8f0b82c8fd77972d10444baf3322f7a5fe92beb8ae1691fb522e9b2088bebf8e88dcff24d037fcd52072ff934b3e04d10fd709919b13e951e84a11b93997f51044fa3a20725fce919e19af0491fb722e6b2188ac6b8cc87d258ef4707d3944ee2b71590d41b4ec1a22725fa923fd0ae110b9afd4652504d18fd70891fb6a1ce9e7da3f21725f8dcb0a08a2e5d70091fb6a1de977eda510b9afd6653904d14f3e46e42e88230d00fc1d91bb202ecb208856f81091bba08e345272212277415d3404d1cf32a74556405c7e86205a2913d17288cb4f1044ab64225a0671f9118268b54c441ae2624110ad9189e87b88cb0f10446b6522fa0ee2b21482689d4c44df405c303b40acf7192277c11d6912098208b303c40699bd683dc465030451be4c446b212eeb208836ca44b41ae2b2068268934c442b212eab208836cb44b409e2b21982688b4c44f910978d10445b7d82c85d3847cb38f7e8e82e9ccb5208e86d327bd11688cb56482f4220fadf70e4b4b69e384f6a9a2729678cb28c3dfa0cd5bd548b53d333f5193ffaf33ecbd89f39352ad59b98e84d189b9d99d7c19b9490e8c1444bc9bef02f2c2b6b7ce6e456c98395e19739a54172525abaf2436c2a32b37172aac79b9064a3ca99139bea894ef7b4ce200cf15e4f6a76e6f4a69ee894c8d4d4e861aa88919d39bbbd27c19b96ee496d9614e7196a9cbf12c8f626b3a3bc49d1a9c31a7b3d89716d52c6149d1c191757c49599db32393a4ef917f5e9bf95d768504674629abf2b33af79c6c09466f1aae84db91d53a3533273ed3f67df9cdb213d3965b12f1263070afd72827d7159070b7d5981ec6731873e75079ccfe241aab79ffd181eb28cc33efc181e2a7ccf71ae69604aa2c7328e64bde9fb4fe4ccb4f4e4d4e8044f7b4f749ca84fa3f3ca8bfa9f2350f4dce7e4c6b37ff633ce7d5efef35e2a81efe57f2f09b1dcff36c8cb3a02eda247cf7f6914317cdf55679debaa5de85ee4b9a8affa1bea7ffaeac57f2e72feb28afaa0ef16b3fb2e75d9b37dd755ec2c8a62ae73488a9debbb375ddc77b3b289dfbf01", +>>>>>>> feat: globalvars in public noir "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -367,7 +371,7 @@ } ], "returnTypes": [null], - "bytecode": "cd9d795793d716c60953cfaded37687bb5751e3392c4910022283880f31cc81b8c86242601c1398e9d9b6cb493761451f4ba6a6be7d1ced3e907e8ba7e83cef36c6f52e4220a9b24ef133dacc51fac67adc7b37fd939ef3e278f2b873e33345cc8fb6fec6c99dfddb8a92cd856d912682c77fbfdb1e375aef9736627a8d0c088459c586c889d72857dd10dcd5ad4d7d8114fd0e7a5166389d5aad9cd9ac962721bcdce0687cd68b53594384c0e93cd61f3981d168be6b03aecce06a7dde834592d9ac96b735abcc69e9f5b3e2f35eafbb1e21775abee459907c07872a1e6d1c2112dd0d141b7c88b746bf2d7202fe6d16dff8e9d280bfbfc7e5fd3e144acabde1768f26b3d95e85c86e936dd16c67f56d41cf26bc3e34762c76a83ad64c88b1d2f0f062251ca4be8f78f9dae0c86355f532005a9e374241a0cbb9bb43acded49c4baab3477c8150ebbdb29df90889da9d39a7c91a816ae0e78b43643ef2a0a11ab3853e60bb8c3ed953ecdef59103a5474cce5f1e417c63a6b826e0f1514f5545e5470894051ac736e4b7328f1af9ebff30c9df5d160e87cacbbc217d61aa3be562d7672514b30ead302d1c3989772b8fe223be2f1344c4cbc7cfb88f3cc1e31a28d116f9707fabf593b006fd6e100b62308c005d084396c9f618ab4cfc83bb8f6b9836b9f91b9689f6100b67700da6724a07de070465c2b384378c833fa016741c7ced2318d02101e0df0488b4e965b0fa9d245fa1b00b27d8d1acd6d5fa3b9ed6b94a16fcc23e5c6bcbe059122bbea70e0ec3a267eb46752cb37e47e86fdcfa519765972bfd1fa0db10506ba6a88edff777eefb28a7230d416a786dae42cdb33d41616f7a0282ebc84a4f8d2507b63bfa11673a41aa5bf1f98b7d658c188e338713c274ee0c4899c3889132773e2144e3472a28913cd9c68e1442b27da38b18413ed9ce8e04427274ee5c4699c389d136770e24c4e9cc589a59ce8e2c4324e2ce7c40a4e9ccd89959c38470c386059746c1aa6caa487d9ab6be331cd410c58cfe4703837655b5945af87277b3ab31174cee6f8e862cca6b2b2cb3d8cd9d12947d079f61a1cec1c9956567a8587d39b391d1782ce73d7e6d86bf56652d9cc813cec99d19985a073ee1a5e0ad8d2ad6cfa601ed6f4e9cc40d079fe1a5f9918d3a96c2ae7614c8fce34049d17aec38552e350953986f2b00f4dc789a0f3e275ba6e33739595002ea5ec083a2f5dc7cb48fb609559d3f5b00f4ec786a0f3f275beaa750c549939130fc7c0742c083aaf2870916dbcb23263861e25deabe99810745e55e49adf78796593b3f130f7a7330541e735853e0431f75636315b0f6b1f9d49083aafabf41191e6f5a616661aafcba387ce04049d37724147a7a149be8e307903c1e74d25f9bc8a30790dc1e72d25f9bc8c307905c1e7bc927c5e4498bc84e0f3b6927c9e4798bc80e0f38e927c9e43989c43f07957493e671126cf22f8bca7daf4939c7f4ce310789e41e0795fc9f6790f61f23e82cf074af2790761f22e82cf874af2398f30791bc1e72325f9bc8930790bc1e76325f97c8430f918c1e71325f97c8030f910c1e75315f90c0354361681582ad93d9f204c3e45748fc42660bb17076bb43ab7c7d7d6a14cfafe42def0b1e3c64f983869f294e46dbfc56a2bb13b9c53a74d9f317356a9abacbc6276e59ccf0c794c42a78a8bef5473e25c4e9cc789359c58cb89f3397101272ee4c4459c58c789f59cb898139770e2524e5cc689cb39710527aee4c4559cb89a13d770e25a4e5cc789eb39d1cd890d9cd8c8891e4ed438d1cb894d3908c9790121b926c41efc858a21390f2024a721e87ca96248ae0110926b44d0f94ac590dc7a4048ce8da0f3b58a21b9b58090dc3a049d6f540cc9ad0684e4d620e87cab62486e252024b70a41e73b154372cb0121b915083adfab18925b0a08c92d43d0f941c590dc6240486e0982ce8f2a86e4ea0021b97a049d9f540cc92d0484e41621e8fcac62486e3e2024b70041e7171543723580905c2d82ceaf2a86e4e6024272f310747e53f21ef95784c96f083ebf2bc9e76784c92f083e7f28c9e74784c94f083e7f2ac9e77b84c90f083e7f29c9e75b84c977083e1795e4f335c2e41b049fbf95e4f325c2e42b009fe407802aa6e4aa117cbe80f031a8d840c9970de2628020ca57f23d761161f2370450819280fe4498fc050154a824a0df11267f400015a9b90b15425c8a20888ad544940f71298020ba41454437014aab8240166a765031c4e506480709c563733741627355d573e7d5d4ce5fb070515dfde2254b972d5fb172d5ea356bd7ad7737347a346f131f9bdbc0057a7c9cb891133771a29f139b3931c089414e0c71e2664e0c73628413a39cd8c289ad9cb88513db38b19d13b772e2364edcce893b38712727eee244b99b5563acba8755f7b2ea3e56ddcfaa0758f5600ee273f200203f270f42b6e3312a26e8e43e40844eee87001aab62884eee01a4e8e45e08a0712ae6e8e46e40904ec62080c6ab18a5db0988d2ed82e099a062966e3b204bb7038267a28a61baad8030dd36089e492aa6e9da0069ba76089ec92ac6e95a0171ba2d103c5354ccd3450179ba16081ea38a81ba3020501781e031a998a80b0112759b2178cc2a46ea0280485d1082c7a262a6ce0fc8d43543f058550cd56d0484ea3641f0d8d4bc69b6425c6c1044256a2232435c2c104476351119212e260822879a8826435ca6401039d5443411e232098268aa9a88c6435c2640104d5313d15888cb3808a2e92a26ed7c104063208066a8d943d3212e33208866aa89682ac4651a04d12c351139202e4e08a252351195405cec10442e351195425c5c1044656a229a097199054154ae22a29b01a56d8040ae50b383ca202ee5900eaa503c7077332470b7c1b77193bf39100c6d0e47a22dad5bdadab76edbbe63e72eb95bc6e41eb957ee93fbe501793015bcebf78223be6956dea9b786066b0e567597de55951873b0aabbf5aecaedcdc1aaeed1bb2aa775801859577d95cb6c2ba10b791e92770a9277257fef4efede23688ea04a41b30555082a175426c825a854d02c413305cd10345dd03441530539053904d9059508b209b20ab208320b3209320a9a2268b2a04982260a9a2068bca07182c60a6a12e415a409f2086a14d420c82d68bda07582d60a5a2368b5a05582560a5a2168b9a06582960a5a2268b1a07a41758216095a286881a0f9826a05d5089a2768aea06a415522158d4b85e752f1ba54002f15d14b85f85231bf5410907609da296887a0ed82b609da2aa85d509ba02d825a05b5088a0a8a080a0bda2c282428282820a859905fd026411b05f9046d10c9f7b6bc57de27ef970fc8b84c48921df2903c2c1f940fc987e523f25179441e958fc9c7e513f249f9947c5a1e939df2b8ec9227e449d92d4fc9d37ddf819ee8fbcaf1a46f6af332e97bd5e5bd3d3ba02e1b795fef36aac346dedfb717676d231fb87c43cfd246c6fb3f15b2b291573d5ab2b09174f5f329631b39e04890a18d3c34f09332231b7978b0c76d0636f2c1c19fd969dbc887b8077f9a36f2617e7a48cb463e32d40892868d7c74e83966481b79249d6168081b7934bd898ab5918fa53b963136f2f1f467bb416de413990c8883d8c827339b3207b4914f653aaa0e60239fce7cdebdca461ecb6668bec24676663779f7b391c7b31ddf2fb3915dd99f01fe6f234fe839485cb29127f59d46feb191dd7a8f34491b790af1ff3e4feb3f18c5e34763c76a83ad943cf51c2f0f062251ca4b00ce83a72b8361cdd714480db91de71ac39a3baad59893274353ad1689b89bb444acbb4a73875ce1b0bb9df20d89d8993aadc917896ae1ea80476b33f4aea610b19a3365be803bdc5ee9d3fc9e05a14345c75c1e4f7e61acb326e8f65041514effadaed99b5bdcfe484161ac6b6e4b73a8da4b4537762e0ebb43b1ced4df89619df5d160a8231ed7df10f1f8ff00", + "bytecode": "cd9df973d35517c69b6e5ed119f53f505f505196ac4dc2da742fb42c2dfb9e36df94409a84242d2dab71c15d935370c5958220a2ef3bee3beedb41fdd579fd1fdc7745130b42a13dcdf2046e67fa43e69979b8e79393fb3df7f661b2fb98c9ff55c9ff13ffad097a3b37d684fb1a7a429db5de6030b1bfcd33afb13e45e52641ac90c44a53e2294f34105fdf6dc4039d03c9147d596d3357d9ed86d36a586c16afd9eaee7039cc76474795cbe2b2385c0e9fd565b3192ebbcbe9ee703bcd6e8bdd6658fc0eb7cd6f1efab9fccb6a73613f76fca2ae287851d611301e5c60f88c68cc080d0cd0e57c9cae48ff9af878095df99fc49335d1403018e8da934a1c680f84ba82c65025052ec37265c116e67f56d41d091ae3930f25f6b5867bc95492d85f1b0ec5e254922adc3f71b8211c35025da10ca481c3b17838eaed32da0caf2f9538d46478239e68d4db4fa5a654e2489bd11588c58d6873c867f4994eaea21cb18a2335819037dadf103082bef991dd15fb3c3e5f697962b025ecf55159c550e515652708542406e7f4744752170ebd2e310db6c7c391a389437581a8d1190ff41a89830b7bc2f180118aefc1bc95e30b2f722099ccc2c422cb574d382aec1113fa04f12ade35fcc33a00f8b08e07b09d40002e80262c62fb5ca249fb5c73b5d43e574bed734d31dae71200dbab01ed730da07de070269c2b386378f0ff0a079c071da748c7321140f85a80475674f2dc7a48972e2abc0120dbd7c46ba5edeb5a69fb9a683a35e6917663dea9059126bbea78e0ec7a5d72efd0a4566a2afe0cfbf4891976697abf31860db165263a6b881dfebaf4e4b22a8a30d4566686daf42c3b34d496570ea1a82c3f81a4f2c4503b6ed8508b39524d2cbc1f848fd62425889325718a244e9544b3245a24d12a893649b44ba24312ab24d129892e49744be234499c2e89332471a624ce92c4d992582d891e49ac91c45a49ac93c47a496c90c446496c92c466499c238973d5880396ad804dc33227ed61f517b4f158e62206ace78a389c5bf2adace9a4872f7f3acd083acf17f9e862cea7b286d33dccf9d16944d079e11c1cec5cb95656778687db9f3b9d7a049d17cfcdb1d7eecfa5b29a913c9cb9d1a945d079e91c5e0a38b2adac7a340f7bf6743c083a2f9fe32b13733695cd923cccd9d1998da0f3ca79b850ea1cabb219637938c7a6331341e7d5f374dd66952a9b06b8949a8ea0f3da79bc8c748e56992b5b0fe7e874dc083aaf9fe7ab5ad7489555e5e2e11a998e1341e70d0d2eb2cd675666cfd1a3ca7f361d0782ce9b9a5cf39b4fafcc9a8f8775381d1b82ce5b1afd11c47ab23273be1ef653742c083a4775fa1391e1f7671666995290c7109da9083a6f17834e8186163e8a30791bc1e71d2df9bc8930790bc1e75d2df9bc8e307903c1e73d2df9bc8a30790dc1e77d2df9bc8c307905c1e7032df9bc88307909c1e7432df93c8f307901c1e723dda69ff4fc63998cc0f31c02cfc75ab6cf4708938f117c3ed192cf0708930f117c3ed592cf7b0893f7117c584b3eef204cde45f039a6251f46981c43f0f94c4b3e9f204c3e45f0f95c473e97002a9b8440fc8596ddf319c2e47344f77c814dc01e5a146e31dabcbe40df8036e9fbaf4a2e9f3479cad4f46dadcdeea872badcd3a6cf98396b76b5a7a6b6aebea1b1a979cedc63a61221a1d322c5775a25719e24ce97c40592b85012db24b15d121749e262495c22894b257199242e97c41592b852125749e26a495c23896b25719d247a25b143123b25d127898624fa25b14b12d74b6240123748e2c62284e4360042721b117bf0d73a86e4d603427201049d6f740cc9f90121b92e049d6f750cc9f90021390341e73b1d43721d80905c2782cef73a86e4d60142725e049d1f740cc9ad0184e4d622e8fca863486e152024b71a41e7271d43722b0021b995083a3feb18925b0608c92d47d0f945c790dc1240486e2982ceaf3a86e4160142728b11747ed33124d70608c9b523e8fcae63486e012024b71041e70f1d4372f30021b9f9083a7f6a798ffc07c2e44f049fe35af2f90d61f23b82cf5f5af2f90561f22b804ffa025e4b403f214c7e8600326909e80784c98f1040a55a02fa0e61f23d0450999680be41987c0b0154ae6352ae15c1e76b089f0a1d1b28fdb6415c2a20882af544540a71298320ba404f44251017130491d272a73e8e30f90b02e8423d7b48415c2e84201aa727a24a88cb05104417e988e85240692d10c817ebd941e3202e17413ae862cde3739742e2732dadf3e62f58d8d6be68f192a5cb96af58b96af59ab5ebbc1d9d3ec3dfb53eb061a31c9f0b4ac19e6e490c496258122392b84912a3921893c4b824f64862af246e96c43e49ec97c42d92b85512b749e27649dc21893b2591af17d584a8de20aa378aea4da27ab3a8ee12d55b44f55651bd4d546f17d53b8a10a5e3db01593abe03b2255fa7639a8e6f05c4e9f83608a0493a06ea78172051c7b740004dd63153c7370142757c3304d0141d63757c032057c73742004dd53159c7d703a2759c800032eb18aedb0108d7ed84e0b1e898aedb0648d76d87e0b1ea18afdb0288d76d85e0b1e998afeb03e4ebfa2178ec3a06ec7a0101bbcd103c0e1d13767140c2ae0782a74ac7885d1410b18b41f03875ccd8450019bb4d103c2e1d43762140c82e0cc1e3d6f3c6d905717143104dd3135115c4c50941345d4f4476888b038268869e88ac10171b04d14c3d1199212e1608a2597a229a0271990a41345b4f4493202e932188aa754cdd7543005d0701e4d1b387aa212e1e08a21a3d11cd82b8cc8620aad513d10c88cb4c08a23a3d114d83b84c8720aad713511dc4a51e82a8414f443510975a08a2461d115d06282d0881dca4670735405c1a211dd4a479f0ee3248f02ed81d0a47364563f19edecd7dfd5bb66edbbe63275fcf09be816fe49bf866dec5b7f0ad7c1bdfce77644278c3de74c4b7cff29d85d6d1612fc2aaee2a745555e622aceaee4257e5f5176155f714ba2ab77d8438d981f6268fd551455f95f888ef54c477a57fef4effdea368aea2398a9a1535296a54d4a0a85e519da25a45358a3c8aaa15cd56344bd14c4533144d57344d915b914b91535195228722bb229b22ab228b22b3a2a98aa6289aac6892a28d8a36280a285aafa84b915f91a1c8a7a853518722afa2758ad62a5aa368b5a2558a562a5aa168b9a2658a962a5aa268b1a2458ada15b5295aa86881a2f98ae6296a55d4a23211b94c882e13b3cb04f13251bd4c982f13f7cb04023391c14ca830133bcc041369a7a21d8ab62bdaa668aba22d8afa15f529daaca857518fa2b8a298a2a8a24d8a228ac28a428aba150555fa33ce494e31f100efe63d7c2fdfc7f7f303fc203fc47bf9617e841fe5c7f8717e82f7f120efe703fc241fe443fc141fe6a7f9083fc3cf9efa6ef4d4a9af224ffb6636314b61ef3c278776c2826cf8dfedb4001ba6537b72de363cec3198a70def1efe74c8cb86f79cf988c9c386ef3dfb3995b30ddf37d2c32e471bbe7fe427664e36fcc0688fdd1c6cf8c1d19fdd59dbf043d20090a50def95a788ac6cf8e1b146912c6cf891b1e799316df8d16c86a2316cf8b1ec262bd1861fcf763c136cf889ec67bc516d785f2e83e228363c98dbb439a20defcf75641dc1860fe43ef79e65c34fe6333c9f61c307f39bc087d9f0a17cc7f8d36cf8a9fccf02ffdaf0e1420e14276cf8e9c24e25ffd8f091428f36691b7e06f1ff409f2dfc80944cee4dec6b0df752fae4b3bf361c8ac5a9240538171e6e08478d40572833e80e3cd71935bc71a3c59a3e215a5a8d58ccdb65a412879a0c6fc4138d7afba9d4944a1c6933ba02b1b8116d0ef98c3ed3c9d594235673a42610f246fb1b0246d0373fb2bb629fc7e72b2d4f0cb684bd3e2aab28eabf75a07e538f37182b2b4f1c98d3d31d69f653c5b8c145516f243198799dba68b03d1e8e0c249385374432f937", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/examples/parent_contract.json b/yarn-project/noir-contracts/src/examples/parent_contract.json index 5774f144ca5..48a4b03e78b 100644 --- a/yarn-project/noir-contracts/src/examples/parent_contract.json +++ b/yarn-project/noir-contracts/src/examples/parent_contract.json @@ -183,7 +183,7 @@ "kind": "field" } ], - "bytecode": "ed95cd4ac3401080b36922820abdd79f5748dfc0a6587f4091f609625cc2e2ba1bb689d4e3bcc1fec48b571b4544109fa0af51e8c3f4273d941e7a498ed9c30ec30cdf7ca799ec2c833f9f06e193cf47bd9485dd8052c8fb9dbbcb0ba51db4a3e8ee2aee21f8f205a194446f063e078445141ba9f4f4dc2bf7da07a5115eb542871508e51d2182d799d5ac46e9a8bc9291b286d4901a5243d47a3d65ade39353f90e1fb7fc4537ec22daa888c882bccbd930d1962a3bb2edc14f8f0b4c22b6bc2ae63f5cfcf7e90325e1f2d224843305df573888575eda710cfcf67144860916d7ec118fd0566e6fb6379a85b2ebacd55d18dfa4cfb1da2f720b8d07098f2752b5e6", + "bytecode": "ed953b4ec3401040bd8e8de83027089f0b3837208e081f0984921318b3b2562cbbd6c646a19c1becc734b4c42084901027e01a9172987c9c224a91c62ebdc58e46337af3aa99fc3487df8086d163c0c7fd8c45bd90522806dddb8b73a51db4a3e8ee2aee21f80c04a194c4af063e8684c5141ba9f4f4ccaff63a0795117ebd425e0d42455788f0656679f5281d56573252369006d2401a885aafa7bc7d747c22dfe0fd863feb965d461b95115950f4381ba5da525547767cf8ee738149cc9657c5fc458bff2ebba7245a5e9a9470a6e0eb1287c9ca4b3b8e819f018ec928c5e28a3de031dacaedcdf696572abbce5add85c975f694a8fd32b7d06498f2e45faaf61c", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -217,7 +217,7 @@ "kind": "field" } ], - "bytecode": "ed954d4a0331188627d3191154e8be6afdb9c0f406768af50714694f308e6108c6644867a42e7383fcb41bb7761411413c81d7103c8cd6e9425c14ca64d764918f8f2f3c7936c93bda1ff3b71047f1754887dd9cc49d08635ef4dae74787527960ced09f375c01fc29640863948c357fec239260a885549f0741b5d55aab8c08cc0aad1b102ada8c45775f4edd8cd24675252d848558888558889c7d4fa3c6e6d6b6b8e70f67f456d5dcb2baa0acc0e145879241a61c59f5ca56c05fba9441949069aae8f7f867bfc82f318aa74993214a247f3e8651faeba53c4ff3d71e4cd02083ec845cc121f8d7bb7f8fd7eaa5b2efcdd47d3e39cd6f52b95af60e98f4339a7ed8085b44c8708435ec33b4100bb110b311d6dcd9dd5ba20813b2f90d", + "bytecode": "ed953d4ec3301886e334416c841314283f6b7a039a8af22381507b8210acc8c2d8919ba032fa06fe6917561a1042488813700d240e03251d104325146fb5077ffaf4598f9fc57ec77b13fe1ae138b98ae8a85790a41b63cccb7ee7ecf0402a0f2c18fa8b862b803f460c618cd289e60f0344520cb590ea633facb7da6bb511a159a1c08050d9612cbefd7402334aebf595b41016622116622172fe3d8d9b1b9b5be28edf9fd21bd570abea82aa0287975d4a86b97264dd2bdb217fee5106514a66a9a2df92effdbcb8c02899254d8e2891fce908c6d98f97f23ccd5ffa3045c31cb263720947e04feffe3ede082a65df9babfb7c7a525c6772b5ea1d301de4347bb711f61f21c311d6b4cfd0422cc442cc46586b7b677789224cc8d617", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/examples/public_private_contract.json b/yarn-project/noir-contracts/src/examples/public_private_contract.json index cac0c7687ea..c73fe8715bf 100644 --- a/yarn-project/noir-contracts/src/examples/public_private_contract.json +++ b/yarn-project/noir-contracts/src/examples/public_private_contract.json @@ -29,7 +29,7 @@ } ], "returnTypes": [null], - "bytecode": "b590414ec24018855b685d8827400f019ec09650c51435c005269ddf66e23853675a03cbb941670a3b7794aa3124265ec00370012f430c0b77864df5ed5ebee4bd97373f59a8779fa2e8cee7d32063510f51aa5623efeabcaf8d63ef81ee3e78f01b7cb9010c42022b8c696db6e668b3b54cfb583dfb82504ae28556d598b09842916bf375d6a9a76ebb764427cf9fd472c81f8d6da9558f33991a4bd78f556f01174062b6fba5f88804a014c2d3090fbb439012c5a0d5eb05a0c41302cd4cc3d66a3d8298c814c4806198da3f6b9cbf58b3f60943621610a0f83a99bb4b0fe386a3ca90236c9aeebf7655fd870c51d974547599dd27835be31e9613811255eebc6e95e394279f79fe0d", + "bytecode": "b590414ec24018855b685de8424f801e013c812da18a296a800b4c3abfcdc471a6ceb406967383ce1476ee285563484cbc8007e0025e861816ee0c9beadbbd7cc97b2f6f763257ef3e45d19dcf2741c6a22ea2542d87ded5794f1bc7de01dd5d70ef37f87203188404561873b8de98a3f5c632ad63f5ec0b422989e75a5523c2620a45aecdd759bb9e3aadda11ed3c7f528b017f34b6a5965dce646a2c5d3f56bd055c0089d9f697e223128052084fc73cec0c404a148356af1780124f0834350d5babd510622253107d866162ffac71fe62cdca270c89694080e2eb64e62e3c8c1b8e2a438eb069baffda55f51e324465d351d565769ff46f8dbb5f8e054a54b9f5faa01ca53cf9ccf36f", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -56,7 +56,7 @@ "kind": "field" } ], - "bytecode": "b5924d4ec2501485415a07e20a10f7d0d216da992d01c5281a70038ff6b6be58dafada1a18be1dd0073a7246c1bf105d820b60036e8628516786097867372739e7cbc919eddfd137c345e695e1f7eab1675691ebd2494b6f1ed612c6655788fc2a71fb2ff1f11c2c20217843c6f2f305db9d2f32acb0471f0c825d173bb7099db6b1e7b8301c24ece34058efc4c2da16c260704fc7a7fe0dcb66e8a4ea7b61c432c9fab6f4a5ee13c08eb7ec65f86a12401134e3af126c0c24a14f4780029d10d4675bd984ce5ae0e03002d2f02ce8657f49b84d90cc0cec21d2af6370adb360c48f75cbdae2687ae2238be5f87fcd9ad6ae63e486398e4e8fe36ed0b019bf935e1014d074f927f9b41df9c13b7dd6098e2ebb1061f37b1992509665a8944094442494b48eaa08b2d229aba22a2aaa629554490255562b5a47ab089a284b20da8a26d93f24c50d2c23297e02", + "bytecode": "b5924d4ec2501485415a073ad01520eea0a52db4335b028a5134e0061eed6d7db1b4f5b535307c3ba00f74e48c827f21ba0417c006dc0c51a2ce0c13f0ce6e4e72ce979333dcbfa36f868bcc2bc3efd662cfac20d7a5e3a6de38ac268ccb2e11f965e2e65fe2e339584042f0068cedcce66c7736cfb0fc1e7d3008765decdc2674d2c29ee3c2a09fb08f0361b513f32b5b08fdfe3d1d9dfa372c9ba1e38aef8511cb24abdbd2979a4f003bdea297c1ab490045d088bf4ab03190843e1d010a7442508f6d64133a6d8283c30848ddb3a09bfd25e1d6413235b08748af86c1b5ce82213fd22d6b83a3e9898f2c96e3ff356b52bd8e911be6383a398e3b41dd66fc567a415040d3c59f6ca7adc80fdee9b34e7074d981089bdfcb9084922c43b908a22422a1a8b55545909576491555515115aba84a12a8b25ad6da5a59d0445902d15634c9fe2129ac611949e113", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -157,7 +157,7 @@ } ], "returnTypes": [null], - "bytecode": "b5904f4ec24018c529b42ec41ba077c01bd8365431fe0b788149fbd94c9cced4e9d4c0f2bb41670a3b7794aa31241cc10370012f430c0b77864df5ed5e7ec97b2f6f7632c7b5c748f8e8894990f3d0278ce172e4de9c0fb4b1ad3dd0d9070f7e836f771081cc8097c674375b73b4d9b64cef185f3d4919a3f15c633da63c665016da7c9df59be9b4d738a25f142fb8b816cfc66ae1d2173c53a6a59bc7e2472024d098ef7e29d7a104a2c017494255025c697cbf0092ba5292a9695b1a57238869a6400e790413eb678afd1753561ee5444e030a2cba4d67cec28da2b68dd5952091e938ffda550f9e72c2b28e8df5659ea4c307e31c56f792a458edbcee566325d2cfa2f806", + "bytecode": "b5904f4ec24018c529b42e74a137406f8037b06da862fc17f00293f6b399389da9d3a981e57783ce1476ee28556348388207e0025e861816ee0c9beadbbdfc92f75edef464862b8f91f0d113e320e7a14f18c3c5d0bd39ef6b635b3ba0b30beefd06dfee200299012f8d395c6fccd17ad332dd637cf524658cc6338df588f298415968f375d66ba6d36ee3885e51bce0fc5a3c1bab850b5ff04c99966e1e8b1f81904063befda55c851288025f2409550970a5f1fd0248ea4a4926a66d695c0e21a6990239e0118cad9f29f65f4c597a9413390928b0e8369d3a73378ada3656578244a6e3fc6b57dd7fca09cb3a36d69779920e1e8cb35fdd4b9262b5f5faa01a29917e16c537", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/examples/public_token_contract.json b/yarn-project/noir-contracts/src/examples/public_token_contract.json index 2f6ca77e8f7..715b459a034 100644 --- a/yarn-project/noir-contracts/src/examples/public_token_contract.json +++ b/yarn-project/noir-contracts/src/examples/public_token_contract.json @@ -47,7 +47,7 @@ "kind": "field" } ], - "bytecode": "dd564d6ed34018f5247124a037684bff38801ddb89bd6b52081495825221d64efcc58c706ccb71ab663937b0c761455925014aa984380107e8057a990aa74ea02655379e485147f26234d2e7f7bdefbd37d37ff299fcac597aeb43cd39ae1fdaad1dddb2c8a851dd7ffe2ca40574c7217fd7611191ef550ffbef3be0e3561484f4725b12cab20c95128892a80b25ada92a82ac34cbaaa88a8aaa182555924095d58ad6d42a8226ca12886d4593da42b2962fb7856c4b660f6a253328f1161abfbd0103bc2ed85144972faee84afc2d5d5c7174f531f95af3b06561f363484655cfd37b2751106445214b0c8a94db2c8a682c8a00832215169c940416ed18f78b5899051285451139245f0e70c7b5602df84406af9c238a3832da71ecae4fb930b3b95be4acee78804d7becebe81774b0ffd606bbe5f55c1f8c3dc70cc9e90bd0dd6b27d31c4a6dd1d2144a213b14819cd7b0ad7bbd3a06cb78edf6f941d530720532dc737483e6f9a47d3e3fa18127c397871d377c90ec39343cf01df7f7cdfc89a9b34d0b9224cd884e5ccbdee1df61ae077d723a46bfdbde77e241e6a73ca290415effc72337788a8f10774d0f034dc63fb8794b8511036ad7590c6823fb6dc9beb38d808131665e058b40d5bc7cb6cad0679b73094d211d9a675ddff174131aa01b336979de0013777df0766d038ed122e7255db839fe034419007ac4a0c62643716e0527c9287268fe22fd3111e9bb384920a5d23ca2332a4def735358fc1c545b1cab36166ba2da4231a1a2589850529ca8f6615ab541b8f507", + "bytecode": "dd564d6ed34018f52471241012dca02dfd6369c77662ef9a140245a5a05488b5137f31231cdb72dcaa59ce0dec715851564980522a214ec0017a815ea6c2a913a849d58d2752d491bc188df4f97def7befcdf49f7c263f6b96defa50738eea07766b5bb72c326a54f79e3f0b6901dd72c8df765844e47bd5c3fefb0ef8b8150521bdd89284b22c43a504a224ea42496baa8a202bcdb22aaaa2a22a464995245065b5a235b58aa089b204625bd1a4b690aca58b2d21db92d9835ace0c4abc81c66f6fc000af0b7614d1a5f34bba1c7f8fce2f39baf2987cad79d8b2b0f93124a3aae7e9bde32808b2a290250645ca6d16453416458041910a0b4e4a028b768cbb45accc0289c2a2881c922ffbb8e35ab01a7c228357ce21451c196d3b76d7a75c98d9dc2d725a773cc0a63df675f40b3ad87f6b83ddf27aae0fc6ae6386e4e405e8ee9593690ea5b6e8c1144a213b14819cd5b0ad7bbd3a06cb78edf6f941d530720532dc757483e6f9a47d3e3fa18127c397071d37bc97ec3934dcf71df7f7f5fc89a9b34d0b9224cd884e5ccddee1df61ae057d723246bfd3de73e241e6a73ca290415effc72337788a0f1177450f034dc63fb87e4b8511036ad7580c683dfb6dc9beb3f5808131665e058b40d5bc7cb6c2d0671b73094d211d9aa75ddff174131aa01b336979d60013777df0766c038ed022e7255db839fe034419007ac8a0c60643716e06c7c9287268fe22fd3111e9bb384920a5d23ca2332a4def735358fc1c545b1cab36166ba2da4231a1a2589850529ca8f67e5ab541b8f907", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -88,7 +88,7 @@ "kind": "field" } ], - "bytecode": "ed595d4fd350186ef795f871c33520e01830e4a35ddbb50dc6b08128065121c6ebb29ecdc6ae5dba42e0b2375ef703aef40e5010498cbf801fc01f20e1b710373a848929c4be354743935e9c9ce4ddfb3ecfdbe73ce7ddfaa363226b7d2baa52e95d515f9d59d64a5392aa5adb0b85f9278f1d3741066c26833653a4f5a56028e6db2a329592673beed12443e55916f1394433b444e5c42581a3586e292fd002cd099c9c13180609acc08b4b224f8934cb20bacc894c99f29fcea3492adcc3c227d5153a29fa3730eebc443232ea48f33cb7f3f0c4ed6abce4e109e176df832fa107475c7b23c7b5a781696fe3bddbc4b5efbef5b96828aaaa54361cebd3a2a25554e45712368deed021a8d38caa3515a5ed0fd6e6737dc525096b7b4ad7eaa64b38e1e35b7b33ba81948ad604c9dbab9bba2155d0029264c7da7d8aa45ac130a43537463ad6fe02aa28751319b39a8c56c9b32c121059ec17154d32d66614a4ca2f6aebc9cd822cc712d6d69c2ec96e3ce9579e8cb710485a5bcf96ab35e796bf26c8ad4553af1d44c6631f208ffd373c5ec9e3eeb462a092a9ac206be7d5b26e2a48333760a84c872fd2b3ed6b04a183b707320701676866356073e0f07dbbe87a00a29b06c036e302e002d08411b6cf1d4cda676830a87d0683da67288af6b90380ed2040fb0c01b40f383899bf05ce1531f8f0f8fe01387c2038741600e06180187c74c2e3e2d243e1f90711afec7090780d078957963c37792e7666fd3c2117134d4d033ad707f647dfa7c5c8e81decd796837dd3901bd46661e3a47bc9c2b6af6367692523b0b4a9a6a56d3859dfd226523e14a9440b9254cbd2de6eb3b43017e32cc0c5f8c21569fb14cf63a2e37a1f75e0c3320041f265882022441004108487c024474164c24204c941004bff57ece4f31041385cd881a118a29c3cfbf3d81989626042d3edc7cd775455ccd71ad24ac65acd44f29c5eb93437b9b0243bb09b9a6079c4801ab411402f336aaf5bbb4d1467cbf37aa3a1e2677c920e0002bff0496c4e2b2b24d1a2c906f8818bb730c70380761482a0b1f0fd075fd9980d3d1280f0f610b7de710c1b696c1c4285c428a638614b83a08c02c84304f8caa292680a50a2e91b896e839686202887a14453397089c605aaa866557dd0b3aab00941ccaafa01c583b99955fdfbb32a2c5d178be1d9d09f85a06c025885212a635888ca1ee2f8af2007209913003100c0b11dee07", + "bytecode": "ed59cd4ed450146ee72fd10df2048080c30083fd9f3684c00c88621015625c97e99db1b1d34e3a85c0b21bd7fd8195ee000591c4f8043c002f40c2b31067e8208c9842eca9b9129a7471739333e77cdfe977bf7b66a37442e4ecef254d2ebf2f196bb32b7a795ad6347b67b1b8f0f489eba5c890cd74d86686b4bf164dd57a5743965af61dd73b9e622981e3508141344bcb14232d8b3cc5f1cb82488b342ff20a23b22c1239b1202d4b054aa23916d1155e622b54f0f41c4f51d11e0e3ea9dec849d17f8071f7155290d940baef7b3d47a75e6ff3258f4e09afef217c09fd38e23a103baefd4d4c079aef8316ae838fec2f2553d534b5bae9da9f9754bdaaa1a092a869f4450e419d6554ab6b28eb7cb4b75e18ab1e49d83bd386deb03cc28d1edfde9f354ca456f51648fe7ec3324cb98a1691acb8f6de3324d78ba629af7b09d2b50f1651556d58c89cd315b4469e679182c8e2a0a4eab2b93eab224d7959df486f15152591b2b7e70d59f192e9a0f274b28d40dade7ebe52abbbf78235416e2f5946fd30361e0701791cbae3f15a1ef7665413952d7515d9bbaf570c4b45bab5094365367a91bee3dc20081dbe3d9c3b0c3943736b219bc3471f3a45d70710dd2c00b6390f001780268cb17dba30699fd191b0f619096b9fd138daa70b00db1180f61905681f707072ff0a9c6b628c47c7f72fc029848243e701001e0388311e9ff078b8f45074fe41c42b3f16265e6361e295272f4c9e879d59bf48c8c34453b380cef5b1f329f06909327e07fbaded60df36e5067558d824e95db1b09debc4795ae9182c6da665699b4e36b0b4a94c004526d58624d3b6b4f73b2c2dccc5380f7031be7445da39c3f384e8bed9471dfa702c4010a102114482088200821420306128884c3888200c04b0f4ad6247102082f0b8b0034331443902f7ebd8a1e21898d074e771f303d554eb8d8ef4b2b95eb790326f54afcc4d2e2dc96eeca626581e31a0068d02f432b4b361efb5509cab2c18cd864a9ef349ba0008fcc627b135a3ae92449b2607e0072edfc25c1f005a1a8220267affc157c638d02301086f0f71eb65316c24868550a18938a638514b83a08c03c86302e02b8b4ba2394089e6ef24ba035a1e8220014389e6047089c605aab8665583d0b3aaa80941ccaa8600c5a37037abfaff675558ba2e11c3b361280f41d924b00a43545610212a9bc2f15f410940322701620080e3b8d24f", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] 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 b45b03aa49d..28cfd8f041e 100644 --- a/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts +++ b/yarn-project/sequencer-client/src/sequencer/public_processor.test.ts @@ -6,6 +6,7 @@ import { EthAddress, Fr, FunctionData, + GlobalVariables, KERNEL_PRIVATE_CALL_STACK_LENGTH, KERNEL_PUBLIC_CALL_STACK_LENGTH, PUBLIC_DATA_TREE_HEIGHT, @@ -85,7 +86,7 @@ describe('public_processor', () => { const tx = makeTx(); tx.data.end.publicCallStack = makeTuple(KERNEL_PUBLIC_CALL_STACK_LENGTH, Fr.zero); const hash = await tx.getTxHash(); - const [processed, failed] = await processor.process([tx]); + const [processed, failed] = await processor.process([tx], GlobalVariables.empty()); expect(processed).toEqual([ { isEmpty: false, hash, ...pick(tx, 'data', 'proof', 'encryptedLogs', 'unencryptedLogs') }, @@ -97,7 +98,7 @@ describe('public_processor', () => { publicExecutor.execute.mockRejectedValue(new Error(`Failed`)); const tx = makeTx(); - const [processed, failed] = await processor.process([tx]); + const [processed, failed] = await processor.process([tx], GlobalVariables.empty()); expect(processed).toEqual([]); expect(failed).toEqual([tx]); @@ -145,7 +146,7 @@ describe('public_processor', () => { throw new Error(`Unexpected execution request: ${execution}`); }); - const [processed, failed] = await processor.process([tx]); + const [processed, failed] = await processor.process([tx], GlobalVariables.empty()); expect(processed).toHaveLength(1); expect(processed).toEqual([await expectedTxByHash(tx)]); @@ -175,7 +176,7 @@ describe('public_processor', () => { ]; publicExecutor.execute.mockResolvedValue(publicExecutionResult); - const [processed, failed] = await processor.process([tx]); + const [processed, failed] = await processor.process([tx], GlobalVariables.empty()); expect(processed).toHaveLength(1); expect(processed).toEqual([await expectedTxByHash(tx)]); diff --git a/yarn-project/sequencer-client/src/sequencer/public_processor.ts b/yarn-project/sequencer-client/src/sequencer/public_processor.ts index 115866d9706..80edc504c16 100644 --- a/yarn-project/sequencer-client/src/sequencer/public_processor.ts +++ b/yarn-project/sequencer-client/src/sequencer/public_processor.ts @@ -5,6 +5,7 @@ import { ContractStorageRead, ContractStorageUpdateRequest, Fr, + GlobalVariables, KERNEL_PUBLIC_DATA_READS_LENGTH, KERNEL_PUBLIC_DATA_UPDATE_REQUESTS_LENGTH, KernelCircuitPublicInputs, @@ -81,16 +82,17 @@ export class PublicProcessor { /** * Run each tx through the public circuit and the public kernel circuit if needed. * @param txs - Txs to process. + * @param globalVariables - The global variables for the block. * @returns The list of processed txs with their circuit simulation outputs. */ - public async process(txs: Tx[]): Promise<[ProcessedTx[], Tx[]]> { + public async process(txs: Tx[], globalVariables: GlobalVariables): Promise<[ProcessedTx[], Tx[]]> { const result: ProcessedTx[] = []; const failed: Tx[] = []; for (const tx of txs) { this.log(`Processing tx ${await tx.getTxHash()}`); try { - result.push(await this.processTx(tx)); + result.push(await this.processTx(tx, globalVariables)); } catch (err) { this.log(`Error processing tx ${await tx.getTxHash()}: ${err}`); failed.push(tx); @@ -110,10 +112,11 @@ export class PublicProcessor { return makeEmptyProcessedTx(historicTreeRoots, chainId, version); } - protected async processTx(tx: Tx): Promise { + protected async processTx(tx: Tx, globalVariables: GlobalVariables): Promise { if (!isArrayEmpty(tx.data.end.publicCallStack, item => item.isZero())) { const [publicKernelOutput, publicKernelProof, newUnencryptedFunctionLogs] = await this.processEnqueuedPublicCalls( tx, + globalVariables, ); tx.unencryptedLogs.addFunctionLogs(newUnencryptedFunctionLogs); @@ -123,7 +126,10 @@ export class PublicProcessor { } } - protected async processEnqueuedPublicCalls(tx: Tx): Promise<[PublicKernelPublicInputs, Proof, FunctionL2Logs[]]> { + protected async processEnqueuedPublicCalls( + tx: Tx, + globalVariables: GlobalVariables, + ): Promise<[PublicKernelPublicInputs, Proof, FunctionL2Logs[]]> { this.log(`Executing enqueued public calls for tx ${await tx.getTxHash()}`); if (!tx.enqueuedPublicFunctionCalls) throw new Error(`Missing preimages for enqueued public calls`); @@ -137,7 +143,7 @@ export class PublicProcessor { while (executionStack.length) { const current = executionStack.pop()!; const isExecutionRequest = !isPublicExecutionResult(current); - const result = isExecutionRequest ? await this.publicExecutor.execute(current) : current; + const result = isExecutionRequest ? await this.publicExecutor.execute(current, globalVariables) : current; newUnencryptedFunctionLogs.push(result.unencryptedLogs); const functionSelector = result.execution.functionData.functionSelectorBuffer.toString('hex'); this.log(`Running public kernel circuit for ${functionSelector}@${result.execution.contractAddress.toString()}`); diff --git a/yarn-project/sequencer-client/src/sequencer/sequencer.ts b/yarn-project/sequencer-client/src/sequencer/sequencer.ts index 6265f016e74..61db12b6050 100644 --- a/yarn-project/sequencer-client/src/sequencer/sequencer.ts +++ b/yarn-project/sequencer-client/src/sequencer/sequencer.ts @@ -19,6 +19,7 @@ import { ceilPowerOfTwo } from '../utils.js'; import { SequencerConfig } from './config.js'; import { ProcessedTx } from './processed_tx.js'; import { PublicProcessorFactory } from './public_processor.js'; +import { GlobalVariables } from '@aztec/circuits.js'; /** * Sequencer client @@ -135,10 +136,13 @@ export class Sequencer { this.log(`Processing ${validTxs.length} txs...`); this.state = SequencerState.CREATING_BLOCK; + // @todo @LHerskind Fetch the next global variables in here! + const globalVariables = GlobalVariables.empty(); + // Process public txs and drop the ones that fail processing // We create a fresh processor each time to reset any cached state (eg storage writes) const processor = this.publicProcessorFactory.create(); - const [processedTxs, failedTxs] = await processor.process(validTxs); + const [processedTxs, failedTxs] = await processor.process(validTxs, globalVariables); if (failedTxs.length > 0) { this.log(`Dropping failed txs ${(await Tx.getHashes(failedTxs)).join(', ')}`); await this.p2pClient.deleteTxs(await Tx.getHashes(failedTxs)); @@ -157,6 +161,8 @@ export class Sequencer { // Build the new block by running the rollup circuits this.log(`Assembling block with txs ${processedTxs.map(tx => tx.hash).join(', ')}`); const emptyTx = await processor.makeEmptyProcessedTx(this.chainId, this.version); + + // @todo @LHerskind We need to pass in the globals here as well to build a block with the correct data. const block = await this.buildBlock(processedTxs, l1ToL2Messages, emptyTx); this.log(`Assembled block ${block.number}`); @@ -275,6 +281,8 @@ export class Sequencer { const allTxs = [...txs, ...times(emptyTxCount, () => emptyTx)]; const blockNumber = (await this.l2BlockSource.getBlockHeight()) + 1; this.log(`Building block ${blockNumber}`); + // @todo @LHerskind We need to pass in the globals here as well to build a block with the correct data. + // We don't need to do the blocknumber in here. Just passing along the globals is enough. const [block] = await this.blockBuilder.buildL2Block(blockNumber, allTxs, newL1ToL2Messages); return block; } From 529084a9358ef3affdc8a91ccbebee9e37890dce Mon Sep 17 00:00:00 2001 From: LHerskind Date: Wed, 28 Jun 2023 09:19:03 +0000 Subject: [PATCH 02/14] chore: recompile noir contracts --- .../noir-contracts/src/examples/ecdsa_account_contract.json | 2 +- .../noir-contracts/src/examples/gullible_account_contract.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn-project/noir-contracts/src/examples/ecdsa_account_contract.json b/yarn-project/noir-contracts/src/examples/ecdsa_account_contract.json index 19e9b18e95e..30dffeb0183 100644 --- a/yarn-project/noir-contracts/src/examples/ecdsa_account_contract.json +++ b/yarn-project/noir-contracts/src/examples/ecdsa_account_contract.json @@ -91,7 +91,7 @@ } ], "returnTypes": [], - "bytecode": "edbd07945555b6f5cfdd7b9fa280a240721211111111c951258a8808484e22398980e4241924e70c92a3a22239898808086703929388888a8a898c20fed7ba7eefffbdc7d76fd1ddce7a6f0d073d46ed1e3d66bb3c67de5df39c5aeb77cf99e453563c95acff801565db3569f64ad90e3d2a746ddfac5c9376ed062caa5ea6cab3cf8c9fe022821848628c24168915c4a292584c128b4b6209492c29894f4ae25392f8b4249692c4d292584612cb4a6239492c2f89cf486205497c56122b4ae273925849129f97c4ca92f882245691c4aa92584d125f94c4ea925843126b4a622d49ac2d897524b1ae24d693c4fa92d840121b4ae24b92d848125f96c4c692d844129b4a6233496c2e892d24b1a524b692c4d692d84612db4ae22b92d84e125f95c4f692d841123b4ae26b92d849123b4b621749ec2a89bd24b1b724f691c4d725b1af24f693c4b0bfa80e10d581a23a4854078bea10511d2aaa6f88ea30511d2eaa234475a4a88e12d5d1a23a4654c78aea38511d2faa134475a2a84e12d5c9a23a4554a78aea34519d1e3be0ad329dda7469fd6a8b2e6d9a4d1c3771c2f1d205f3152958a845d1022df217ccdf245f81e24d8b15ce57a870d322c5f217cb5fb858e1e6058a152cd8a258a162458b372d5e345ff1fc850ab6c8dfb270f1822df345ff933f9c46450ab42c52e82f1599fee791fc9522f97cccbee3a5f3fdc5fffc4383f8b0f2ffdbe736e53f8a34ff0b064d8518b43f010de2c3caf76f9ddba4ff5c24dfbf69d06488419f25b0417c58c5fee5739b704791e22dff0d8326420c3af03f60101d56a196ffd2b98dfb47458afe8b068d871874f07fc6a0e86115fea7cf6dcc7f57a4d0bf60d058884187fe070de2c3caf74f9ddb28a948be7fd2a0d110830eff0f1bc487d5ecaee736e26e458afe13068d841874e47fc1203eac02e2b90dfb678a14bd8b41c321061dfd5f32880fabe87f7b6e43ffd922450583de801874ec7fd1203eac62fff0dc06ff2b458afd37060d811874fc7fd9203eac7cffcfb90dfc178b1469f90f0c1a0431e8840283f8b0f2fd9773ebffef14297087410320069d5462101f5681ff38b7beff6e8d42ffd79f7e107b4e29b2a7608b962df9c8f2f7f94b35feb4e775883d9f27843d7fb1607efad420553e8758745aa7452720554e422cfa42a745c720558e432c3aa3d3a223902a4721167da9d3a243902a8721169dd569d101489583108bbed269d17e4895cf20169dd3764f447745f97b430cda0731e86b9d7be81ca4cad7108bbed169d1594895af20167dabd3a233902a5f422c3aafd3a2d3902a5f402cfa4ea745e72155be8358f4bd4e8bbe8154f91662d10f1a2dea0638b55e10932fe8dc41df43aafc00d941088b96956fd3a945b32e6dbab518b0ac6687ca2daa3769dea6c7c489e3c62336d35f3fbe5389b2f5eadde7f5befdc2fee180706038281c1c0e0987866f84c3c2e1e1887064382a1c1d8e09c786e3c2f1e184706238299c1c4e09a786d3c2e93e924842826688c0d04c519d25aa6f8aea6c519d23aa7345759ea8ce17d505a2ba50541789ea62515d22aa4b457599a8be25aa6f8bea72517d4754df15d5f7447585a8be2faa2b457595a8ae16d535a2ba5654d789ea7a51dd9010d0de7a04b4b70111e08993a984f6d622a0bd751083e254427bab11d0de1a8841c955427b2b11d0de2a8841f12aa1bd150868ef7d88412954427bef22a0bdf72006a55409ed2d47407bef400cba4f25b4f71602da7b1b62502a95d0de5204b4b70c62506a95d0de6204b4b70462501a95d0de4204b4b70862505a95d0de7c04b4b70062503a95d0de5c04b4370f62507a8dd05e381b40ed8573200665d088ed85b300dc5ef826c4a08c2a3bd6893340aa6484589449a745e92055d2432ccaacd3a234902a69211665d169512a4895d4108beed769514a4895fb201665d569513ca44a0a88450fe8b4280e522539c4a26c1ac1bd7026c4a16410871ed4b989b241aa3c08b128bb4e8bb242aa3c00b1e8219d16658154b91f62510e9d16658254c90cb1e8619d16e58054791862514e9d16658754790862d1231a2dea0e38b57006c4e55c3ab7504e489547205b28977274af3b04dd0b678433c359e19be1ec704e38379c17ce0f17840bc345e1e27049b8345c16be15be1d2e0fdf09df0ddf0b5784ef872bc355e1ea704db8365c17ae0f37dc05e0db28c2439b4475b3a87e20aa5b44f54351dd2aaa1f89ea3651fd5854b78bea27a2ba4354778aea2e51fd5454778bea1e510d45d58bea5e51dd27aafb45f533513d20aa0745f590a81e16d523a27a54548f89eaf18400f88e21003ec85788133fab12e03b8200f8205f204e5c5125c0770801f041be3e9cf8399500df0104c007f9f270e24a2a01befd08800ff2d5e1c4cfab04f8f622003ec8578713575609f0850880cf430c7a4125c0b71b01f0ed8118544525c0b70b01f07d0a31a8aa4a806f0702e0db0931a89a4a806f3b02e0fb0462d08b2a01be6d0880ef638841d555027c5b1100df4710836aa804f8b62000be0f2106d55409f06d46007c1f400caaa5b36f5d1352a516c4a2da3a2daa0ea9520362511d9d16558354791162515d9d16558154a90ab1a89e4e8b2a43aabc00b1a8be4e8b2a41aa3c0fb1a8814e8b2a42aa3c07b1a8a14a806f13c4a167210ebda4731335845479096251239d16d587546900b1e8659d16d58554a907b1a8b14e8b6a43aad48158d444a7458d21559a402c6aaad3a246902a2f432c6aa6d1a21e08806f23c4e5e63ab75053489566902dd45c39c0d70303f06d0c37859bc30fc22de187e1d6f0a3705bf871b83dfc24dc11ee0c77859f86bbc33d6118fa706fb82fdc1f7e161e080f8687c2c3e191f068782c3c7e1780ef84080f9d14d553a2fab9a89e16d52f44f58ca87e29aa6745f52b513d27aa5f8bea37a2faada89e17d5ef44f57b51fd41542f88ea8fa2fa93a8fe2caabf88eaafa27a51542f89ea6551bd22aa5745f59aa85e17d51b0901f05d47007c3720313e4825c0771501f05d8318345825c0771901f05d8118344425c0771101f05d8218345425c0f70b02e0fb1562d01b2a01be9f1000dfcf108386a904f82e2000be1f21060d5709f07d8f00f8204f4a4f3c4225c0771e01f041ded79078a44a80ef1b04c007795b43e2512a01be7308800ff2f6a1c4a355027c6711001fe4dd4389c7a804f8ce20003ec89b87128f5509f09d46007c90f70e251ea712e03b8500f820ef854d3c5e67df7a1ca4ca78884513745a340652652cc4a2893a2d1a05a9321a62d1249d168d80541909b168b24e8b8641aa0c87583445a745432155de80583455a74583215586402c9aa612e03b09716810c4a1e93a37d1344895e9108b66e8b4680aa4ca54884533755a3409526532c4a2593a2d9a00a9321162d19b3a2d9a05a982798efc6c9d16619e0d371362d11c8d16211e4b1d9e80b83c57e7169a0da982799dc55ce500df7d1880ef4478323c157e1e9e0ebf08cf845f8667c3afc273e1d7e137e1b7e1f9f0bbf0fbf087f042f863f853f873f84bf86b7831bc145e0eaf8457c36be1f5f0c65d00bedf4478e8a6a8de12d5df45f5b6a8fe21a97446b21c916523cb56969d2c07b21c23cb896539569693c87252594e26cb71b29c5c96e36539852ca794e5fb6439952ca796e534b29c5696d3c9727a59ce20cb191300eda37f2980eda3638344fc871ae13efa5401741f7df8108bb66ac4fbe8d706c0f7d16f17c4a28f34027e944b00c28fe20b62d1368d881f053f80f1a3eb03c4a28f35427e746505507e74018658b45d23e647b72e00ce8fee7020167da211f4a37b4300e947b790108b766844fde8e61bc0fad13d3ac4a29d1a613ffaeb0640fbd11f41108b7669c4fde8cf4700ef477f65422cfa5423f0477f9f03883ffa331e62d16e8dc81f354000cc1ff5492016ed5109fddd46407f7f400c0a55427fb710d0dfef1083bcce5e7708a98279c0f35e9d16ed8654c13ce2799f4e8b7641aa601ef2bc5fa7453b2055308f79fe4ca745db2155300f7a3ea0d3a26d902a98473d1fd469d1564815ccc39e0fa984fe6e421cc23cedf9b0ce4d74085205f3ee9d233a2d3a00a98279fbce519d16ed8754c1bc7fe7984e8bf642aa60dec0735ca745c72055306f923ba1d3a223902a9877c99dd468512a04f4f71bc4e5533ab71086683c09d942a794437fa930d0df6fe1cdf056f87b783bfc83babdd4aaa5b638f5b4697e40cd7f1ab4d094842652344ea2d11dcddd68c649034a1a06d32497a6e634f2f691543e92da47d2f8485a1f49e723e97d24838f649471401fc92423479965398b2cdf2fcb5965f90159ce26cb0fca7276597e489673c8f2c3b29c53961f91e55cb2fca82ce796e5c764398f2c3f2ecb7965f90959ce27cbf965b9802c1794e542b25c58968bc87251592e26cbc513040a2c0681028b432e013775428145205060518845b774428185205060618845bfeb84020b40a0c082108b6eeb8402f341a0c0fc108bfed00905e68540814f202c8a4da4130acc0381021f875814d10905e68640818f412c323aa1c05c1028f0518845562714981302053e02b1c8e984027340a0c0872116053aa1c0ec1028f0218845313aa1c06c1028f041884589354281d461025081d488825814ab110ba4161e800ba44e1fc4a2242afbe1b1b1902a906f02c426d569510ca40ae49b00b1c9745ae4205520df04888dd369918154817c132036b94e8b1241aa40be09101baf737c791b5205f25d80d8143a2dba05a902f936406c4a8d60204d3e2116dd8458749fce2c4a09a902f9b6766c2a9d16c543aa40bead1d9b5aa74571902a906f6bc7a6d16951524815c8b7b563d3eab4280da40ae4f923b1e9745a940a5205f2fc91d8f41a2d829c5a2413c4e60c3af7503a4815c89390201625241a981a8206d286a29b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbf7da4808f14f491423e52d8478af848511f29e623c5ef06089690f1a392b2fca42c3f25cb4fcb7229592e2dcb6564b9ac2c9793e5f2b2fc8c2c5790e56765b9a22c3f27cb9564f97959ae2ccb2fc8721559ae2acbd564f94559ae2ecb3564b9a62cd792e5dab25c4796ebca72bd040104eb4200c17a900b41519d80606d082058076251319d80604d0820580b6251719d806075082058036251099d8060350820f822c4a2923a01c12a1040b02ac4a227750282952180e00b108b9ed2090856820082cf432c7a5a2720581102083e07b1a8944e40b00204107c166251699d8060790820f80cc4a2323a01c1b21040b01cc4a2b23a01c1d21040b00cc4a2723a01c1a7218060298845e57502824f4200c1a720163da3b32b5e1e520513d715745a5416520513d7cfeab4a834a40a26ae2beab4e86948154c5c3fa7d3a227215530715d49a7452520554a422c7a5ea745c5205520dfff8fadac13102c09b108f2fdffd81774eea2ca902a98965a159d16558254c1b4d4aaeab4a822a40aa6a5564da745152055302db517755a540d52053324aaaed3a22a902a9821510d8d16a581008298dbcf9a3af750754815ccb8baa67240300d08102c4137a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7ffb48751fa9e123357da4968fd4f6913a3e52d747eadd0d10ac2fe3470d64b9a12cbf24cb8d64f965596e2ccb4d64b9a92c3793e5e6b2dc42965bca722b596e2dcb6d64b9ad2cbf22cbed64f955596e2fcb1d64b9a32cbf26cb9d64b9b32c7791e5aeb2dc4d96bbcb720f59ee992080600f0820d8137221e8ac1310ec060104bb432ceaa21310ec020104bb422ceaaa1310ec0401043b432ceaa61310ec0801045f8358d45d2720d81e0208768058d4432720d80e0208be0ab1a8a74e40b02d04107c0562512f9d80606b0820d80662516f9d80604b0820d80a62511f9d8060730820d80262d1eb3a01c1a61040b019c4a2be3a01c1c61040b009c4a27e3a01c1461040f0658845fd7502820d2180e04b108b06e8ec8af787541900b168a04e8bfa42aaf483583448a7457d20555e87583458a745bd20557a432c1aa2d3a21e902a98c6ec509d16758354c13466dfd069511748154c6376984e40b001c4224c6376b8ce5d340c526538c4a2113a2d1a0aa9f206c4a2913a2d1a0ca9320462d1289d160d84541904b168b44e8b4641aa8c86583446a74523205546422c1aabd122c8f32323f521368fd3b987c640aa8c85eca171ca01c1b42040b03edd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced239d7ca4b38f74f191ae3ed2cd47bafb480f1fe9793740b0978c1ff596e53eb2fcba2cf795e57eb2dc5f9607c8f240591e24cb836579882c0f95e5376479982c0f97e511b23c529647c9f268591e23cb6365799c2c8f97e509b23c519627c9f264599e22cb5365799a2c4f4f1040701a04109c0eb910bca713109c020104a7422c5aa113109c04010427432c7a5f2720380102084e8458b4522720380e02088e8758b44a27203806020862eedb57eb0404474100414c07618d4e4070040410c47410d6ea0404874100414c4f7c9d4e4070280410c4f4c4d7eb0404074300414c4f7c834e4070200410c4f4c437ea0404fb4300410cb7b4492720d817020862b8a5cd3a01c13e104010c32d7da0b32bbe1952e50388455b745ab411526513c4a20f755ab41e526503c4a2ad3a2d5a0ba9b20e62d1473a2d5a0da9b20662d1369d16ad84545905b1e8639d16ad8054791f62d1769d80606f8845ef412cfa44e72eda0ea9f209c4a21d3a2dda06a9f231c4a29d3a2dda0aa9f211c4a25d3a2dda02a9f221c4a24f755ab40b52e5538845bb755ab403526527c4a23d1a2d4a07010431df720a75eea1dd902a7b207b28540e08a6030182bde86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f1f61ccc94726f9c8641f99e223537d649a8f4cbf1b203843c68f66caf22c597e539667cbf21c599e2bcbf36479be2c2f90e585b2bc489617cbf212595e2acbcb64f92d597e5b9697cbf23bb2fcae2cbf27cb2b64f97d595e29cbab6479b52caf91e5b5b2bc4e96d7cbf286040104d74300414c37f3079d80e05a082088e9665ed00908ae860082986ee68f3a01c195104010d3cdfc492720b802020862ba993feb0404df850082986ee62f3a01c1e51040f01d8845bfea0404df8200826f432cbaa813105c0a010497412cbaa413105c0c010497402cbaac13105c08010417412cbaa213109c0f010417402cbaaa13109c0b0104e7412cbaa613109c0d0104e7402cbaae13109c050104df845874436757fc3aa4ca0d8845bfe9b4e82aa4ca35884537755a741952e50ac4a25b3a2dba08a9720962d1ef3a2dfa0552e5578845b7755af413a4cacf108bfed069d10548951f11162549a413109c09b1e80788451195bb284922489508c422a3f317ed36a4ca1f108bac4e8b6e41aafc0eb1c8e9b4e83748959b108b029d59e42055028845313a2d32902a166251628d16a5870082332036c7eadc4331902a89217b28563920981e0408cea09b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbf7d64a58facf291d53eb2c647d6fac83a1f59ef231bee06086e94f1a34db2bc59963f90e52db2fca12c6f95e58f64799b2c7f2ccbdb65f91359de21cb3b6579972c7f2acbbb65798f2c87b2ec6579af2cef93e5fdb2fc992c1f90e583b27c48960fcbf211593e2acbc764f978820082c72080e071c885e0119d80e0110820781462512e9d80e0210820781862d1a33a01c1031040f020c4a2dc3a01c1fd1040f03388458fe90404f74200c17d108bf2e80404430820e821163dae1310dc0d0104215f0f4b92572720b80b020842bea89ae4099d80e00e082008f9a26a927c3a01c1ed104010f2e88524f9750282db208020e4d10b490ae80404b7420041c8a3179214d409086e81008290472f2429a41310dc0c0104218fc74b52586757bc10a44a61884545745a540052a520c4a2a23a2dca07a9921f6251319d16e5855479026251719d16e58154791c6251099d16e58654790c6251499d16e58254791462d1933a01c14d108b1e8158f494ce5df424a4ca53108b9ed6695109489592108b4ae9b4a818a44a718845a5755a540452a528c4a2323a2d2a0da952066251599d163d0da9520a6251398d16658000829087e92729af730f9585542907d943e5950382194080e046ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8db470ef8c8411f39e423877de4888f1cf591633e72fc6e80e009193f3a29cba764f973593e2dcb5fc8f21959fe5296cfcaf257b27c4e96bf96e56f64f95b593e2fcbdfc9f2f7b2fc832c5f90e51f65f92759fe59967f91e55f65f9a22c5f92e5cbb27c4596afcaf23559be2ecb37120410bc0e0104215f9a4fd24c27207815020842be349fa4b94e40f0320410847c693e490b9d80e045082008f9d27c92963a01c15f208020e44bf3495ae904047f820082902fcd2769ad1310bc000104315f9a6fa31310fc1e020862be34df562720781e02087e07b1e8159d80e0371040f05b8845ed740282e72080e0d7108b5ed509089e8500825f412c6aaf13103c030104bf8458d4412720781a02087e01b1a8a34e40f0140410fc1c62d16b3abbe21d21555e8358d449a745ed21553a402ceaacd3a276902aaf422ceaa2d3a2b6902aaf402ceaaad3a2d6902a6d201675d369514b489556108bbaebb4a839a44a0b88453d740282272116358358d453e72eea01a9d21362512f9d16758354e90eb1a8b74e8bba40aa748558d447a7459d20553a432c7a5da7457d20555e8758d457a7459077df26e90db1a89f468b324200c113109bfbebdc437d2155fa41f6507fe5806046102078826e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef6918b3e72c9472efbc8151fb9ea23d77ce4ba8fdcb81b20f89b8c1fdd94e55bb2fcbb2cdf96e53f44d92492e5882c1b59b6b2ec643990e518594e2ccbb1b29c449693ca7232598e93e5e4b21c2fcb296439a52cdf27cba96439b52ca791e5b4b29c4e96d3cb720659ce981080a0c98000040de48a9b648e4a40d0a443008206f258e32473550282260d021034692116cd5309089a540840d0a48658345f25206852220041731fc4a2052a0141138f00044d0a88450b550282260e01089ae4108b16a904044d5204206892412c5aac121034b10840d0248158b444252068621080a0c1bc8560a94a40d03804206830ef4359a61210340601081accfb50de5209089a440840d060def0f5b64e40f0360410c4bce16bb94e40f0160410c4bce1eb1d9d5df1e5902aef402c7a57a7456f41aabc0db1e83d9d162d85545906b168854e8b1643aa2c8158f4be4e8b1642aa2c8258b452a745f3215516402c5aa5d3a2b9902af32016add60908de8458340762d11a9dbb6835a4ca1a88456b755ab412526515c4a2753a2d5a01a9f23ec4a2f53a2d7a1752e53d88451b745ab41e526503c4a28d3a2d5a0ba9b20e62d1268d166582008290f78127d9ac730f611e8fb809b287362b0704338100c1dfe86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f6f527993da9b34dea4f5269d37e9bdc9e04dc6bb008226938c1f6596e52cb27cbf2c6795e50764399b2c3f28cbd965f92159ce21cb0fcb724e597e449673c9f2a3b29c5b961f93e53cb2fcb82ce795e52764399f2ce797e502b25c50960bc97261592e22cb4565b9982c174f1040b0180410c43cf7fba44e40b0080410c43cf7fb944e40b0100410c4bc9be9739d8060010820887937d3699d80603e0820887937d3173a01c1bc104010f36ea6333a01c13c104010f36ea62f750282b9218020e6dd4c67750282b9208020e6dd4c5fe9040473420041ccbb99cee90404734000c18721167dad1310cc0e01041f8258f48d4e40301b04107c1062d1b72a0141931501089a0720169d5709089a2c0840d0dc0fb1e83b9d5df1f3902a98c7067fafd3a26f2055308f0dfe41a745e72055308f0dbea0d3a2b3902a98c706ffa8d3a233902a98c706ffa4d3a2d3902a98c706ffacd3a253902a98c706ffa21210349921169d8458f4abce5df40ba40ae6d52e17755af413a40ae6d52e97745a74015205f36a97cb3a2dfa1e5205f36a972b3a2dba0ca9827959d9559d165d8454c1bcacec9a468b32234ecd6482d87c5de71eba0aa982796de275e58060660c206832d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde14f0a6a03785bc29ec4d116f8a7a53cc9be27703044bc8f85149597e52969f92e5a765b9942c9796e532b25c5696cbc97279597e46962bc8f2b3b25c51969f93e54ab2fcbc2c5796e51764b98a2c5795e56ab2fca22c5797e51ab25c53966bc9726d59ae23cb7565b95e820082752180603dc48520697a9d80606d082058076251069d80604d0820580b6251469d806075082058036251269d8060350820f822c4a2cc3a01c12a1040b02ac4a22c3a01c1ca1040f0058845f7eb04042b4100c1e7211665d5090856840082cf412c7a402720580102083e0bb1289b4e40b03c04107c0662d1833a01c1b21040b01cc4a2ec3a01c1d21040b00cc4a2877402824f4300c152108b72e804049f8400824f412c7a5865573c690e481508cf9d34a74e8bb243aa4078eea48fe8b4281ba40a84e74e9a4ba745592155203c77d247755a94055205c27327cdadd322c8843629645a9cf4319d1665805481bc2028691e9d8060498845901704257d5ce72eca03a902f9ce6dd2bc3a2dca0da902f9ce6dd227745a940b5205f29ddba4f9745a94135205f29ddba4f9755a940f5205f21489a405745a94175205f21489a405355a940502089680d85c48e71e2a00a902799e0dc4a2840404b38000c11274334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b737d5bda9e14d4d6f6a7953db9b3aded4f5a6dedd00c1fa327ed440961bcaf24bb2dc48965f96e5c6b2dc44969bca7233596e2ecb2d64b9a52cb792e5d6b2dc4696dbcaf22bb2dc4e965f95e5f6b2dc41963bcaf26bb2dc49963bcb721759ee2acbdd64b9bb2cf790e59e090208f68000823d2117821a3a01c16e1040b03bc4a29a3a01c12e1040b02bc4a25a3a01c14e1040b033c4a2da3a01c18e1040f035884575740282ed21806007884575750282ed2080e0ab108beae90404db4200c1572016d5d70908b68600826d201635d00908b6840082ad201635d40908368700822d2016bda413106c0a01049b412c6aa413106c0c01049b402c7a592720d8080208be0cb1a8b14e40b02104107c096251139d5df1c6902a985fb4a63a2d6a04a982f9456ba6d3a286902a985fb4e63a2daa0fa9d20062510b9d16d58554c17c73bba54e8b6a43aa60beb9dd4aa74535215530dfdc6ead13106c00b108f3cded363a77516b48154c33a4ad4e8b5a42aa609a21afe8b4a839a40aa619d24ea7454d215530cd9057755ad40e5205d3de6fafd3a2b6902a98f67e078d1641be3663307fc474d4b987da43aa60068d1d950382f78300c1fa74334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b7379dbce9ec4d176fba7ad3cd9beedef4f0a6e7dd00c15e327ed45b96fbc8f2ebb2dc5796fbc9727f591e20cb036579902c0f96e521b23c5496df90e561b23c5c9647c8f248591e25cba365798c2c8f95e571b23c5e9627c8f244599e24cb9365798a2c4f95e569b23c3d4100c1691040703ae44230562720380502084e8558344e2720380902084e8658345e2720380102084e845834412720380e02088e875834512720380602088e855834492720380a02088e865834592720380202088e845834452720380c02080e87583455272038140208be01b1689a4e40703004101c02b168ba4e40702004101c04b168864e40b03f04101c00b168a64e40b02f0410ec07b168964e40b00f04107c1d62d19b3abbe2b32055de8458345ba74533205566422c9aa3d3a269902a9896da5c9d164d8154c1b4d4e6e9b46812a40aa6a5365fa745132055302db5053a2d1a07a98269a92dd40908f686588469a92dd2b98b1642aa2c8258b458a745f3215516402c5aa2d3a2b9902af320162dd569d16c489539108b96e9b46829a4ca3288456fe9b46831a4ca1288456f6bb4282b0410ec05b179b9ce3df416a4cadb903db45c392098150408f6a29b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbd61ccc99b49de4cf6668a3753bd99e6cdf4bb01823364fc68a62ccf92e5376579b62ccf91e5b9b23c4f96e7cbf202595e28cb8b6479b12c2f91e5a5b2bc4c96df92e5b76579b92cbf23cbefcaf27bb2bc4296df97e595b2bc4a9657cbf21a595e2bcbeb6479bd2c6f481040703d0410dc00b910ecd10908ae850082eb2016853a01c1d51040700dc422af13105c09010457412cdaab13105c010104df8758b44f2720f82e04107c0f62d17e9d80e0720820f80ec4a2cf7402826f410041cc5f7f077402824b218020a60f75502720b818020862fa50877402820b21802066b272582720381f020862262b477402827321802066b272542720381b020862262bc7740282b3208020867e3baeb32b7e0c52e538c4a2133a2d3a02a9721462d1499d161d8254390cb1e8944e8b0e40aa1c8458f4b94e8bf643aa7c06b1e8b44e8bf642aaec8358f4854e8b4248150fb1e88c4e407026c4a23d108bbed4b98bce40aa7c09b1e8ac4e8b4e43aa7c01b1e82b9d169d8254f91c62d1399d169d80543909b1e86b9d169d8354f91a62d1373a2d3a0ba9f215c4a26f355af4000410c47c57eebcce3df40da4cab7903d745e3920f80008109c4137a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7bb3d29b55deacf6668d376bbd59e7cd7a6f36dc0d10dc28e3479b6479b32c7f20cb5b64f94359de2acb1fc9f23659fe5896b7cbf227b2bc439677caf22e59fe549677cbf21e590e65d9cbf25e59de27cbfb65f933593e20cb0765f9902c1f96e523b27c54968fc9f2f10401048f410041484f3c59629d80e011082008e989278bd509081e820082909e78b2243a01c103104010d2134f96542720b81f0208427ae2c992e90404f7420041484f3c599c4e4030840082909e78b2e43a01c1dd104010d2134f16af1310dc0501043f855894422720b8030208ee845894522720b81d02087e02b1e83e9d80e0360820f831c4a2543a01c1ad1040f0238845a97502825b2080e087108bd2e80404374300c10f2016a555d9154f960652252dc4a2743a2d4a05a9921a62517a9d16a58454b90f6251069d16c543aaa480589451a74571902ac9211665d2695152489564108b32ebb42816522509c4a22c3a01c14d108b12432cba5fe72eca02a90279b163b2ac3a2dca04a9921962d1033a2dca00a992116251369d16a58354490fb1e8419d1665835479106251769d16658554815074c91ed26851360820b81162730e9d7b283ba4ca43903d94433920980d04086ea49b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbd39e0cd416f0e7973d89b23de1cf5e69837c7ef06089e90f1a393b27c4a963f97e5d3b2fc852c9f91e52f65f9ac2c7f25cbe764f96b59fe4696bf95e5f3b2fc9d2c7f2fcb3fc8f20559fe51967f92e59f65f91759fe55962fcaf22559be2ccb5764f9aa2c5f93e5ebb27c234100c1eb1040f006e442504e2720781502085e8358545e2720781902085e8158f48c4e40f0220410bc04b1a8824e40f0170820f82bc4a2677502823f4100c19f211655d409085e8000823f422c7a4e2720f83d0410fc016251259d80e0790820f81dc4a2e7750282df400041c8970c9355d609089e83008290af3b277b4127207816020842beee9cac8a4e40f00c0410843cc02359559d80e069082008798047b26a3a01c153104010f2008f642feaec8a57835479116251759d16558154a90ab1a8864e8b2a43aabc00b1a8a64e8b2a41aa3c0fb1a8964e8b2a42aa3c07b1a8b64e8b2a40aa3c0bb1a88e4e8bca43aa3c03b1a8ae4e40f024c4a272108beae9dc45752155ea412caaafd3a2da902a75201635d069514d48955a108b1aeab4a83aa44a0d88452fe9b4a821a4ca4b108b1ae9b4a83ea44a0388452f6bb40882871ac8e33e9335d6b9871a41aabc0cd9438d9503820f8200c11374334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b73717bdb9e4cd656fae7873d59b6bde5cf7e6c6dd00c1df64fce8a62cdf92e5df65f9b62cff21ca36912c4764d9c8b2956527cb812cc7c87262598e95e524b29c549693c9729c2c2797e578594e21cb2965f93e594e25cba965398d2ca795e574b29c5e9633c872c68400046d06042068315febe9a71210b4e91080a0c57cada7bf4a40d0a641008216f3e885012a01419b0a01085acca31706aa04046d4a042068318f5e18a41210b4f10840d0621ebd3058252068e31080a0c53c7a61884a40d02645008216f3e885a12a01411b8b00042de6d10b6fa804046d0c0210b498472f0c5309085a8700046d00b168b84a40d01a0420682dc4a2112a01419b080108da08c4a2913a01c1db1040f00f8845a3740282b72080e0ef108b46ebec8a8f8254190db1688c4e8b4640aa8c84583456a745c3205586432c1aa7d3a2a1902a6f402c1aafd3a2c1902a4320164dd069d140489541108b26eab4a83fa4ca00884593740282372116f583583459e72e9a04a9321962d1149d164d80549908b168aa4e8bc641aa8c8758344da745632055c6422c9aaed3a269902ad32116cdd069d1144895a9108b666ab4283b0410fc0d62f32c9d7b08f2fee46433217b68967240303b0810fc8d6e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef63695b7a9bd4de36d5a6fd3799bdedb0cde66bc0b206833c9f8516659ce22cbf7cb7256597e4096b3c9f283b29c5d961f92e51cb2fcb02ce794e5476439972c3f2acbb965f93159ce23cb8fcb725e597e4296f3c9727e592e20cb0565b9902c1796e522b25c54968bc972f10401048b4100c1e2900bc1269d8060110820581462d1669d8060210820581862d1073a01c1021040b020c4a22d3a01c17c1040303fc4a20f750282792180e013108bb6ea0404f34000c1c721167da41310cc0d01041f8358b44d2720980b02083e0ab1e8639d80604e0820f808c4a2ed3a01c11c1040f06188459fe80404b3430041ccbb2c76e80404b3410041cc5b7576aa04046d56042068316fd5d9a51210b4591080a0c5bc27ee539d5df15d902a9f422cdaadd3a21d902a3b2116edd169d17648954f2016853a2dda06a9f231c422afd3a2ad902a1f412cdaabd3a22d902a1f422cdaa7d3a2cd902a1f402cdaaf1210b49921166d8258f499ce5db41f52e533884507745ab41752651fc4a2833a2d0a21553cc4a2433a2dda0da9b20762d1619d161d8254390cb1e8884e8b0e40aa1c84587454a345906ea1c5bc55fe98ce3d740452e528640f1d530e083e8401046d26ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbdb02de16f4b690b785bd2de26d516f8b795bfc6e806009193f2a29cb4fcaf253b2fcb42c9792e5d2b25c4696cbca7239592e2fcbcfc87205597e56962bcaf273b25c49969f97e5cab2fc822c5791e5aab25c4d965f94e5eab25c43966bca722d59ae2dcb7564b9ae2cd74b1040b02e0410c43c3dfe9a4e40b0360410c43c3dfeba4e40b0260410c43c3dfe864e40b03a0410c43c3dfe379d80603508208879c3d74d9d80601508208879c3d72d9d80606508208879c3d7ef3a01c14a104010f386afdb3a01c18a104010f386af3f74028215208020e40d5f7189740282e5218020e40d5f71119d80605908200879c3579cd1090896860082652016599d80e0d31040b014c422a713107c1202083e05b12850d9158f73902a9007bec6c5e8b4c840aa401ef81a9758a745892055200f7c8d8bd5397eba0da90279e06b5c129d16dd8254813cf0352ea94e8b308f70b909b128994e8bae43aadc805814a713102c09b1e81ac4a2e43aaf6871902a909772c4c5ebb42829a40ae4a51c7129745a140ba9027929475c4a9d16c540aa405eca11779f4e8b5242aa405e3315974aa745f1902a90d74cc5a5d668510e0820580262731a9d7b2815a40ae48577108b121210cc0102044bd0cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde56f7b686b735bdade56d6d6feb785bd7db7a770304ebcbf85103596e28cb2fc97223597e59961bcb7213596e2acbcd64b9b92cb790e596b2dc4a965bcb721b596e2bcbafc8723b597e5596dbcb720759ee28cbafc9722759ee2ccb5d64b9ab2c7793e5eeb2dc43967b260820d8030208f6845c080aea0404bb4100c1ee108b0ae90404bb4000c1ae108b0aeb04043b4100c1ce108b8ae804043b4200c1d7201615d50908b68700821d201615d30908b6830082af422c2aae13106c0b01045f815854422720d81a0208b6815854522720d8120208b68258f4a44e40b03904106c01b1e8299d8060530820d80c62d1d33a01c1c61040b009c4a2523a01c1461040f0658845a57502820d2180e04b108bcae8ec8a978654c190b865755af434a40a86c42da7d3a227215530246e799d1661666b2521163da3d3a262902a9057bbc455d06951114815c8ab5de29ed56951214815c8ab5de22aea04041b402c82bcda25ee399dbba822a40ae4db927195745a54015205f36dc9e7755a541e5205f36dc9ca3a2d2a0ba982f9b6e40b3a2daa0ca902f9fe7f5c159d16558254817cff3faeaa468b20af64b1f5213657d3b987aa40aa409e4402b1282101c1874180607dba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbdb4ede76f6b68bb75dbdede66d776f7b78dbf36e80602f193fea2dcb7d64f97559ee2bcbfd64b9bf2c0f90e581b23c489607cbf210591e2acb6fc8f230591e2ecb236479a42c8f92e5d1b23c4696c7caf238591e2fcb136479a22c4f92e5c9b23c4596a7caf234599e9e2080e0340820381d7221e8a013109c020104a7422ceaa813109c04010427432c7a4d2720380102084e8458d4492720380e02088e8758d4592720380602088e8558d4452720380a02088e8658d4552720380202088e8458d44d2720380c02080e8758d45d272038140208be01b1a8874e40703004101c02b1a8a74e40702004101c04b1a8974e40b03f04101c00b1a8b74e40b02f0410ec07b1a88f4e40b00f04107c1d62d1eb3abbe27d20553016f5d569512f4895de108bfae9b4a807a40ae63bb7fd755ad40d5205f39ddb013a2dea02a982f9ceed409d16758254c17ce776904e8b3a42aa60be733b582720d81b6211e63bb74374eea2c1902a983f6387eab46820a40ae6cfd837745ad41f5205f367ec309d16f58554c1fc193b5ca745c32055308dd9113a2d1a0aa98269cc8ed468514e082088f9537894ce3d3402520533221aa51c10cc0902047bd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde32e6e4ed246f277b3bc5dba9de4ef376fadd00c119327e34539667c9f29bb23c5b96e7c8f25c599e27cbf36579812c2f94e545b2bc589697c8f252595e26cb6fc9f2dbb2bc5c96df91e57765f93d595e21cbefcbf24a595e25cbab65798d2caf95e575b2bc5e9637240820b81e02086e805c08ded60908ae850082eb20162dd70908ae8600826b2016bda313105c09010457412c7a572720b8020208be0fb1e83d9d80e0bb1040f03d88452b740282cb2180e03b108bded70908be050104df8658b4522720b81402082e8358b44a2720b81802082e8158b45a2720b81002082e8258b4462720381f02082e8058b456272038170208ce8358b44e2720381b0208ce8158b45e2720380b0208be09b16883ceaef87a48154c3364a34e8bd642aa609a219b745ab41a5205d30cd9acd3a295902a9866c8073a2d5a01a98269866cd169d1bb902a9866c8873a2d5a0ea98269866cd50908ce84588469867ca473176d8554f90862d1369d166d8154f91062d1c73a2dda0ca9f201c4a2ed3a2dda08a9b20962d1273a2dda0ea9f209c4a21d3a2dda06a9f231c4a29d1a2d7a040208ce80d8bc4be71eda01a9b213b287762907041f01018233e86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f6f577abbcadbd5deaef176adb7ebbc5defed86bb01821b65fc68932c6f96e50f64798b2c7f28cb5b65f92359de26cb1fcbf27659fe449677c8f24e59de25cb9fcaf26e59de23cba12c7b59de2bcbfb6479bf2c7f26cb0764f9a02c1f92e5c3b27c44968fcaf231593e9e2080e0310820781c7221f8562720780402081e8558745e2720780802081e8658f49d4e40f00004103c08b1e87b9d80e07e0820f819c4a21f7402827b2180e03e884517740282210410f4108b7ed40908ee8600827b2016fda41310dc0501043f8558f4b34e4070070410c4f4107ed109086e870082986ee6af3a01c16d104010d3cdbca81310dc0a010431f3b94b3a01c12d104010339fbbac1310dc0c010431f3b92b3abbe2972155ae402cbaaad3a28b902a9720165dd369d12f902abf422cbaaed3a29f20557e86587443a7451720557e8458f49b4e8bbe8754f90162d14d9d169d8754f90e62d12d9d80e0268845df422cfa5de72eba05a9f23bc4a2db3a2dfa0d52e526c4a23f745a741d52e506c2a2e489745a741552e51ac4a2884a8b9227825489402c323a77d16d48953f2016598d16e5820082109a37b9d3f96b6620552c640f39e580602e1020b8916e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef6f680b707bd3de4ed616f8f787bd4db63de1ebf1b207842c68f4ecaf22959fe5c964fcbf217b27c4696bf94e5b3b2fc952c9f93e5af65f91b59fe5696cfcbf277b2fcbd2cff20cb1764f94759fe49967f96e55f64f95759be28cb9764f9b22c5f91e5abb27c4d96afcbf28d040104af430041cc5dfb433a01c1ab10401073d79e4327207819020842262bc91fd609085e84008290c94af29c3a01c15f20802064b292fc119d80e04f1040103259499e4b27207801020842262bc91fd509087e0f0104219395e4b9750282e721802064b292fc319d80e0371040103259499e472720780e02087e0db1e8719d80e0590820f815c4a2bc3a01c1331040f04b88454fe804044f4300c12f2016e5d309089e8200829f432ccaafb32b9e0f52253fc4a2023a2dca0ba9f204c4a2823a2dca03a9f238c4a2423a2dca0da9f218c4a2c23a2dca05a9f228c4a2223a2dca09a902799c4cf2a23a2dca01a9f230c4a2623a01c193108b1e8258545ce72e2a06a9521c6251099d16158154290ab1a8a44e8b0a41aa148658f4a44e8b0a40aa148458f4944e8b9e8454790a62d1d33a2d2a01a952126251298d1641ee8aed0988cda575eea1a721554a41f65069e580e0a32040f004dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fceded456f2f797bd9db2bde5ef5f69ab7d7bdbd713740f037193fba29cbb764f97759be2dcb7f88b24b24cb115936b26c65d9c97220cb31b29c5896636539892c2795e564b21c27cbc965395e9653c8724a59be4f9653c9726a594e23cb6965399d2ca797e50cb29c3121004197010108ba8c900bc1cb2a0141970e0108baf4108b1aab04045d1a0420e8d2422c6aa2121074a91080a04b0db1a8a94a40d0a5440082ee3e8845cd5402822e1e0108ba14108b9aab04045d1c021074c92116b5500908baa40840d0258358d4522520e8621180a04b02b1a8954a40d0c5200041971862516b9580a0730840d005108bdaa804049d4100820ef355d5b62a0141970801083acc97e65fd10908de860082982fcdb7d30908de82008290c7c0247f556757bc1da4caab108bdaebb4a82da4ca2b108b3ae8b4a835a44a1b88451d755ad41252a515c4a2d7745ad41c52a505c4a24e3a2d6a0aa9d20c6251679d163586546902b1a88b4e40f026c4a297211675d5b98bba40aa748558d44da7459d20553a432ceaaed3a28e902aaf412ceaa1d3a2f6902a1d2016f5d469510f48959e108b7ae9b4a81ba44a778845bd355a941b0208421e1a9bbc8fce3dd40b52a537640ff5510e08e6060182bfd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfdea5f22eb57769bc4beb5d3aefd27b97c1bb8c7701045d26193fca2ccb5964f97e59ce2acb0fc87236597e5096b3cbf243b29c43961f96e59cb2fc882ce792e5476539b72c3f26cb7964f97159ce2bcb4fc8723e59ce2fcb0564b9a02c1792e5c2b25c44968bca7231592e9e20806031082088f972d84c9d806011082088f972d82c9d806021082088f972d89b3a01c102104010f3e5b0d93a01c17c104010f3008f393a01c1bc104010f3008fb93a01c13c104010f3008f793a01c1dc104010f3008ff93a01c15c104010f3008f053a01c19c104010f3008f853a01c11c104010f3008f453a01c1ec104010f3008fc53a01c16c1040f04188454b5402822e2b0210740f402c5aaa121074591080a0bb1f62d1329d5df1a5902acb2016bda5d3a2c5902a4b2016bdadd3a285902a8b20162dd769d17c489505108bded169d15c489579108bded569d16c489539108bded369d12c4895372116ad500908bacc108b66422c7a5fe72e5a01a9f23ec4a2953a2d7a1752e53d8845ab745ab41c52e51d8845ab755af416a4cadb108bd6e8b46835a4ca1a88456b755ab412526515c4a2751a2d824c2e5c2688cdeb75eea1b5902aeb207b68bd7240f0310c20e832d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde15f0aea07785bc2bec5d11ef8a7a57ccbbe27703044bc8f85149597e52969f92e5a765b9942c9796e532b25c5696cbc97279597e46962bc8f2b3b25c51969f93e54ab2fcbc2c5796e51764b98a2c5795e56ab2fca22c5797e51ab25c53966bc9726d59ae23cb7565b95e820082752180603dc885e0a84e40b0360410ac03b1e8984e40b0260410ac05b1e8b84e40b03a0410ac01b1e8844e40b01a04107c1162d1499d8060150820581562d1299d8060650820f802c4a2cf750282952080e0f3108b4eeb04042b4200c1e720167da11310ac0001049f855874462720581e02083e03b1e84b9d8060590820580e62d1599d8060690820580662d1573a01c1a7218020e68d28e77402824f420041ccbb99bed6d9153f07a9827923fc373a2d3a0ba9827923fcb73a2d3a03a9827923fc799d169d8654c1bc11fe3b9d169d8254c1bc11fe7b9d1661def1761262d10f3a2d3a06a9721c62d1059d8060498845472116fda873175d8054f91162d14f3a2dfa1e52e50788453febb4e83ca4ca77108b7ed169d137902adf422cfa55a745bf40aafc0ab1e8a24e8b7e8254f91962d1258d16e58100829837395fd6b9872e42aa5c82eca1cbca01c13c2040b004dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced5d75ef6a7857d3bb5aded5f6ae8e7775bdab773740b0be8c1f3590e586b2fc922c3792e59765b9b12c3791e5a6b2dc4c969bcb720b596e29cbad64b9b52cb791e5b6b2fc8a2cb793e55765b9bd2c7790e58eb2fc9a2c7792e5ceb2dc4596bbca723759ee2ecb3d64b9678200823d208020e489cdf1a9750282dd208020e489cdf1697402825d208020e41d04f1697502829d208020e41d04f1e97402821d218020e41d04f1e9750282ed218020e41d04f119740282ed208020e43d71f1197502826d218020e43d71f199740282ad218020e43d71f1997502822d218020e43d71f159740282cd218020e43d71f1f7eb04049b420041c87be2e2b3ea04041b430041c87be2e21fd009083682008290f7c4c567d30908368400822f412c7a5065573c3e1ba40ae4519df1d9755a94155205f2a8cef887745a94055205f2a8cef81c3a2d823c7c233e33c4a287755a9401522523c4a29c3a2d4a07a9921e62d1233a2d4a03a9921662512e9d8060038845a921163daa7317e5825481bc4e213eb74e8b7242aa405ea710ff984e8b7240aa405ea7109f47a745d9215520af53887f5ca745792055202f088acfabd3a2dc902a90c7ecc53fa1d122c8a7efea436ccea7730fe5855481bcaa0c62514202828f8300c1fa74334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b7779dbcebec5d17efba7ad7cdbbeedef5f0aee7dd00c15e327ed45b96fbc8f2ebb2dc5796fbc9727f591e20cb036579902c0f96e521b23c5496df90e561b23c5c9647c8f248591e25cba365798c2c8f95e571b23c5e9627c8f244599e24cb9365798a2c4f95e569b23c3d4100c1691040703ae44250552720380502084e8558544d2720380902084e8658f4a24e40700204109c08b1a8ba4e40701c04101c0fb1a8864e40700c04101c0bb1a8a64e40701404101c0db1a8964e40700404101c09b1a8b64e40701804101c0eb1a88e4e40702804107c0362515d9d80e0600820380462513d9d80e0400820380862517d9d80607f082038006251039d80605f0820d80f6251439d80601f0820f83ac4a2977476c51b42aa6018ca463a2dc24c451a402c7a59a745752155202fe5886facd3a2da902a909772c437d169514d4815c84b39e29beab4a83aa40ae4a51cf1cd745a540d5205f2528ef8e63a01c1de108b202fe5886fa17317358754c17ccfada54e8b9a42aa60bee7d64aa7458d215530df736badd3a246902a98efb9b5d169516b4815cc37b7dbeab4a825a40ae69bdbaf68b4282f0410ec05b1b99dce3dd4165205f30c8976ca01c1bc2040b017dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced1d634ede4df26eb27753bc9beadd34efa6df0d109c21e347336579962cbf29cbb365798e2ccf95e579b23c5f9617c8f242595e24cb8b6579892c2f95e565b2fc962cbf2dcbcb65f91d597e5796df93e515b2fcbe2caf94e555b2bc5a96d7c8f25a595e27cbeb657943820082eb2180e006c88560a44e40702d04105c07b168944e40703504105c03b168b44e40702504105c05b1688c4e40700504107c1f62d1589d80e0bb1040f03d8845e3740282cb2180e03b108bc6eb0404df8200826f432c9aa013105c0a010497412c9aa813105c0c010497402c9aa413105c08010417412c9aac13109c0f010417402c9aa213109c0b0104e7412c9aaa13109c0d0104e7402c9aa613109c050104df8458345d67577c1aa40ae6db9233745a34055205f36dc9993a2d9a04a982f9b6e42c9d164d8054c17c5bf24d9d168d8354c17c5b72b64e8bc640aa60be2d3947a745a3205530df969cab13109c09b108f36dc9793a77d15c4815cc1f20f3755a341b5205f307c8029d16cd8254c1fc01b250a74533205566422c5aa4d3a285902a9896da629d16cd8754c1b4d49668b408f2603b87f9655daa730f2d8654c134f7972a07049f00018233e86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36fef567ab7cabbd5deadf16ead77ebbc5befdd86bb01821b65fc68932c6f96e50f64798b2c7f28cb5b65f92359de26cb1fcbf27659fe449677c8f24e59de25cb9fcaf26e59de23cba12c7b59de2bcbfb6479bf2c7f26cb0764f9a02c1f92e5c3b27c44968fcaf231593e9e2080e0310820781c7221d8a913103c0201048f422cdaa513103c0401040f432cfa542720780002081e8458b45b2720b81f02087e06b1688f4e40702f0410dc07b128d40908861040d0432cf23a01c1dd1040700fc4a2bd3a01c15d1040f0538845fb7402823b2080e04e8845fb750282db2180e027108b3ed309086e8300821f432c3aa01310dc0a01043f825874502720b80502087e08b1e8904e4070330410fc0062d1619d5df143902a983f638fe8b4e800a40ae6cfd8a33a2dda0fa982f933f6984e8bf642aa60fe8c3daed3a2105205f367ec099d16ed8654c1fc197b52a745bb2055307fc69ed209086e825884f933f6739dbbe814a4cae7108b4eebb4e804a4ca4988455fe8b4e818a40a66d47846a74547205530a3c62f755a740652e54b884567755a741a52e50b88455f69b4281f0410dc08b1f99cce3d741652e52bc81e3aa71c10cc07020437d2cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde1df0eea07787bc3becdd11ef8e7a77ccbbe37703044fc8f8d149593e25cb9fcbf26959fe4296cfc8f297b27c5696bf92e573b2fcb52c7f23cbdfcaf27959fe4e96bf97e51f64f9822cff28cb3fc9f2cfb2fc8b2cff2acb1765f9922c5f96e52bb27c5596afc9f27559be912080e0750820780371214861750282572180e03588454e2720781902085e815814e804042f4200c14b108b62740282bf4000c15f211625d60908fe0401047f865814ab1310bc0001047f845894442720f83d0410fc016251529d80e0790820f81dc4a2643a01c16f2080e0b7108be2740282e72080e0d7108b92eb0404cf42004148272a45bc4e40f00c041084f4c453a4d009089e860082909e788a943a01c15310401032e54d719fcaae788a94902af7412c4aa5d3a278489514108b52ebb4280e522539c4a2343a2d4a0aa9920c62515a9d16c542aa248158944ea74531902a892116a5d76991835409201665d009089e845864211665d4b98b3240aa6484589449a745e92055d2432ccaacd3a234902a69211665d169512a4895d4108beed76951164895fb211665d56951264895cc108b1ed068517e08200861c25364d3b987b242aa3c00d943d9940382f94180e009ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbbb8bde5df2eeb27757bcbbeadd35efae7b77e36e80e06f327e7453966fc9f2efb27c5b96ff10e520912c4764d9c8b2956527cb812cc7c87262598e95e524b29c549693c9729c2c2797e578594e21cb2965f93e594e25cba965398d2ca795e574b29c5e9633c872c6840004830c084030c0fced574a252018a443008201e66fbfd22a01c1200d02100c307ffb9551090806a910806080f9dbafac4a40304889000403cc7cae9c4a40308847008201663e575e252018c42100c100339f7b462520182445008201663e5741252018c42200c100339f7b56252018c42000c100339faba812100c1c02100c30f3b9e75402828141008201663e574925201824420082410462d1f33a01c1db1040f00f884595750282b72080e0ef108b5ed0d915af0ca9f202c4a22a3a2daa04a9f23cc4a2aa3a2daa08a9f21cc4a26a3a2daa00a9f22cc4a217755a541e52e5198845d5755a541652a51cc4a21a3a2d2a0da9520662514d9d80e04d8845a52016d5d2b98b6a42aad48258545ba745d521556a402caaa3d3a26a902a2f422caaabd3a22a902a552116d5d369515d48957a108beaebb4a836a44a1d88450d345a54000208fe06b1b9a1ce3d541f52a501640f35540e0816000182bfd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3e48e583d43e48e383b43e48e783f43ec8e0838c770104834c327e945996b3c8f2fdb29c55961f90e56cb2fca02c6797e5876439872c3f2ccb3965f91159ce25cb8fca726e597e4c96f3c8f2e3b29c57969f90e57cb29c5f960bc87241592e24cb8565b9882c1795e562b25c3c4100c1621040b038e442d05b272058040208168558d447272058080208168658f4ba4e40b00004102c08b1a8af4e40301f0410847c3d28453f9d80605e0820f804c4a2fe3a01c13c1040f071884503740282b92180e063108b06ea0404734100c14721160dd20908e68400828f402c1aac1310cc0101041f865834442720981d02083e04b168a84e40301b04107c1062d11b2a01c1202b02100c305f781ea612100cb22000c100f3e885e13abbe2c3205586432c1aa1d3a2a1902a6f402c1aa9d3a2c1902a4320168dd269d140489541108b46ebb4a83fa4ca00884563745ad41752a51fc4a2b13a2dea03a9f23ac4a2712a01c12033c4a2de108bc6ebdc45e32055c6432c9aa0d3a231902a6321164dd469d1284895d1108b26e9b46804a4ca48884593755a3409526532c4a2293a2d9a00a9321162d1548d1641a6a801e6418dd374eea129902a53217b689a7240b02006100c32d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3e28e083823e28e483c23e28e283a23e28e683e27703044bc8f85149597e52969f92e5a765b9942c9796e532b25c5696cbc97279597e46962bc8f2b3b25c51969f93e54ab2fcbc2c5796e51764b98a2c5795e56ab2fca22c5797e51ab25c53966bc9726d59ae23cb7565b95e82008275218020e60b19eb740282b5218020e60b19eb75028235218020e62b861b740282d5218020e62b861b750282d5208020e62b869b74028255208020e62b869b75028295218020e631301fe804042b410041cc6360b6e804042b420041cc63603ed409085680008298c7c06cd509089687008298c7c07ca413102c0b0104318f81d9a613102c0d0104318f81f9582720f8340410c43c0666bb4e40f0490820f814c4a24f7476c5b743aa7c02b168874e8bb641aa7c0cb168a74e8bb642aa7c04b168974e8bb640aa7c08b1e8539d166d8654f90062d16e9d166d8454d904b1688f4e8bd643aa6c805814ea04044b422c5a07b1c8ebdc4521a48a8758b457a745bb2155f6402cdaa7d3a25d902a9f422cdaafd3a21d902a3b21167da6d3a2fd902a9f412c3aa0d3a2bd902afb20161dd46851210820580262f3219d7be800a4ca41c81e3aa41c102c0402044bd0cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3ea8ee831a3ea8e9835a3ea8ed833a3ea8eb837a770304ebcbf85103596e28cb2fc97223597e59961bcb7213596e2acbcd64b9b92cb790e596b2dc4a965bcb721b596e2bcbafc8723b597e5596dbcb720759ee28cbafc9722759ee2ccb5d64b9ab2c7793e5eeb2dc43967b260820d8030208f6845c082ee90404bb4100c1ee108b2eeb0404bb4000c1ae108baee804043b4100c1ce108baeea04043b4200c1d720165dd30908b68700821d20165dd70908b6830082af422cbaa113106c0b01045f8158f49b4e40b03504106c03b1e8a64e40b02504106c05b1e8964e40b03904106c01b1e8779d8060530820d80c62d16d9d8060630820d80462d11f3a01c1461040f06584452913e904041b4200c1972016455476c55326825481bccb3ba5d13938b80da9027997774aabd3a25b902a907779a7743a2dc2bc9deb26c4a240a745d721556e402c8ad169d15548956b108b12ebb4e832a4ca158845b13a01c106108b2e412c4aa2f3be2816522509c4a2a43a2d8a8154490cb128994e8b1ca44a00b1284ea7450652c5422c4aaed3a2384895e4108be2755a9414522519c4a2141a2d82bcaa2e80bc8537654a9d7b281e522505640fa5540e0816060182f5e96694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f1f74f241671f74f141571f74f341771ff4f041cf7f0c082eae51b14c81c245269c7273278437622784d7e9e71afd5ca59f2bf473997e2ed1cf45faf9957e7ea19f9fe9e727faf9917e2ed0cf0ff4f33dfd7c473fe7e9e75bfaf9867ebea69f73f4f315fd9ca59f2fe9e70cfd7c413fa7e9e773fa39453f27e9e744ec041fc9c84b065ed2f3928e97b4bca4e125352fa978b98f9794bca4e0259e97e4bcc4f1928c97a4bc24e1259697c4bcc4f012f0e278b1bc185e22bc24a2a3f8837e6ed3cfeff4738b7e6ed2cf6f2c16e7a5182f457929c24b615e0af152909702bce4e7251f2f4ff0929797c779c9c3cb63bce4e6e5515e72f1f2082f39797998971cbc3cc44b765e1ee4251b2f0ff0929597fb79c9c24b665e32f1528f97babcd4e1a5362fb578a9c94b0d5eaaf3f2222fd578a9ca4b155e5ee0a5322fcff3528997e778a9c8cbb3bc54e0e5195ecaf3528e97b2bc94e1a5342fa578799a97a77879929792bc94e0a5272f3d78e9ce4b375ebaf2d28597cebc74e2e5355e3af2d28197f6bcbcca4b3b5e5ee1a52d2f6d7869cd4b2b5e5af2d28297e6bc34e3a5292f4d7869cccbcbbc34e2e5255e1af2d28097fabc4ce7651a2f537999c2cb645e26f132919709bc8ce7651c2f637919c3cb685e46f132929711bc0ce765182f6ff032949721bc0ce665102f037919c04b7f5efaf1d29797d779e9c34b6f5e7af1b28197f5bcace3652d2f6b7859cdcb2a5e56f2f23e2f2b78798f977779798797e5bcbccdcb5bbc2ce365292f4b7859cccb225e16f2b28097f9bccce3652e2f737899cdcb9bbccce265262f337839cecb315e8ef2728497c3bc1ce2e5202f0778f98c97fdbcece3652f2f9e9790973dbcece6e5535e76f1b293971dbc7cc2cb765e3ee6651b2f1ff1b295970f79d9c2cb07bc6ce665132f1b79b9c1cb755eaef17295972bbc5ce6e5122f1779f995975f78f999979f78f991970bbcfcc0cbf7bc7cc7cb795ebee5e51b5ebee6e51c2f5ff17296972f7939c3cb17bc9ce6e5735e4ef17292174e3ec3c96738f90c279fe1e4339c7c8693cf70f2194e3ec3c96738f90c279fe1e4339c7c8693cf70f2194e3ec3c96738f90c279fe1e4339c7c8693cf70f2194e3ec3c96712f161fcc1cb6d5e7ee7e5162f3779e1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf70fe19ce3fc3f96738ff0ce79fe1fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf72fe59ce3fcbf96739ff2ce79fe5fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02ce3fc7f9e738ff1ce79fe3fc739c7f8ef32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebfa07e6cb4fbdecb07bd7dd0c707affba0af0ffaf9a0bf0f06f860a00f06f960b00f86f860a80fdef0c1301f0cf7c1081f8cf4c1281f8cf6c1181f8cf5c1381f8cf701559ce883493e98ec83293e98ea83693e98fe0f5aefef3ed3ac79e726355a34eb480df857f24fa6a39840fb8af617ed33da6fe41bf9473e929fe42bf94b3e93dfe43bf94f9f037d1ef4b9d0e7439f137d5ef4b9d1e7479f237d9ef4b9d2e74b9f337ddef4b9d3e74ffba0169fe804da1ab44568abd096a1e8270bc80ab284ac218bc82ab28cac230bc94ab294ac258bc96ab29caca78f803e0afa48e8a3a18f883e2afac8e8a3a38f903ecaaef4af283d21a40b4948d791902e23215d4542ba8884740d09e91212d21524a40b4848d78f902e1f215d3d42ba788474ed08e9d211d29523a40b4748d78d902e1b215d3542ba688474cd08e99211d21523a40b065d2ee86241970aba50d065822e12215d1e42ba3a84747108e9da10d2a521a42b4348178690ae0b215d1642ba2a84745108e99a10d22521a42b4248178490ae07215d0e42ba1a84743108e95a10d2a520a42b4148178290ae03215d0642ba0a84741108e91a10d22520a42b4048178090a23f3c1af5977612ef2abe74057c110bf87216f0852de04b5cc017bb802f7b015f0003be14067c510cf8f218f08532e04b66c017cf802fa3015f5003beb4067c910df8721bf08537e04b70c017e3802fcb015fa003be54077cd10ef8f21df0853ce04b7ac017f7607aac0f66fcd77921e47d73c10cc84875e65f2f326049d94e6ddab56bd36af2781a6eb569dfaa5d0bcc942f7a747f75ce173da6573bb6a349deac7193062cabd4f5d58ecfb5acd2a1cb844476c0a2721dda77ee3221f2d7df239b7fc03b65dbb46fd2a96785362dda35afda7152a205e5db748b245a58a34b878e13c78d03fc0bfef31e1a3f11622f7982f9a0de046ca30439bf37e16f51d6635842fdde1584fed6cdbef75bf75fcc2547305b688ec2df393abb3988dfb8ff7f6b4f54b7b5b107941f70408bca74ead4a4e7a94429318774df5f3f24cc81a4d27220a9b51c481a2d079256cb81a4d37220e9b51c48062d079251cb8164d2722099b51c48162d0772bf9603c9aae5401ed07220d9107f05fcc7ad09751ae6fa609e0fe6fb60810f16fa60910f16fb60890f96fa60990fdef2c1db3e58ee83777cf0ae0fdef3c10a1fbcef83953e58e583d53e58e383b53e58e783f53ed8e0838d3ed8e483cd3ef8c0075b7cf0a10fb6fae0231f6cf3c1c73ed8ee834f7cb0c3073b7db0cb079ffa60b70ff6f820f481f7c15e1fec1b3763c082173a749b60cd9fff6d227ffe7724d17ffc7992e82fff79923fdf80b72b74e8d4a24dabf6dc7e9cb8aa19add53ab5e9d6a44b0bee497669d3a1fdf801cb2ab668d2316ad304976fe28077aab768d5a67397169d9e6bdfbc458fc81dffdbfce7ffbb4df9e73107eeff1c7b306021ffa1353ef6cfff9d28f27ffe0e1a0f6915cd01fc35f59fa0f0a52f76edd0a54d8bf65d26a3fea69e8ff8d5f9eb7fbd14f0c1673ed8bf557cb6e4fe88287f16fe8efbe6e5fffd08e7437c063c319c3dc27ec700bf9d16a8d94e077d7040de4e07e4ed743061b6d30288cf0720dbe9a0f6edb444cd763aec8343f2763a246fa7c309b39d96407c3e04d94e87b56fa7a56ab6d3511f1c91b7d311793b1d4d98edb414e2f311c8763aaa7d3b2d53b39d8efbe098bc9d8ec9dbe978c26ca765109f8f41b6d371eddb699f9aed74d20727e4ed7442de4e2713663bed83f87c02b29d4e6afc46744188cd7321554e21475a704ae214745efbf9bd79ed1df69227980feab44a4a82ceef349c929880693941aa7ca1725b9da6038334e6523ea1f28116a00fef0ce4b1184fa8c6dcce4003fccb7b017e87bde409e6833aab32c0e9fcce2ac5dcd08641a2293f2498e641aa7ca5facef22b68309dbb174c77d84b9e603ea8af5506139ddfd77feb3bcb6f546eabafe9c0307796f9ffce7796df42ee2cf3abbeb3fc161ae0e7ef05f81df69227980fea3b95014ee7f79dd23bcbef54ffde9d80fede7d7feff7ee0e7bc913cc07f583cadf3b3abf1ffed6374e17546eab1fe8c030374e05ffce374e3f426e9c0aaa0ef01fa101fed3bd00bfc35ef204f341fdac32c0e9fc7e567ae3f4b3eadfbb43d0dfbb5feefddedd612f7982f9a07e55f97b47e7f7ebdffac6e9a2ca6df52b1d18e6c6a9f0dff9c6e912e4c6a9b0ea00bf040df0cbf702fc0e7bc913cc0775456580d3f95d517ae37445f5efdd11e8efddd57bbf7777d84b9e603ea86b2a7fefe8fcaefdad6f9caeabdc56d7e8c030374e45ffce374e3720374e455507f80d6880ff762fc0efb0973cc17c50375506389ddf4da5374e3755ffde1d83fededdbaf77b7787bde409e683fa5de5ef1d9ddfef7feb1ba7db2ab7d5ef7460981ba7e27fe71ba73f20374ec55507f81fc8008f49742fc0efb0973c817c50311195014ee717d179e30431ecfffd6aebd26a2d9ab7e8d4b945fb891327f8605e789b1f47135d0f84b7134df031c6c758f19f3b95e831fa7f2f8cfe338ba2ebe2e87a28ba1e89aec7a2eb5bd1f5ede8ba3cbabe135ddf8daeef45d715d1f5fde8ba32baae8aaeaba3eb9ae8ba36baae8baeeba3eb86e8ba31ba6e8aae9ba3eb07d1754b74fd30ba6e8dae1f45d76dd1f5e3e8ba3dba7e125d7744d79dd1755774fd34baee8eae7ba26b185d7d74ddfba753cec7047775782eff133126baba3fffb9181f9358ed153f261690430915f785a0619fe45ed8ff1773c9114c72255518f5747649353f9b18b0b5b1075440dfb3891fd4f274c4ec5a0ee4212d079243cb813cace540726a399047b41c482e2d07f2a89603c9ade5401ed3722079b41cc8e35a0e24af96037942cb81e4c33d9b78a68f49e663e27c4c721f13ef6352f898943ee63e1f93cac7a4f631697c4cdaff8d47056f68d1feb5ae2dbab6a8d6b569bb36cdfee361c12cfdd707062753fcc060fe23e0af7ed009fa94b298e45a9e521693dec7a4139f5216934e7c4a594cfa04794a594c7288cfe926403c52fed0bb987835db29a38fc9206fa70cf276ca9830db291ee27306c876caa87d3ba552b39d32fb984cf276ca246fa7cc09b39d52417cce04d94e99b56fa7d46ab6d3fd3e268bbc9db2c8dbe9fe84d94ea9213e67816ca7fbb56fa7346ab6d3033e26abbc9db2cadbe98184d94e69203e67856ca70734420e852036278354c9a6f9395c31d9a053af07ef4dbdeeb0973cc17c50d935220e7c7ed975326a314921551e52b9adb2d3816118b5922a1935d0879703c2a895d4cca8c5e48006f8c3f702fc0e7bc913cc0795536580d3f9e554caa8e5d4f884d70290608a83547944f59de523d060ca752f98eeb0973cc17c508faa0c263abf47ffd67796b9556eab47e9c03077964ffd9def2c1f83dc593ea5facef2316880e7b917e077d84b9e603ea8c75506389ddfe34aef2c1f57fd7b9709fa7b97f7deefdd1df69227980fea0995bf77747e4ffcad6f9cf2a9dc564fd081616e9c4afd9d6f9cf2436e9c4aa90ef0fcd0002f702fc0efb0973cc17c50055506381f98d21b27d54f568ec902fdbd2b74eff7ee0e7bc913cc075558e5ef1d9d5fe1bff58d531195dbaa301d18e6c6a9ccdff9c6a928e4c6a98cea002f0a0df062f702fc3f17247bc913cc07555c6580d3f915577ae3a4fa39373159a1bf7725eefddedd612f7982f9a04aaafcbda3f32bf9b7be717a52e5b62a490786b9712af777be717a0a72e3544e75803f050df0a7ef05f81df69227980faa94ca00a7f32ba5f4c6a954c23fa82c262efa00ad74d135c39f8fd12aed63cafcbfa7f3d7c3a86c42b8fcd70fab9ccec32aaff3b09ed1795815741ed6b33a0faba2cec37a4ee76155d27958cfeb3cacca3a0feb059d875545e76155d57958d5741ed68b3a0fabbacec3aaa1f3b06aea3cac5a3a0fabb6cec3aaa3f3b0eaea3cac7a3a0fabbecec36aa0f3b01aea3cac97741e56239d87f5b2cec36aacf3b09ae83caca63a0fab99cec36aaef3b05ae83cac963a0fab95cec36aadf3b0dae83cacb63a0feb159d87d54ee761bd0a382cf9e53405693494223a274a195def8bae99a26b96e89a35baa68dae65a36bb9e85a3eba3e135d2b44d767a36bc5e8fa5c74ad145d9f8fae95a3eb0bd1b54a74ad1a5dab45d717a36bf5e85a23bad68caeb5a26bede85a27bad68daef5a26bfde8da20ba368cae2f45d746d1f5e5e8da38ba3689ae4da36bb3e8da3cbab688ae2da36babe8da3abab689ae6da3eb2bd1b55d747df5cf695a7b1fd3e1ae53b864d17fa274746dffe73fd7d1c7bca6970ae9049e55ab3ab9ce2a07f1313e261693155dc011a6edfcbaea8ce86e3a0fabbbcec3eaa1f3b07aea3cac5e3a0fabb7cec3eaa3f3b05ed779587d751e563f9d87d55fe7610dd0795803751ed6209d873558e7610d49f0bf3d53d21f44dda27f1d758fae3da26bcfe8da2bbaf68eae7da2ebebd1b56f74ed175dfb47d701d17560741d145d0747d7217ffec535d4c7bc9110f60cd3f9a90dd7795823741ed6489d87354ae7618dd6795863741ed6589d87354ee7618dd7795813741ed6449d873549e7614dd6795853741ed6549d87354d657b3329f52531df587c46e5f975a6be32e6fc2a24c43732fffab69a0ef92ee533902a4abfee3243e761cdd47958b354fe1ed3dcb113e6fcded469fb6c9d873547e761cdd57958f3741ed6fc847812c45ffd9d8e404e6d81c6533390535ba8f1d42ce4d416693c350739b5c51a4f2d809cda128da7160339b5a51a4f8d7af490935ba6f3e486434eee2d9d27370272726feb3cb99190935baef3e446414eee1d9d27371a7272efea3cb93190937b4fe7c98d859cdc0a9d27370e7272efeb3c39ccdf702b759e1c06905ea5f3e4301ddad53a4f6e12e4e4d6e83cb9c990935babf3e4a6404e6e9dce939b0a39b9f53a4f6e1ae4e436e83cb9e99093dba8f3e466404e6e93ce939b0939b9cd3a4f6e16e4e43ed079726f424e6e8bce939b0d39b90f759edc1cc8c96dd57972732127f791ce939b0739b96d3a4f6e3ee4e43ed678728921a7b65de3a9c5424eed138da79604726a3b349e1ae66be13b359e5a32c8a9edd2786a719053fb54e3a925879cda6e8da7160f39b53d1a4f2d05e4d4428da79612726afeaf9fdaa9443d23c6ba2026716c92a4c9e292c7a748795faad469d2a64b9f2163a6cc59eecffa40b607b33f94e3e19c8fe47a34f763791ecffb44befc050a162a5ca468b1e2254a3ef9d4d3a54a97295baefc33159eadf85ca5e72bbf50a56ab517abd7a859ab769dbaf5ea3768f852a3971b3769daac798b96ad5ab769fb4abb57db77e8f85aa7ce5dba76ebdea3e7a9448ff998053e66a18f59e46316fb98253e66294df569f64d13629aa3d2b491667234b9a2f90e4d416856401d75ea3b5377967a98d4e9a37e18758da8b7421d08fa3b9dfe9aa5bff9e82f23fafb81eeb2e95e94eed8e8ce86ee00e84a4957144a5e4a28fa4da61d4f3b831cfcff00", + "bytecode": "edbd07945555b6f5cfdd7b9fa280a240721211111111c951258a8808484e22398980e4241924e70c92a3a22239898808086703929388888a8a898c20fed7ba7eefffbdc7d76fd1ddce7a6f0d073d46ed1e3d66bb3c67de5df39c5aeb77cf99e453563c95acff801565db3569f64ad90e3d2a746ddfac5c9376ed062caa5ea6cab3cf8c9fe022821848628c24168915c4a292584c128b4b6209492c29894f4ae25392f8b4249692c4d292584612cb4a6239492c2f89cf486205497c56122b4ae273925849129f97c4ca92f882245691c4aa92584d125f94c4ea925843126b4a622d49ac2d897524b1ae24d693c4fa92d840121b4ae24b92d848125f96c4c692d844129b4a6233496c2e892d24b1a524b692c4d692d84612db4ae22b92d84e125f95c4f692d841123b4ae26b92d849123b4b621749ec2a89bd24b1b724f691c4d725b1af24f693c4b0bfa80e10d581a23a4854078bea10511d2aaa6f88ea30511d2eaa234475a4a88e12d5d1a23a4654c78aea38511d2faa134475a2a84e12d5c9a23a4554a78aea34519d1e3be0ad329dda7469fd6a8b2e6d9a4d1c3771c2f1d205f3152958a845d1022df217ccdf245f81e24d8b15ce57a870d322c5f217cb5fb858e1e6058a152cd8a258a162458b372d5e345ff1fc850ab6c8dfb270f1822df345ff933f9c46450ab42c52e82f1599fee791fc9522f97cccbee3a5f3fdc5fffc4383f8b0f2ffdbe736e53f8a34ff0b064d8518b43f010de2c3caf76f9ddba4ff5c24dfbf69d06488419f25b0417c58c5fee5739b704791e22dff0d8326420c3af03f60101d56a196ffd2b98dfb47458afe8b068d871874f07fc6a0e86115fea7cf6dcc7f57a4d0bf60d058884187fe070de2c3caf74f9ddb28a948be7fd2a0d110830eff0f1bc487d5ecaee736e26e458afe13068d841874e47fc1203eac02e2b90dfb678a14bd8b41c321061dfd5f32880fabe87f7b6e43ffd922450583de801874ec7fd1203eac62fff0dc06ff2b458afd37060d811874fc7fd9203eac7cffcfb90dfc178b1469f90f0c1a0431e8840283f8b0f2fd9773ebffef14297087410320069d5462101f5681ff38b7beff6e8d42ffd79f7e107b4e29b2a7608b962df9c8f2f7f94b35feb4e775883d9f27843d7fb1607efad420553e8758745aa7452720554e422cfa42a745c720558e432c3aa3d3a223902a4721167da9d3a243902a8721169dd569d101489583108bbed269d17e4895cf20169dd3764f447745f97b430cda0731e86b9d7be81ca4cad7108bbed169d1594895af20167dabd3a233902a5f422c3aafd3a2d3902a5f402cfa4ea745e72155be8358f4bd4e8bbe8154f91662d10f1a2dea0638b55e10932fe8dc41df43aafc00d941088b96956fd3a945b32e6dbab518b0ac6687ca2daa3769dea6c7c489e3c62336d35f3fbe5389b2f5eadde7f5befdc2fee180706038281c1c0e0987866f84c3c2e1e1887064382a1c1d8e09c786e3c2f1e184706238299c1c4e09a786d3c2e93e924842826688c0d04c519d25aa6f8aea6c519d23aa7345759ea8ce17d505a2ba50541789ea62515d22aa4b457599a8be25aa6f8bea72517d4754df15d5f7447585a8be2faa2b457595a8ae16d535a2ba5654d789ea7a51dd9010d0de7a04b4b70111e08993a984f6d622a0bd751083e254427bab11d0de1a8841c955427b2b11d0de2a8841f12aa1bd150868ef7d88412954427bef22a0bdf72006a55409ed2d47407bef400cba4f25b4f71602da7b1b62502a95d0de5204b4b70c62506a95d0de6204b4b70462501a95d0de4204b4b70862505a95d0de7c04b4b70062503a95d0de5c04b4370f62507a8dd05e381b40ed8573200665d088ed85b300dc5ef826c4a08c2a3bd6893340aa6484589449a745e92055d2432ccaacd3a234902a69211665d169512a4895d4108beed769514a4895fb201665d569513ca44a0a88450fe8b4280e522539c4a26c1ac1bd7026c4a16410871ed4b989b241aa3c08b128bb4e8bb242aa3c00b1e8219d16658154b91f62510e9d16658254c90cb1e8619d16e58054791862514e9d16658754790862d1231a2dea0e38b57006c4e55c3ab7504e489547205b28977274af3b04dd0b678433c359e19be1ec704e38379c17ce0f17840bc345e1e27049b8345c16be15be1d2e0fdf09df0ddf0b5784ef872bc355e1ea704db8365c17ae0f37dc05e0db28c2439b4475b3a87e20aa5b44f54351dd2aaa1f89ea3651fd5854b78bea27a2ba4354778aea2e51fd5454778bea1e510d45d58bea5e51dd27aafb45f533513d20aa0745f590a81e16d523a27a54548f89eaf18400f88e21003ec85788133fab12e03b8200f8205f204e5c5125c0770801f041be3e9cf8399500df0104c007f9f270e24a2a01befd08800ff2d5e1c4cfab04f8f622003ec8578713575609f0850880cf430c7a4125c0b71b01f0ed8118544525c0b70b01f07d0a31a8aa4a806f0702e0db0931a89a4a806f3b02e0fb0462d08b2a01be6d0880ef638841d555027c5b1100df4710836aa804f8b62000be0f2106d55409f06d46007c1f400caaa5b36f5d1352a516c4a2da3a2daa0ea9520362511d9d16558354791162515d9d16558154a90ab1a89e4e8b2a43aabc00b1a8be4e8b2a41aa3c0fb1a8814e8b2a42aa3c07b1a8a14a806f13c4a167210ebda4731335845479096251239d16d587546900b1e8659d16d58554a907b1a8b14e8b6a43aad48158d444a7458d21559a402c6aaad3a246902a2f432c6aa6d1a21e08806f23c4e5e63ab75053489566902dd45c39c0d70303f06d0c37859bc30fc22de187e1d6f0a3705bf871b83dfc24dc11ee0c77859f86bbc33d6118fa706fb82fdc1f7e161e080f8687c2c3e191f068782c3c7e1780ef84080f9d14d553a2fab9a89e16d52f44f58ca87e29aa6745f52b513d27aa5f8bea37a2faada89e17d5ef44f57b51fd41542f88ea8fa2fa93a8fe2caabf88eaafa27a51542f89ea6551bd22aa5745f59aa85e17d51b0901f05d47007c3720313e4825c0771501f05d8318345825c0771901f05d8118344425c0771101f05d8218345425c0f70b02e0fb1562d01b2a01be9f1000dfcf108386a904f82e2000be1f21060d5709f07d8f00f8204f4a4f3c4225c0771e01f041ded79078a44a80ef1b04c007795b43e2512a01be7308800ff2f6a1c4a355027c6711001fe4dd4389c7a804f8ce20003ec89b87128f5509f09d46007c90f70e251ea712e03b8500f820ef854d3c5e67df7a1ca4ca78884513745a340652652cc4a2893a2d1a05a9321a62d1249d168d80541909b168b24e8b8641aa0c87583445a745432155de80583455a74583215586402c9aa612e03b09716810c4a1e93a37d1344895e9108b66e8b4680aa4ca54884533755a3409526532c4a2593a2d9a00a9321162d19b3a2d9a05a982798efc6c9d16619e0d371362d11c8d16211e4b1d9e80b83c57e7169a0da982799dc55ce500df7d1880ef4478323c157e1e9e0ebf08cf845f8667c3afc273e1d7e137e1b7e1f9f0bbf0fbf087f042f863f853f873f84bf86b7831bc145e0eaf8457c36be1f5f0c65d00bedf4478e8a6a8de12d5df45f5b6a8fe21a97446b21c916523cb56969d2c07b21c23cb896539569693c87252594e26cb71b29c5c96e36539852ca794e5fb6439952ca796e534b29c5696d3c9727a59ce20cb191300eda37f2980eda3638344fc871ae13efa5401741f7df8108bb66ac4fbe8d706c0f7d16f17c4a28f34027e944b00c28fe20b62d1368d881f053f80f1a3eb03c4a28f35427e746505507e74018658b45d23e647b72e00ce8fee7020167da211f4a37b4300e947b790108b766844fde8e61bc0fad13d3ac4a29d1a613ffaeb0640fbd11f41108b7669c4fde8cf4700ef477f65422cfa5423f0477f9f03883ffa331e62d16e8dc81f354000cc1ff5492016ed5109fddd46407f7f400c0a55427fb710d0dfef1083bcce5e7708a98279c0f35e9d16ed8654c13ce2799f4e8b7641aa601ef2bc5fa7453b2055308f79fe4ca745db2155300f7a3ea0d3a26d902a98473d1fd469d1564815ccc39e0fa984fe6e421cc23cedf9b0ce4d74085205f3ee9d233a2d3a00a98279fbce519d16ed8754c1bc7fe7984e8bf642aa60dec0735ca745c72055306f923ba1d3a223902a9877c99dd468512a04f4f71bc4e5533ab71086683c09d942a794437fa930d0df6fe1cdf056f87b783bfc83babdd4aaa5b638f5b4697e40cd7f1ab4d094842652344ea2d11dcddd68c649034a1a06d32497a6e634f2f691543e92da47d2f8485a1f49e723e97d24838f649471401fc92423479965398b2cdf2fcb5965f90159ce26cb0fca7276597e489673c8f2c3b29c53961f91e55cb2fca82ce796e5c764398f2c3f2ecb7965f90959ce27cbf965b9802c1794e542b25c58968bc87251592e26cbc513040a2c0681028b432e013775428145205060518845b774428185205060618845bfeb84020b40a0c082108b6eeb8402f341a0c0fc108bfed00905e68540814f202c8a4da4130acc0381021f875814d10905e68640818f412c323aa1c05c1028f0518845562714981302053e02b1c8e984027340a0c0872116053aa1c0ec1028f0218845313aa1c06c1028f041884589354281d461025081d488825814ab110ba4161e800ba44e1fc4a2242afbe1b1b1902a906f02c426d569510ca40ae49b00b1c9745ae4205520df04888dd369918154817c132036b94e8b1241aa40be09101baf737c791b5205f25d80d8143a2dba05a902f936406c4a8d60204d3e2116dd8458749fce2c4a09a902f9b6766c2a9d16c543aa40bead1d9b5aa74571902a906f6bc7a6d16951524815c8b7b563d3eab4280da40ae4f923b1e9745a940a5205f2fc91d8f41a2d829c5a2413c4e60c3af7503a4815c89390201625241a981a8206d286a29b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbf7da4808f14f491423e52d8478af848511f29e623c5ef06089690f1a392b2fca42c3f25cb4fcb7229592e2dcb6564b9ac2c9793e5f2b2fc8c2c5790e56765b9a22c3f27cb9564f97959ae2ccb2fc8721559ae2acbd564f94559ae2ecb3564b9a62cd792e5dab25c4796ebca72bd040104eb4200c17a900b41519d80606d082058076251319d80604d0820580b6251719d806075082058036251099d8060350820f822c4a2923a01c12a1040b02ac4a227750282952180e00b108b9ed2090856820082cf432c7a5a2720581102083e07b1a8944e40b00204107c166251699d8060790820f80cc4a2323a01c1b21040b01cc4a2b23a01c1d21040b00cc4a2723a01c1a7218060298845e57502824f4200c1a720163da3b32b5e1e520513d715745a5416520513d7cfeab4a834a40a26ae2beab4e86948154c5c3fa7d3a227215530715d49a7452520554a422c7a5ea745c5205520dfff8fadac13102c09b108f2fdffd81774eea2ca902a98965a159d16558254c1b4d4aaeab4a822a40aa6a5564da745152055302db517755a540d52053324aaaed3a22a902a9821510d8d16a581008298dbcf9a3af750754815ccb8baa67240300d08102c4137a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7ffb48751fa9e123357da4968fd4f6913a3e52d747eadd0d10ac2fe3470d64b9a12cbf24cb8d64f965596e2ccb4d64b9a92c3793e5e6b2dc42965bca722b596e2dcb6d64b9ad2cbf22cbed64f955596e2fcb1d64b9a32cbf26cb9d64b9b32c7791e5aeb2dc4d96bbcb720f59ee992080600f0820d8137221e8ac1310ec060104bb432ceaa21310ec020104bb422ceaaa1310ec0401043b432ceaa61310ec0801045f8358d45d2720d81e0208768058d4432720d80e0208be0ab1a8a74e40b02d04107c0562512f9d80606b0820d80662516f9d80604b0820d80a62511f9d8060730820d80262d1eb3a01c1a61040b019c4a2be3a01c1c61040b009c4a27e3a01c1461040f0658845fd7502820d2180e04b108b06e8ec8af787541900b168a04e8bfa42aaf483583448a7457d20555e87583458a745bd20557a432c1aa2d3a21e902a98c6ec509d16758354c13466dfd069511748154c6376984e40b001c4224c6376b8ce5d340c526538c4a2113a2d1a0aa9f206c4a2913a2d1a0ca9320462d1289d160d84541904b168b44e8b4641aa8c86583446a74523205546422c1aabd122c8f32323f521368fd3b987c640aa8c85eca171ca01c1b42040b03edd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced239d7ca4b38f74f191ae3ed2cd47bafb480f1fe9793740b0978c1ff596e53eb2fcba2cf795e57eb2dc5f9607c8f240591e24cb836579882c0f95e5376479982c0f97e511b23c529647c9f268591e23cb6365799c2c8f97e509b23c519627c9f264599e22cb5365799a2c4f4f1040701a04109c0eb910bca713109c020104a7422c5aa113109c04010427432c7a5f2720380102084e8458b4522720380e02088e8758b44a27203806020862eedb57eb0404474100414c07618d4e4070040410c47410d6ea0404874100414c4f7c9d4e4070280410c4f4c4d7eb0404074300414c4f7c834e4070200410c4f4c437ea0404fb4300410cb7b4492720d817020862b8a5cd3a01c13e104010c32d7da0b32bbe1952e50388455b745ab411526513c4a20f755ab41e526503c4a2ad3a2d5a0ba9b20e62d1473a2d5a0da9b20662d1369d16ad84545905b1e8639d16ad8054791f62d1769d80606f8845ef412cfa44e72eda0ea9f209c4a21d3a2dda06a9f231c4a29d3a2dda0aa9f211c4a25d3a2dda02a9f221c4a24f755ab40b52e5538845bb755ab403526527c4a23d1a2d4a07010431df720a75eea1dd902a7b207b28540e08a6030182bde86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f1f61ccc94726f9c8641f99e223537d649a8f4cbf1b203843c68f66caf22c597e539667cbf21c599e2bcbf36479be2c2f90e585b2bc489617cbf212595e2acbcb64f92d597e5b9697cbf23bb2fcae2cbf27cb2b64f97d595e29cbab6479b52caf91e5b5b2bc4e96d7cbf286040104d74300414c37f3079d80e05a082088e9665ed00908ae860082986ee68f3a01c195104010d3cdfc492720b802020862ba993feb0404df850082986ee62f3a01c1e51040f01d8845bfea0404df8200826f432cbaa813105c0a010497412cbaa413105c0c010497402cbaac13105c08010417412cbaa213109c0f010417402cbaaa13109c0b0104e7412cbaa613109c0d0104e7402cbaae13109c050104df845874436757fc3aa4ca0d8845bfe9b4e82aa4ca35884537755a741952e50ac4a25b3a2dba08a9720962d1ef3a2dfa0552e5578845b7755af413a4cacf108bfed069d10548951f11162549a413109c09b1e80788451195bb284922489508c422a3f317ed36a4ca1f108bac4e8b6e41aafc0eb1c8e9b4e83748959b108b029d59e42055028845313a2d32902a166251628d16a5870082332036c7eadc4331902a89217b28563920981e0408cea09b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbf7d64a58facf291d53eb2c647d6fac83a1f59ef231bee06086e94f1a34db2bc59963f90e52db2fca12c6f95e58f64799b2c7f2ccbdb65f91359de21cb3b6579972c7f2acbbb65798f2c87b2ec6579af2cef93e5fdb2fc992c1f90e583b27c48960fcbf211593e2acbc764f978820082c72080e071c885e0119d80e0110820781462512e9d80e0210820781862d1a33a01c1031040f020c4a2dc3a01c1fd1040f03388458fe90404f74200c17d108bf2e80404430820e821163dae1310dc0d0104215f0f4b92572720b80b020842bea89ae4099d80e00e082008f9a26a927c3a01c1ed104010f2e88524f9750282db208020e4d10b490ae80404b7420041c8a3179214d409086e81008290472f2429a41310dc0c0104218fc74b52586757bc10a44a61884545745a540052a520c4a2a23a2dca07a9921f6251319d16e5855479026251719d16e58154791c6251099d16e58654790c6251499d16e58254791462d1933a01c14d108b1e8158f494ce5df424a4ca53108b9ed6695109489592108b4ae9b4a818a44a718845a5755a540452a528c4a2323a2d2a0da952066251599d163d0da9520a6251398d16658000829087e92729af730f9585542907d943e5950382194080e046ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8db470ef8c8411f39e423877de4888f1cf591633e72fc6e80e009193f3a29cba764f973593e2dcb5fc8f21959fe5296cfcaf257b27c4e96bf96e56f64f95b593e2fcbdfc9f2f7b2fc832c5f90e51f65f92759fe59967f91e55f65f9a22c5f92e5cbb27c4596afcaf23559be2ecb37120410bc0e0104215f9a4fd24c27207815020842be349fa4b94e40f0320410847c693e490b9d80e045082008f9d27c92963a01c15f208020e44bf3495ae904047f820082902fcd2769ad1310bc000104315f9a6fa31310fc1e020862be34df562720781e02087e07b1e8159d80e0371040f05b8845ed740282e72080e0d7108b5ed509089e8500825f412c6aaf13103c030104bf8458d4412720781a02087e01b1a8a34e40f0140410fc1c62d16b3abbe21d21555e8358d449a745ed21553a402ceaacd3a276902aaf422ceaa2d3a2b6902aaf402ceaaad3a2d6902a6d201675d369514b489556108bbaebb4a839a44a0b88453d740282272116358358d453e72eea01a9d21362512f9d16758354e90eb1a8b74e8bba40aa748558d447a7459d20553a432c7a5da7457d20555e8758d457a7459077df26e90db1a89f468b324200c113109bfbebdc437d2155fa41f6507fe5806046102078826e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef6918b3e72c9472efbc8151fb9ea23d77ce4ba8fdcb81b20f89b8c1fdd94e55bb2fcbb2cdf96e53f44d92492e5882c1b59b6b2ec643990e518594e2ccbb1b29c449693ca7232598e93e5e4b21c2fcb296439a52cdf27cba96439b52ca791e5b4b29c4e96d3cb720659ce981080a0c98000040de48a9b648e4a40d0a443008206f258e32473550282260d021034692116cd5309089a540840d0a48658345f25206852220041731fc4a2052a0141138f00044d0a88450b550282260e01089ae4108b16a904044d5204206892412c5aac121034b10840d0248158b444252068621080a0c1bc8560a94a40d03804206830ef4359a61210340601081accfb50de5209089a440840d060def0f5b64e40f0360410c4bce16bb94e40f0160410c4bce1eb1d9d5df1e5902aef402c7a57a7456f41aabc0db1e83d9d162d85545906b168854e8b1643aa2c8158f4be4e8b1642aa2c8258b452a745f3215516402c5aa5d3a2b9902af32016add60908de8458340762d11a9dbb6835a4ca1a88456b755ab412526515c4a2753a2d5a01a9f23ec4a2f53a2d7a1752e53d88451b745ab41e526503c4a28d3a2d5a0ba9b20e62d1268d166582008290f78127d9ac730f611e8fb809b287362b0704338100c1dfe86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f6f527993da9b34dea4f5269d37e9bdc9e04dc6bb008226938c1f6596e52cb27cbf2c6795e50764399b2c3f28cbd965f92159ce21cb0fcb724e597e449673c9f2a3b29c5b961f93e53cb2fcb82ce795e52764399f2ce797e502b25c50960bc97261592e22cb4565b9982c174f1040b0180410c43cf7fba44e40b0080410c43cf7fb944e40b0100410c4bc9be9739d8060010820887937d3699d80603e0820887937d3173a01c1bc104010f36ea6333a01c13c104010f36ea62f750282b9218020e6dd4c67750282b9208020e6dd4c5fe9040473420041ccbb99cee90404734000c18721167dad1310cc0e01041f8258f48d4e40301b04107c1062d1b72a0141931501089a0720169d5709089a2c0840d0dc0fb1e83b9d5df1f3902a98c7067fafd3a26f2055308f0dfe41a745e72055308f0dbea0d3a2b3902a98c706ffa8d3a233902a98c706ffa4d3a2d3902a98c706ffacd3a253902a98c706ffa21210349921169d8458f4abce5df40ba40ae6d52e17755af413a40ae6d52e97745a74015205f36a97cb3a2dfa1e5205f36a972b3a2dba0ca9827959d9559d165d8454c1bcacec9a468b32234ecd6482d87c5de71eba0aa982796de275e58060660c206832d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde14f0a6a03785bc29ec4d116f8a7a53cc9be27703044bc8f85149597e52969f92e5a765b9942c9796e532b25c5696cbc97279597e46962bc8f2b3b25c51969f93e54ab2fcbc2c5796e51764b98a2c5795e56ab2fca22c5797e51ab25c53966bc9726d59ae23cb7565b95e820082752180603dc48520697a9d80606d082058076251069d80604d0820580b6251469d806075082058036251269d8060350820f822c4a2cc3a01c12a1040b02ac4a22c3a01c1ca1040f0058845f7eb04042b4100c1e7211665d5090856840082cf412c7a402720580102083e0bb1289b4e40b03c04107c0662d1833a01c1b21040b01cc4a2ec3a01c1d21040b00cc4a2877402824f4300c152108b72e804049f8400824f412c7a5865573c690e481508cf9d34a74e8bb243aa4078eea48fe8b4281ba40a84e74e9a4ba745592155203c77d247755a94055205c27327cdadd322c8843629645a9cf4319d1665805481bc2028691e9d8060498845901704257d5ce72eca03a902f9ce6dd2bc3a2dca0da902f9ce6dd227745a940b5205f29ddba4f9745a94135205f29ddba4f9755a940f5205f21489a405745a94175205f21489a405355a940502089680d85c48e71e2a00a902799e0dc4a2840404b38000c11274334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b737d5bda9e14d4d6f6a7953db9b3aded4f5a6dedd00c1fa327ed440961bcaf24bb2dc48965f96e5c6b2dc44969bca7233596e2ecb2d64b9a52cb792e5d6b2dc4696dbcaf22bb2dc4e965f95e5f6b2dc41963bcaf26bb2dc49963bcb721759ee2acbdd64b9bb2cf790e59e090208f68000823d2117821a3a01c16e1040b03bc4a29a3a01c12e1040b02bc4a25a3a01c14e1040b033c4a2da3a01c18e1040f035884575740282ed21806007884575750282ed2080e0ab108beae90404db4200c1572016d5d70908b68600826d201635d00908b6840082ad201635d40908368700822d2016bda413106c0a01049b412c6aa413106c0c01049b402c7a592720d8080208be0cb1a8b14e40b02104107c096251139d5df1c6902a985fb4a63a2d6a04a982f9456ba6d3a286902a985fb4e63a2daa0fa9d20062510b9d16d58554c17c73bba54e8b6a43aa60beb9dd4aa74535215530dfdc6ead13106c00b108f3cded363a77516b48154c33a4ad4e8b5a42aa609a21afe8b4a839a40aa619d24ea7454d215530cd9057755ad40e5205d3de6fafd3a2b6902a98f67e078d1641be3663307fc474d4b987da43aa60068d1d950382f78300c1fa74334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b7379dbce9ec4d176fba7ad3cd9beedef4f0a6e7dd00c15e327ed45b96fbc8f2ebb2dc5796fbc9727f591e20cb036579902c0f96e521b23c5496df90e561b23c5c9647c8f248591e25cba365798c2c8f95e571b23c5e9627c8f244599e24cb9365798a2c4f95e569b23c3d4100c1691040703ae44230562720380502084e8558344e2720380902084e8658345e2720380102084e845834412720380e02088e875834512720380602088e855834492720380a02088e865834592720380202088e845834452720380c02080e87583455272038140208be01b1689a4e40703004101c02b168ba4e40702004101c04b168864e40b03f04101c00b168a64e40b02f0410ec07b168964e40b00f04107c1d62d19b3abbe2b32055de8458345ba74533205566422c9aa3d3a269902a9896da5c9d164d8154c1b4d4e6e9b46812a40aa6a5365fa745132055302db5053a2d1a07a98269a92dd40908f686588469a92dd2b98b1642aa2c8258b458a745f3215516402c5aa2d3a2b9902af320162dd569d16c489539108b96e9b46829a4ca3288456fe9b46831a4ca1288456f6bb4282b0410ec05b179b9ce3df416a4cadb903db45c392098150408f6a29b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbd61ccc99b49de4cf6668a3753bd99e6cdf4bb01823364fc68a62ccf92e5376579b62ccf91e5b9b23c4f96e7cbf202595e28cb8b6479b12c2f91e5a5b2bc4c96df92e5b76579b92cbf23cbefcaf27bb2bc4296df97e595b2bc4a9657cbf21a595e2bcbeb6479bd2c6f481040703d0410dc00b910ecd10908ae850082eb2016853a01c1d51040700dc422af13105c09010457412cdaab13105c010104df8758b44f2720f82e04107c0f62d17e9d80e0720820f80ec4a2cf7402826f410041cc5f7f077402824b218020a60f75502720b818020862fa50877402820b21802066b272582720381f020862262b477402827321802066b272542720381b020862262bc7740282b3208020867e3baeb32b7e0c52e538c4a2133a2d3a02a9721462d1499d161d8254390cb1e8944e8b0e40aa1c8458f4b94e8bf643aa7c06b1e8b44e8bf642aaec8358f4854e8b4248150fb1e88c4e407026c4a23d108bbed4b98bce40aa7c09b1e8ac4e8b4e43aa7c01b1e82b9d169d8254f91c62d1399d169d80543909b1e86b9d169d8354f91a62d1373a2d3a0ba9f215c4a26f355af4000410c47c57eebcce3df40da4cab7903d745e3920f80008109c4137a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7bb3d29b55deacf6668d376bbd59e7cd7a6f36dc0d10dc28e3479b6479b32c7f20cb5b64f94359de2acb1fc9f23659fe5896b7cbf227b2bc439677caf22e59fe549677cbf21e590e65d9cbf25e59de27cbfb65f933593e20cb0765f9902c1f96e523b27c54968fc9f2f10401048f410041484f3c59629d80e011082008e989278bd509081e820082909e78b2243a01c103104010d2134f96542720b81f0208427ae2c992e90404f7420041484f3c599c4e4030840082909e78b2e43a01c1dd104010d2134f16af1310dc0501043f855894422720b8030208ee845894522720b81d02087e02b1e83e9d80e0360820f831c4a2543a01c1ad1040f0238845a97502825b2080e087108bd2e80404374300c10f2016a555d9154f960652252dc4a2743a2d4a05a9921a62517a9d16a58454b90f6251069d16c543aaa480589451a74571902ac9211665d2695152489564108b32ebb42816522509c4a22c3a01c14d108b12432cba5fe72eca02a90279b163b2ac3a2dca04a9921962d1033a2dca00a992116251369d16a58354490fb1e8419d1665835479106251769d16658554815074c91ed26851360820b81162730e9d7b283ba4ca43903d94433920980d04086ea49b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbd39e0cd416f0e7973d89b23de1cf5e69837c7ef06089e90f1a393b27c4a963f97e5d3b2fc852c9f91e52f65f9ac2c7f25cbe764f96b59fe4696bf95e5f3b2fc9d2c7f2fcb3fc8f20559fe51967f92e59f65f91759fe55962fcaf22559be2ccb5764f9aa2c5f93e5ebb27c234100c1eb1040f006e442504e2720781502085e8358545e2720781902085e8158f48c4e40f0220410bc04b1a8824e40f0170820f82bc4a2677502823f4100c19f211655d409085e8000823f422c7a4e2720f83d0410fc016251259d80e0790820f81dc4a2e7750282df400041c8970c9355d609089e83008290af3b277b4127207816020842beee9cac8a4e40f00c0410843cc02359559d80e069082008798047b26a3a01c153104010f2008f642feaec8a57835479116251759d16558154a90ab1a8864e8b2a43aabc00b1a8a64e8b2a41aa3c0fb1a8964e8b2a42aa3c07b1a8b64e8b2a40aa3c0bb1a88e4e8bca43aa3c03b1a8ae4e40f024c4a272108beae9dc45752155ea412caaafd3a2da902a75201635d069514d48955a108b1aeab4a83aa44a0d88452fe9b4a821a4ca4b108b1ae9b4a83ea44a0388452f6bb40882871ac8e33e9335d6b9871a41aabc0cd9438d9503820f8200c11374334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b73717bdb9e4cd656fae7873d59b6bde5cf7e6c6dd00c1df64fce8a62cdf92e5df65f9b62cff21ca36912c4764d9c8b2956527cb812cc7c87262598e95e524b29c549693c9729c2c2797e578594e21cb2965f93e594e25cba965398d2ca795e574b29c5e9633c872c68400046d06042068315febe9a71210b4e91080a0c57cada7bf4a40d0a641008216f3e885012a01419b0a01085acca31706aa04046d4a042068318f5e18a41210b4f10840d0621ebd3058252068e31080a0c53c7a61884a40d02645008216f3e885a12a01411b8b00042de6d10b6fa804046d0c0210b498472f0c5309085a8700046d00b168b84a40d01a0420682dc4a2112a01419b080108da08c4a2913a01c1db1040f00f8845a3740282b72080e0ef108b46ebec8a8f8254190db1688c4e8b4640aa8c84583456a745c3205586432c1aa7d3a2a1902a6f402c1aafd3a2c1902a4320164dd069d140489541108b26eab4a83fa4ca00884593740282372116f583583459e72e9a04a9321962d1149d164d80549908b168aa4e8bc641aa8c8758344da745632055c6422c9aaed3a269902ad32116cdd069d1144895a9108b666ab4283b0410fc0d62f32c9d7b08f2fee46433217b68967240303b0810fc8d6e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef63695b7a9bd4de36d5a6fd3799bdedb0cde66bc0b206833c9f8516659ce22cbf7cb7256597e4096b3c9f283b29c5d961f92e51cb2fcb02ce794e5476439972c3f2acbb965f93159ce23cb8fcb725e597e4296f3c9727e592e20cb0565b9902c1796e522b25c54968bc972f10401048b4100c1e2900bc1269d8060110820581462d1669d8060210820581862d1073a01c1021040b020c4a22d3a01c17c1040303fc4a20f750282792180e013108bb6ea0404f34000c1c721167da41310cc0d01041f8358b44d2720980b02083e0ab1e8639d80604e0820f808c4a2ed3a01c11c1040f06188459fe80404b3430041ccbb2c76e80404b3410041cc5b7576aa04046d56042068316fd5d9a51210b4591080a0c5bc27ee539d5df15d902a9f422cdaadd3a21d902a3b2116edd169d17648954f2016853a2dda06a9f231c422afd3a2ad902a1f412cdaabd3a22d902a1f422cdaa7d3a2cd902a1f402cdaaf1210b49921166d8258f499ce5db41f52e533884507745ab41752651fc4a2833a2d0a21553cc4a2433a2dda0da9b20762d1619d161d8254390cb1e8884e8b0e40aa1c84587454a345906ea1c5bc55fe98ce3d740452e528640f1d530e083e8401046d26ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbdb02de16f4b690b785bd2de26d516f8b795bfc6e806009193f2a29cb4fcaf253b2fcb42c9792e5d2b25c4696cbca7239592e2fcbcfc87205597e56962bcaf273b25c49969f97e5cab2fc822c5791e5aab25c4d965f94e5eab25c43966bca722d59ae2dcb7564b9ae2cd74b1040b02e0410c43c3dfe9a4e40b0360410c43c3dfeba4e40b0260410c43c3dfe864e40b03a0410c43c3dfe379d80603508208879c3d74d9d80601508208879c3d72d9d80606508208879c3d7ef3a01c14a104010f386afdb3a01c18a104010f386af3f74028215208020e40d5f7189740282e5218020e40d5f71119d80605908200879c3579cd1090896860082652016599d80e0d31040b014c422a713107c1202083e05b12850d9158f73902a9007bec6c5e8b4c840aa401ef81a9758a745892055200f7c8d8bd5397eba0da90279e06b5c129d16dd8254813cf0352ea94e8b308f70b909b128994e8bae43aadc805814a713102c09b1e81ac4a2e43aaf6871902a909772c4c5ebb42829a40ae4a51c7129745a140ba9027929475c4a9d16c540aa405eca11779f4e8b5242aa405e3315974aa745f1902a90d74cc5a5d668510e0820580262731a9d7b2815a40ae48577108b121210cc0102044bd0cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde56f7b686b735bdade56d6d6feb785bd7db7a770304ebcbf85103596e28cb2fc97223597e59961bcb7213596e2acbcd64b9b92cb790e596b2dc4a965bcb721b596e2bcbafc8723b597e5596dbcb720759ee28cbafc9722759ee2ccb5d64b9ab2c7793e5eeb2dc43967b260820d8030208f6845c080aea0404bb4100c1ee108b0ae90404bb4000c1ae108b0aeb04043b4100c1ce108b8ae804043b4200c1d7201615d50908b68700821d201615d30908b6830082af422c2aae13106c0b01045f815854422720d81a0208b6815854522720d8120208b68258f4a44e40b03904106c01b1e8299d8060530820d80c62d1d33a01c1c61040b009c4a2523a01c1461040f0658845a57502820d2180e04b108bcae8ec8a978654c190b865755af434a40a86c42da7d3a227215530246e799d1661666b2521163da3d3a262902a9057bbc455d06951114815c8ab5de29ed56951214815c8ab5de22aea04041b402c82bcda25ee399dbba822a40ae4db927195745a54015205f36dc9e7755a541e5205f36dc9ca3a2d2a0ba982f9b6e40b3a2daa0ca902f9fe7f5c159d16558254817cff3faeaa468b20af64b1f5213657d3b987aa40aa409e4402b1282101c1874180607dba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbdb4ede76f6b68bb75dbdede66d776f7b78dbf36e80602f193fea2dcb7d64f97559ee2bcbfd64b9bf2c0f90e581b23c489607cbf210591e2acb6fc8f230591e2ecb236479a42c8f92e5d1b23c4696c7caf238591e2fcb136479a22c4f92e5c9b23c4596a7caf234599e9e2080e0340820381d7221e8a013109c020104a7422ceaa813109c04010427432c7a4d2720380102084e8458d4492720380e02088e8758d4592720380602088e8558d4452720380a02088e8658d4552720380202088e8458d44d2720380c02080e8758d45d272038140208be01b1a8874e40703004101c02b1a8a74e40702004101c04b1a8974e40b03f04101c00b1a8b74e40b02f0410ec07b1a88f4e40b00f04107c1d62d1eb3abbe27d20553016f5d569512f4895de108bfae9b4a807a40ae63bb7fd755ad40d5205f39ddb013a2dea02a982f9ceed409d16758254c17ce776904e8b3a42aa60be733b582720d81b6211e63bb74374eea2c1902a983f6387eab46820a40ae6cfd837745ad41f5205f367ec309d16f58554c1fc193b5ca745c32055308dd9113a2d1a0aa98269cc8ed468514e082088f9537894ce3d3402520533221aa51c10cc0902047bd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde32e6e4ed246f277b3bc5dba9de4ef376fadd00c119327e34539667c9f29bb23c5b96e7c8f25c599e27cbf36579812c2f94e545b2bc589697c8f252595e26cb6fc9f2dbb2bc5c96df91e57765f93d595e21cbefcbf24a595e25cbab65798d2caf95e575b2bc5e9637240820b81e02086e805c08ded60908ae850082eb20162dd70908ae8600826b2016bda313105c09010457412c7a572720b8020208be0fb1e83d9d80e0bb1040f03d88452b740282cb2180e03b108bded70908be050104df8658b4522720b81402082e8358b44a2720b81802082e8158b45a2720b81002082e8258b4462720381f02082e8058b456272038170208ce8358b44e2720381b0208ce8158b45e2720380b0208be09b16883ceaef87a48154c3364a34e8bd642aa609a219b745ab41a5205d30cd9acd3a295902a9866c8073a2d5a01a98269866cd169d1bb902a9866c8873a2d5a0ea98269866cd50908ce84588469867ca473176d8554f90862d1369d166d8154f91062d1c73a2dda0ca9f201c4a2ed3a2dda08a9b20962d1273a2dda0ea9f209c4a21d3a2dda06a9f231c4a29d1a2d7a040208ce80d8bc4be71eda01a9b213b287762907041f01018233e86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f6f577abbcadbd5deaef176adb7ebbc5defed86bb01821b65fc68932c6f96e50f64798b2c7f28cb5b65f92359de26cb1fcbf27659fe449677c8f24e59de25cb9fcaf26e59de23cba12c7b59de2bcbfb6479bf2c7f26cb0764f9a02c1f92e5c3b27c44968fcaf231593e9e2080e0310820781c7221f8562720780402081e8558745e2720780802081e8658f49d4e40f00004103c08b1e87b9d80e07e0820f819c4a21f7402827b2180e03e884517740282210410f4108b7ed40908ee8600827b2016fda41310dc0501043f8558f4b34e4070070410c4f4107ed109086e870082986ee6af3a01c16d104010d3cdbca81310dc0a010431f3b94b3a01c12d104010339fbbac1310dc0c010431f3b92b3abbe2972155ae402cbaaad3a28b902a9720165dd369d12f902abf422cbaaed3a29f20557e86587443a7451720557e8458f49b4e8bbe8754f90162d14d9d169d8754f90e62d12d9d80e0268845df422cfa5de72eba05a9f23bc4a2db3a2dfa0d52e526c4a23f745a741d52e506c2a2e489745a741552e51ac4a2884a8b9227825489402c323a77d16d48953f2016598d16e5820082109a37b9d3f96b6620552c640f39e580602e1020b8916e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef6f680b707bd3de4ed616f8f787bd4db63de1ebf1b207842c68f4ecaf22959fe5c964fcbf217b27c4696bf94e5b3b2fc952c9f93e5af65f91b59fe5696cfcbf277b2fcbd2cff20cb1764f94759fe49967f96e55f64f95759be28cb9764f9b22c5f91e5abb27c4d96afcbf28d040104af430041cc5dfb433a01c1ab10401073d79e4327207819020842262bc91fd609085e84008290c94af29c3a01c15f20802064b292fc119d80e04f1040103259499e4b27207801020842262bc91fd509087e0f0104219395e4b9750282e721802064b292fc319d80e0371040103259499e472720780e02087e0db1e8719d80e0590820f815c4a2bc3a01c1331040f04b88454fe804044f4300c12f2016e5d309089e8200829f432ccaafb32b9e0f52253fc4a2023a2dca0ba9f204c4a2823a2dca03a9f238c4a2423a2dca0da9f218c4a2c23a2dca05a9f228c4a2223a2dca09a902799c4cf2a23a2dca01a9f230c4a2623a01c193108b1e8258545ce72e2a06a9521c6251099d16158154290ab1a8a44e8b0a41aa148658f4a44e8b0a40aa148458f4944e8b9e8454790a62d1d33a2d2a01a952126251298d1641ee8aed0988cda575eea1a721554a41f65069e580e0a32040f004dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fceded456f2f797bd9db2bde5ef5f69ab7d7bdbd713740f037193fba29cbb764f97759be2dcb7f88b24b24cb115936b26c65d9c97220cb31b29c5896636539892c2795e564b21c27cbc965395e9653c8724a59be4f9653c9726a594e23cb6965399d2ca797e50cb29c3121004197010108ba8c900bc1cb2a0141970e0108baf4108b1aab04045d1a0420e8d2422c6aa2121074a91080a04b0db1a8a94a40d0a5440082ee3e8845cd5402822e1e0108ba14108b9aab04045d1c021074c92116b5500908baa40840d0258358d4522520e8621180a04b02b1a8954a40d0c5200041971862516b9580a0730840d005108bdaa804049d4100820ef355d5b62a0141970801083acc97e65fd10908de860082982fcdb7d30908de82008290c7c0247f556757bc1da4caab108bdaebb4a82da4ca2b108b3ae8b4a835a44a1b88451d755ad41252a515c4a2d7745ad41c52a505c4a24e3a2d6a0aa9d20c6251679d163586546902b1a88b4e40f026c4a297211675d5b98bba40aa748558d44da7459d20553a432ceaaed3a28e902aaf412ceaa1d3a2f6902a1d2016f5d469510f48959e108b7ae9b4a81ba44a778845bd355a941b0208421e1a9bbc8fce3dd40b52a537640ff5510e08e6060182bfd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfdea5f22eb57769bc4beb5d3aefd27b97c1bb8c7701045d26193fca2ccb5964f97e59ce2acb0fc87236597e5096b3cbf243b29c43961f96e59cb2fc882ce792e5476539b72c3f26cb7964f97159ce2bcb4fc8723e59ce2fcb0564b9a02c1792e5c2b25c44968bca7231592e9e20806031082088f972d84c9d806011082088f972d82c9d806021082088f972d89b3a01c102104010f3e5b0d93a01c17c104010f3008f393a01c1bc104010f3008fb93a01c13c104010f3008f793a01c1dc104010f3008ff93a01c15c104010f3008f053a01c19c104010f3008f853a01c11c104010f3008f453a01c1ec104010f3008fc53a01c16c1040f04188454b5402822e2b0210740f402c5aaa121074591080a0bb1f62d1329d5df1a5902acb2016bda5d3a2c5902a4b2016bdadd3a285902a8b20162dd769d17c489505108bded169d15c489579108bded569d16c489539108bded369d12c4895372116ad500908bacc108b66422c7a5fe72e5a01a9f23ec4a2953a2d7a1752e53d8845ab745ab41c52e51d8845ab755af416a4cadb108bd6e8b46835a4ca1a88456b755ab412526515c4a2751a2d824c2e5c2688cdeb75eea1b5902aeb207b68bd7240f0310c20e832d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde15f0aea07785bc2bec5d11ef8a7a57ccbbe27703044bc8f85149597e52969f92e5a765b9942c9796e532b25c5696cbc97279597e46962bc8f2b3b25c51969f93e54ab2fcbc2c5796e51764b98a2c5795e56ab2fca22c5797e51ab25c53966bc9726d59ae23cb7565b95e820082752180603dc885e0a84e40b0360410ac03b1e8984e40b0260410ac05b1e8b84e40b03a0410ac01b1e8844e40b01a04107c1162d1499d8060150820581562d1299d8060650820f802c4a2cf750282952080e0f3108b4eeb04042b4200c1e720167da11310ac0001049f855874462720581e02083e03b1e84b9d8060590820580e62d1599d8060690820580662d1573a01c1a7218020e68d28e77402824f420041ccbb99bed6d9153f07a9827923fc373a2d3a0ba9827923fcb73a2d3a03a9827923fc799d169d8654c1bc11fe3b9d169d8254c1bc11fe7b9d1661def1761262d10f3a2d3a06a9721c62d1059d8060498845472116fda873175d8054f91162d14f3a2dfa1e52e50788453febb4e83ca4ca77108b7ed169d137902adf422cfa55a745bf40aafc0ab1e8a24e8b7e8254f91962d1258d16e58100829837395fd6b9872e42aa5c82eca1cbca01c13c2040b004dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced5d75ef6a7857d3bb5aded5f6ae8e7775bdab773740b0be8c1f3590e586b2fc922c3792e59765b9b12c3791e5a6b2dc4c969bcb720b596e29cbad64b9b52cb791e5b6b2fc8a2cb793e55765b9bd2c7790e58eb2fc9a2c7792e5ceb2dc4596bbca723759ee2ecb3d64b9678200823d208020e489cdf1a9750282dd208020e489cdf1697402825d208020e41d04f1697502829d208020e41d04f1e97402821d218020e41d04f1e9750282ed218020e41d04f119740282ed208020e43d71f1197502826d218020e43d71f199740282ad218020e43d71f1997502822d218020e43d71f159740282cd218020e43d71f1f7eb04049b420041c87be2e2b3ea04041b430041c87be2e21fd009083682008290f7c4c567d30908368400822f412c7a5065573c3e1ba40ae4519df1d9755a94155205f2a8cef887745a94055205f2a8cef81c3a2d823c7c233e33c4a287755a9401522523c4a29c3a2d4a07a9921e62d1233a2d4a03a9921662512e9d8060038845a921163daa7317e5825481bc4e213eb74e8b7242aa405ea710ff984e8b7240aa405ea7109f47a745d9215520af53887f5ca745792055202f088acfabd3a2dc902a90c7ecc53fa1d122c8a7efea436ccea7730fe5855481bcaa0c62514202828f8300c1fa74334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b7779dbcebec5d17efba7ad7cdbbeedef5f0aee7dd00c15e327ed45b96fbc8f2ebb2dc5796fbc9727f591e20cb036579902c0f96e521b23c5496df90e561b23c5c9647c8f248591e25cba365798c2c8f95e571b23c5e9627c8f244599e24cb9365798a2c4f95e569b23c3d4100c1691040703ae44250552720380502084e8558544d2720380902084e8658f4a24e40700204109c08b1a8ba4e40701c04101c0fb1a8864e40700c04101c0bb1a8a64e40701404101c0db1a8964e40700404101c09b1a8b64e40701804101c0eb1a88e4e40702804107c0362515d9d80e0600820380462513d9d80e0400820380862517d9d80607f082038006251039d80605f0820d80f6251439d80601f0820f83ac4a2977476c51b42aa6018ca463a2dc24c451a402c7a59a745752155202fe5886facd3a2da902a909772c437d169514d4815c84b39e29beab4a83aa40ae4a51cf1cd745a540d5205f2528ef8e63a01c1de108b202fe5886fa17317358754c17ccfada54e8b9a42aa60bee7d64aa7458d215530df736badd3a246902a98efb9b5d169516b4815cc37b7dbeab4a825a40ae69bdbaf68b4282f0410ec05b1b99dce3dd4165205f30c8976ca01c1bc2040b017dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced1d634ede4df26eb27753bc9beadd34efa6df0d109c21e347336579962cbf29cbb365798e2ccf95e579b23c5f9617c8f242595e24cb8b6579892c2f95e565b2fc962cbf2dcbcb65f91d597e5796df93e515b2fcbe2caf94e555b2bc5a96d7c8f25a595e27cbeb657943820082eb2180e006c88560a44e40702d04105c07b168944e40703504105c03b168b44e40702504105c05b1688c4e40700504107c1f62d1589d80e0bb1040f03d8845e3740282cb2180e03b108bc6eb0404df8200826f432c9aa013105c0a010497412c9aa813105c0c010497402c9aa413105c08010417412c9aac13109c0f010417402c9aa213109c0b0104e7412c9aaa13109c0d0104e7402c9aa613109c050104df8458345d67577c1aa40ae6db9233745a34055205f36dc9993a2d9a04a982f9b6e42c9d164d8054c17c5bf24d9d168d8354c17c5b72b64e8bc640aa60be2d3947a745a3205530df969cab13109c09b108f36dc9793a77d15c4815cc1f20f3755a341b5205f307c8029d16cd8254c1fc01b250a74533205566422c5aa4d3a285902a9896da629d16cd8754c1b4d49668b408f2603b87f9655daa730f2d8654c134f7972a07049f00018233e86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36fef567ab7cabbd5deadf16ead77ebbc5befdd86bb01821b65fc68932c6f96e50f64798b2c7f28cb5b65f92359de26cb1fcbf27659fe449677c8f24e59de25cb9fcaf26e59de23cba12c7b59de2bcbfb6479bf2c7f26cb0764f9a02c1f92e5c3b27c44968fcaf231593e9e2080e0310820781c7221d8a913103c0201048f422cdaa513103c0401040f432cfa542720780002081e8458b45b2720b81f02087e06b1688f4e40702f0410dc07b128d40908861040d0432cf23a01c1dd1040700fc4a2bd3a01c15d1040f0538845fb7402823b2080e04e8845fb750282db2180e027108b3ed309086e8300821f432c3aa01310dc0a01043f825874502720b80502087e08b1e8904e4070330410fc0062d1619d5df143902a983f638fe8b4e800a40ae6cfd8a33a2dda0fa982f933f6984e8bf642aa60fe8c3daed3a2105205f367ec099d16ed8654c1fc197b52a745bb2055307fc69ed209086e825884f933f6739dbbe814a4cae7108b4eebb4e804a4ca4988455fe8b4e818a40a66d47846a74547205530a3c62f755a740652e54b884567755a741a52e50b88455f69b4281f0410dc08b1f99cce3d741652e52bc81e3aa71c10cc07020437d2cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde1df0eea07787bc3becdd11ef8e7a77ccbbe37703044fc8f8d149593e25cb9fcbf26959fe4296cfc8f297b27c5696bf92e573b2fcb52c7f23cbdfcaf27959fe4e96bf97e51f64f9822cff28cb3fc9f2cfb2fc8b2cff2acb1765f9922c5f96e52bb27c5596afc9f27559be912080e0750820780371214861750282572180e03588454e2720781902085e815814e804042f4200c14b108b62740282bf4000c15f211625d60908fe0401047f865814ab1310bc0001047f845894442720f83d0410fc016251529d80e0790820f81dc4a2643a01c16f2080e0b7108be2740282e72080e0d7108b92eb0404cf42004148272a45bc4e40f00c041084f4c453a4d009089e860082909e788a943a01c15310401032e54d719fcaae788a94902af7412c4aa5d3a278489514108b52ebb4280e522539c4a2343a2d4a0aa9920c62515a9d16c542aa248158944ea74531902a892116a5d76991835409201665d009089e845864211665d4b98b3240aa6484589449a745e92055d2432ccaacd3a234902a69211665d169512a4895d4108beed76951164895fb211665d56951264895cc108b1ed068517e08200861c25364d3b987b242aa3c00d943d9940382f94180e009ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbbb8bde5df2eeb27757bcbbeadd35efae7b77e36e80e06f327e7453966fc9f2efb27c5b96ff10e520912c4764d9c8b2956527cb812cc7c87262598e95e524b29c549693c9729c2c2797e578594e21cb2965f93e594e25cba965398d2ca795e574b29c5e9633c872c6840004830c084030c0fced574a252018a443008201e66fbfd22a01c1200d02100c307ffb9551090806a910806080f9dbafac4a40304889000403cc7cae9c4a40308847008201663e575e252018c42100c100339f7b462520182445008201663e5741252018c42200c100339f7b56252018c42000c100339faba812100c1c02100c30f3b9e75402828141008201663e574925201824420082410462d1f33a01c1db1040f00f884595750282b72080e0ef108b5ed0d915af0ca9f202c4a22a3a2daa04a9f23cc4a2aa3a2daa08a9f21cc4a26a3a2daa00a9f22cc4a217755a541e52e5198845d5755a541652a51cc4a21a3a2d2a0da9520662514d9d80e04d8845a52016d5d2b98b6a42aad48258545ba745d521556a402caaa3d3a26a902a2f422caaabd3a22a902a552116d5d369515d48957a108beaebb4a836a44a1d88450d345a54000208fe06b1b9a1ce3d541f52a501640f35540e0816000182bfd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3e48e583d43e48e383b43e48e783f43ec8e0838c770104834c327e945996b3c8f2fdb29c55961f90e56cb2fca02c6797e5876439872c3f2ccb3965f91159ce25cb8fca726e597e4c96f3c8f2e3b29c57969f90e57cb29c5f960bc87241592e24cb8565b9882c1795e562b25c3c4100c1621040b038e442d05b272058040208168558d447272058080208168658f4ba4e40b00004102c08b1a8af4e40301f0410847c3d28453f9d80605e0820f804c4a2fe3a01c13c1040f071884503740282b92180e063108b06ea0404734100c14721160dd20908e68400828f402c1aac1310cc0101041f865834442720981d02083e04b168a84e40301b04107c1062d11b2a01c1202b02100c305f781ea612100cb22000c100f3e885e13abbe2c3205586432c1aa1d3a2a1902a6f402c1aa9d3a2c1902a4320168dd269d140489541108b46ebb4a83fa4ca00884563745ad41752a51fc4a2b13a2dea03a9f23ac4a2712a01c12033c4a2de108bc6ebdc45e32055c6432c9aa0d3a231902a6321164dd469d1284895d1108b26e9b46804a4ca48884593755a3409526532c4a2293a2d9a00a9321162d1548d1641a6a801e6418dd374eea129902a53217b689a7240b02006100c32d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3e28e083823e28e483c23e28e283a23e28e683e27703044bc8f85149597e52969f92e5a765b9942c9796e532b25c5696cbc97279597e46962bc8f2b3b25c51969f93e54ab2fcbc2c5796e51764b98a2c5795e56ab2fca22c5797e51ab25c53966bc9726d59ae23cb7565b95e82008275218020e60b19eb740282b5218020e60b19eb75028235218020e62b861b740282d5218020e62b861b750282d5208020e62b869b74028255208020e62b869b75028295218020e631301fe804042b410041cc6360b6e804042b420041cc63603ed409085680008298c7c06cd509089687008298c7c07ca413102c0b0104318f81d9a613102c0d0104318f81f9582720f8340410c43c0666bb4e40f0490820f814c4a24f7476c5b743aa7c02b168874e8bb641aa7c0cb168a74e8bb642aa7c04b168974e8bb640aa7c08b1e8539d166d8654f90062d16e9d166d8454d904b1688f4e8bd643aa6c805814ea04044b422c5a07b1c8ebdc4521a48a8758b457a745bb2155f6402cdaa7d3a25d902a9f422cdaafd3a21d902a3b21167da6d3a2fd902a9f412c3aa0d3a2bd902afb20161dd46851210820580262f3219d7be800a4ca41c81e3aa41c102c0402044bd0cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3ea8ee831a3ea8e9835a3ea8ed833a3ea8eb837a770304ebcbf85103596e28cb2fc97223597e59961bcb7213596e2acbcd64b9b92cb790e596b2dc4a965bcb721b596e2bcbafc8723b597e5596dbcb720759ee28cbafc9722759ee2ccb5d64b9ab2c7793e5eeb2dc43967b260820d8030208f6845c082ee90404bb4100c1ee108b2eeb0404bb4000c1ae108baee804043b4100c1ce108baeea04043b4200c1d720165dd30908b68700821d20165dd70908b6830082af422cbaa113106c0b01045f8158f49b4e40b03504106c03b1e8a64e40b02504106c05b1e8964e40b03904106c01b1e8779d8060530820d80c62d16d9d8060630820d80462d11f3a01c1461040f06584452913e904041b4200c1972016455476c55326825481bccb3ba5d13938b80da9027997774aabd3a25b902a907779a7743a2dc2bc9deb26c4a240a745d721556e402c8ad169d15548956b108b12ebb4e832a4ca158845b13a01c106108b2e412c4aa2f3be2816522509c4a2a43a2d8a8154490cb128994e8b1ca44a00b1284ea7450652c5422c4aaed3a2384895e4108be2755a9414522519c4a2141a2d82bcaa2e80bc8537654a9d7b281e522505640fa5540e0816060182f5e96694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f1f74f241671f74f141571f74f341771ff4f041cf7f0c082eae51b14c81c245269c7273278437622784d7e9e71afd5ca59f2bf473997e2ed1cf45faf9957e7ea19f9fe9e727faf9917e2ed0cf0ff4f33dfd7c473fe7e9e75bfaf9867ebea69f73f4f315fd9ca59f2fe9e70cfd7c413fa7e9e773fa39453f27e9e744ec041fc9c84b065ed2f3928e97b4bca4e125352fa978b98f9794bca4e0259e97e4bcc4f1928c97a4bc24e1259697c4bcc4f012f0e278b1bc185e22bc24a2a3f8837e6ed3cfeff4738b7e6ed2cf6f2c16e7a5182f457929c24b615e0af152909702bce4e7251f2f4ff0929797c779c9c3cb63bce4e6e5515e72f1f2082f39797998971cbc3cc44b765e1ee4251b2f0ff0929597fb79c9c24b665e32f1528f97babcd4e1a5362fb578a9c94b0d5eaaf3f2222fd578a9ca4b155e5ee0a5322fcff3528997e778a9c8cbb3bc54e0e5195ecaf3528e97b2bc94e1a5342fa578799a97a77879929792bc94e0a5272f3d78e9ce4b375ebaf2d28597cebc74e2e5355e3af2d28197f6bcbcca4b3b5e5ee1a52d2f6d7869cd4b2b5e5af2d28297e6bc34e3a5292f4d7869cccbcbbc34e2e5255e1af2d28097fabc4ce7651a2f537999c2cb645e26f132919709bc8ce7651c2f637919c3cb685e46f132929711bc0ce765182f6ff032949721bc0ce665102f037919c04b7f5efaf1d29797d779e9c34b6f5e7af1b28197f5bcace3652d2f6b7859cdcb2a5e56f2f23e2f2b78798f977779798797e5bcbccdcb5bbc2ce365292f4b7859cccb225e16f2b28097f9bccce3652e2f737899cdcb9bbccce265262f337839cecb315e8ef2728497c3bc1ce2e5202f0778f98c97fdbcece3652f2f9e9790973dbcece6e5535e76f1b293971dbc7cc2cb765e3ee6651b2f1ff1b295970f79d9c2cb07bc6ce665132f1b79b9c1cb755eaef17295972bbc5ce6e5122f1779f995975f78f999979f78f991970bbcfcc0cbf7bc7cc7cb795ebee5e51b5ebee6e51c2f5ff17296972f7939c3cb17bc9ce6e5735e4ef17292174e3ec3c96738f90c279fe1e4339c7c8693cf70f2194e3ec3c96738f90c279fe1e4339c7c8693cf70f2194e3ec3c96738f90c279fe1e4339c7c8693cf70f2194e3ec3c96712f161fcc1cb6d5e7ee7e5162f3779e1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf70fe19ce3fc3f96738ff0ce79fe1fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf72fe59ce3fcbf96739ff2ce79fe5fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02ce3fc7f9e738ff1ce79fe3fc739c7f8ef32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebfa07e6cb4fbdecb07bd7dd0c707affba0af0ffaf9a0bf0f06f860a00f06f960b00f86f860a80fdef0c1301f0cf7c1081f8cf4c1281f8cf6c1181f8cf5c1381f8cf701559ce883493e98ec83293e98ea83693e98fe0f5aefef3ed3ac79e726355a34eb480df857f24fa6a39840fb8af617ed33da6fe41bf9473e929fe42bf94b3e93dfe43bf94f9f037d1ef4b9d0e7439f137d5ef4b9d1e7479f237d9ef4b9d2e74b9f337ddef4b9d3e74ffba0169fe804da1ab44568abd096a1e8270bc80ab284ac218bc82ab28cac230bc94ab294ac258bc96ab29caca78f803e0afa48e8a3a18f883e2afac8e8a3a38f903ecaaef4af283d21a40b4948d791902e23215d4542ba8884740d09e91212d21524a40b4848d78f902e1f215d3d42ba788474ed08e9d211d29523a40b4748d78d902e1b215d3542ba688474cd08e99211d21523a40b065d2ee86241970aba50d065822e12215d1e42ba3a84747108e9da10d2a521a42b4348178690ae0b215d1642ba2a84745108e99a10d22521a42b4248178490ae07215d0e42ba1a84743108e95a10d2a520a42b4148178290ae03215d0642ba0a84741108e91a10d22520a42b4048178090a23f3c1af5977612ef2abe74057c110bf87216f0852de04b5cc017bb802f7b015f0003be14067c510cf8f218f08532e04b66c017cf802fa3015f5003beb4067c910df8721bf08537e04b70c017e3802fcb015fa003be54077cd10ef8f21df0853ce04b7ac017f7607aac0f66fcd77921e47d73c10cc84875e65f2f326049d94e6ddab56bd36af2781a6eb569dfaa5d0bcc942f7a747f75ce173da6573bb6a349deac7193062cabd4f5d58ecfb5acd2a1cb844476c0a2721dda77ee3221f2d7df239b7fc03b65dbb46fd2a96785362dda35afda7152a205e5db748b245a58a34b878e13c78d03fc0bfef31e1a3f11622f7982f9a0de046ca30439bf37e16f51d6635842fdde1584fed6cdbef75bf75fcc2547305b688ec2df393abb3988dfb8ff7f6b4f54b7b5b107941f70408bca74ead4a4e7a94429318774df5f3f24cc81a4d27220a9b51c481a2d079256cb81a4d37220e9b51c48062d079251cb8164d2722099b51c48162d0772bf9603c9aae5401ed07220d9107f05fcc7ad09751ae6fa609e0fe6fb60810f16fa60910f16fb60890f96fa60990fdef2c1db3e58ee83777cf0ae0fdef3c10a1fbcef83953e58e583d53e58e383b53e58e783f53ed8e0838d3ed8e483cd3ef8c0075b7cf0a10fb6fae0231f6cf3c1c73ed8ee834f7cb0c3073b7db0cb079ffa60b70ff6f820f481f7c15e1fec1b3763c082173a749b60cd9fff6d227ffe7724d17ffc7992e82fff79923fdf80b72b74e8d4a24dabf6dc7e9cb8aa19add53ab5e9d6a44b0bee497669d3a1fdf801cb2ab668d2316ad304976fe28077aab768d5a67397169d9e6bdfbc458fc81dffdbfce7ffbb4df9e73107eeff1c7b306021ffa1353ef6cfff9d28f27ffe0e1a0f6915cd01fc35f59fa0f0a52f76edd0a54d8bf65d26a3fea69e8ff8d5f9eb7fbd14f0c1673ed8bf557cb6e4fe88287f16fe8efbe6e5fffd08e7437c063c319c3dc27ec700bf9d16a8d94e077d7040de4e07e4ed743061b6d30288cf0720dbe9a0f6edb444cd763aec8343f2763a246fa7c309b39d96407c3e04d94e87b56fa7a56ab6d3511f1c91b7d311793b1d4d98edb414e2f311c8763aaa7d3b2d53b39d8efbe098bc9d8ec9dbe978c26ca765109f8f41b6d371eddb699f9aed74d20727e4ed7442de4e2713663bed83f87c02b29d4e6afc46744188cd7321554e21475a704ae214745efbf9bd79ed1df69227980feab44a4a82ceef349c929880693941aa7ca1725b9da6038334e6523ea1f28116a00fef0ce4b1184fa8c6dcce4003fccb7b017e87bde409e6833aab32c0e9fcce2ac5dcd08641a2293f2498e641aa7ca5facef22b68309dbb174c77d84b9e603ea8af5506139ddfd77feb3bcb6f546eabafe9c0307796f9ffce7796df42ee2cf3abbeb3fc161ae0e7ef05f81df69227980fea3b95014ee7f79dd23bcbef54ffde9d80fede7d7feff7ee0e7bc913cc07f583cadf3b3abf1ffed6374e17546eab1fe8c030374e05ffce374e3f426e9c0aaa0ef01fa101fed3bd00bfc35ef204f341fdac32c0e9fc7e567ae3f4b3eadfbb43d0dfbb5feefddedd612f7982f9a07e55f97b47e7f7ebdffac6e9a2ca6df52b1d18e6c6a9f0dff9c6e912e4c6a9b0ea00bf040df0cbf702fc0e7bc913cc0775456580d3f95d517ae37445f5efdd11e8efddd57bbf7777d84b9e603ea86b2a7fefe8fcaefdad6f9caeabdc56d7e8c030374e45ffce374e3720374e455507f80d6880ff762fc0efb0973cc17c50375506389ddf4da5374e3755ffde1d83fededdbaf77b7787bde409e683fa5de5ef1d9ddfef7feb1ba7db2ab7d5ef7460981ba7e27fe71ba73f20374ec55507f81fc8008f49742fc0efb0973c817c50311195014ee717d179e30431ecfffd6aebd26a2d9ab7e8d4b945fb891327f8605e789b1f47135d0f84b7134df031c6c758f19f3b95e831fa7f2f8cfe338ba2ebe2e87a28ba1e89aec7a2eb5bd1f5ede8ba3cbabe135ddf8daeef45d715d1f5fde8ba32baae8aaeaba3eb9ae8ba36baae8baeeba3eb86e8ba31ba6e8aae9ba3eb07d1754b74fd30ba6e8dae1f45d76dd1f5e3e8ba3dba7e125d7744d79dd1755774fd34baee8eae7ba26b185d7d74ddfba753cec7047775782eff133126baba3fffb9181f9358ed153f261690430915f785a0619fe45ed8ff1773c9114c72255518f5747649353f9b18b0b5b1075440dfb3891fd4f274c4ec5a0ee4212d079243cb813cace540726a399047b41c482e2d07f2a89603c9ade5401ed3722079b41cc8e35a0e24af96037942cb81e4c33d9b78a68f49e663e27c4c721f13ef6352f898943ee63e1f93cac7a4f631697c4cdaff8d47056f68d1feb5ae2dbab6a8d6b569bb36cdfee361c12cfdd707062753fcc060fe23e0af7ed009fa94b298e45a9e521693dec7a4139f5216934e7c4a594cfa04794a594c7288cfe926403c52fed0bb987835db29a38fc9206fa70cf276ca9830db291ee27306c876caa87d3ba552b39d32fb984cf276ca246fa7cc09b39d52417cce04d94e99b56fa7d46ab6d3fd3e268bbc9db2c8dbe9fe84d94ea9213e67816ca7fbb56fa7346ab6d3033e26abbc9db2cadbe98184d94e69203e67856ca70734420e852036278354c9a6f9395c31d9a053af07ef4dbdeeb0973cc17c50d935220e7c7ed975326a314921551e52b9adb2d3816118b5922a1935d0879703c2a895d4cca8c5e48006f8c3f702fc0e7bc913cc0795536580d3f9e554caa8e5d4f884d70290608a83547944f59de523d060ca752f98eeb0973cc17c508faa0c263abf47ffd67796b9556eab47e9c03077964ffd9def2c1f83dc593ea5facef2316880e7b917e077d84b9e603ea8c75506389ddfe34aef2c1f57fd7b9709fa7b97f7deefdd1df69227980fea0995bf77747e4ffcad6f9cf2a9dc564fd081616e9c4afd9d6f9cf2436e9c4aa90ef0fcd0002f702fc0efb0973cc17c50055506381f98d21b27d54f568ec902fdbd2b74eff7ee0e7bc913cc075558e5ef1d9d5fe1bff58d531195dbaa301d18e6c6a9ccdff9c6a928e4c6a98cea002f0a0df062f702fc3f17247bc913cc07555c6580d3f915577ae3a4fa39373159a1bf7725eefddedd612f7982f9a04aaafcbda3f32bf9b7be717a52e5b62a490786b9712af777be717a0a72e3544e75803f050df0a7ef05f81df69227980faa94ca00a7f32ba5f4c6a954c23fa82c262efa00ad74d135c39f8fd12aed63cafcbfa7f3d7c3a86c42b8fcd70fab9ccec32aaff3b09ed1795815741ed6b33a0faba2cec37a4ee76155d27958cfeb3cacca3a0feb059d875545e76155d57958d5741ed68b3a0fabbacec3aaa1f3b06aea3cac5a3a0fabb6cec3aaa3f3b0eaea3cac7a3a0fabbecec36aa0f3b01aea3cac97741e56239d87f5b2cec36aacf3b09ae83caca63a0fab99cec36aaef3b05ae83cac963a0fab95cec36aadf3b0dae83cacb63a0feb159d87d54ee761bd0a382cf9e53405693494223a274a195def8bae99a26b96e89a35baa68dae65a36bb9e85a3eba3e135d2b44d767a36bc5e8fa5c74ad145d9f8fae95a3eb0bd1b54a74ad1a5dab45d717a36bf5e85a23bad68caeb5a26bede85a27bad68daef5a26bfde8da20ba368cae2f45d746d1f5e5e8da38ba3689ae4da36bb3e8da3cbab688ae2da36babe8da3abab689ae6da3eb2bd1b55d747df5cf695a7b1fd3e1ae53b864d17fa274746dffe73fd7d1c7bca6970ae9a472561de3636231bf4e9dc1bfe5daceafcbdf1959ea0ade9ca088eea6f3cad15de761f5d079583d751e562f9d87d55be761f5d17958afeb3cacbe3a0fab9fcec3eaaff3b006e83cac813a0f6b90cec31aacf3b08624f8df9e29e90fa26ed1bf8eba47d71ed1b56774ed155d7b47d73ed1f5f5e8da37baf68baefda3eb80e83a30ba0e8aae83a3eb903fffe21aea63de48087b86e9fcd486eb3cac113a0f6ba4cec31aa5f3b046eb3cac313a0f6baccec31aa7f3b0c6eb3cac093a0f6ba2cec39aa4f3b026eb3cac293a0f6baacec39aa6b2779b949aae986f2c3ea3f2fc3a51d31c737e1512e21b997f7d5b4d877c97f2194815a55f7799a1f3b066ea3cac592a7f8f69eed815737e6feab47db6cec39aa3f3b0e6ea3cac793a0f6b7e428c55ffeaef7404726a0b349e9a819cda428da76621a7b648e3a939c8a92dd6786a01e4d496683cb518c8a92dd5786ad4a3879cdc329d27371c72726fe93cb91190937b5be7c98d849cdc729d27370a7272efe83cb9d190937b57e7c98d819cdc7b3a4f6e2ce4e456e83cb97190937b5fe7c961fe865ba9f3e43080ed2a9d2787e9d0aed67972932027b746e7c94d869cdc5a9d2737057272eb749edc54c8c9add77972d32027b741e7c94d879cdc469d27370372729b749edc4cc8c96dd67972b32027f781ce937b1372725b749edc6cc8c97da8f3e4e6404e6eabce939b0b39b98f749edc3cc8c96dd37972f32127f7b1c6934b0c39b5ed1a4f2d16726a9f683cb5249053dba1f1d4305f2bdea9f1d492414e6d97c6538b839cdaa71a4f2d39e4d4766b3cb578c8a9edd1786a2920a7166a3cb5949053f37ffdd44e25ea1931d60531896393244d16973c3e45cafb52a54e93365dfa0c193365ce727fd607b23d98fda11c0fe77c24d7a3b91fcbf378de27f2e52f50b050e122458b152f51f2c9a79e2e55ba4cd972e59fa9f06cc5e72a3d5ff9852a55abbd58bd46cd5ab5ebd4ad57bf41c3971abddcb849d366cd5bb46cd5ba4ddb57dabddabe43c7d73a75eed2b55bf71e3d4f257accc72cf0310b7dcc221fb3d8c72cf1314b69aa4fb36f9a10d31c95a68d3493a3c915cd77680a42b302eaa853df99bab3d4c3a44e1ff5c3a86b44bd15ea40d0dfe9f4d72cfdcd477f19d1df0f74974df7a274c7467736740740574abaa250f25242d16f32ed78da19e4e0ff07", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/examples/gullible_account_contract.json b/yarn-project/noir-contracts/src/examples/gullible_account_contract.json index c4704e0f404..878db4fc8c1 100644 --- a/yarn-project/noir-contracts/src/examples/gullible_account_contract.json +++ b/yarn-project/noir-contracts/src/examples/gullible_account_contract.json @@ -71,7 +71,7 @@ } ], "returnTypes": [], - "bytecode": "ed5d677454d516ce4da18828bd37955e675220a1a6113a84de4bca4d1898cc24934908456444111131990988e02b3e081090f62084a0481111f10c22220262efbd77c1b7cf0d2cdf7dac75fd317bd6fbd6ac71adbd59ac4c86efdbe7db3bdfb967722cf52acbaf2871ae3d89d6b48cf989f6a294025b46529ad5ea2a1b97307ac8e01277b862f0c508a32fd6505c5b131d16abd592bdb6c4b565bcc5966d553dc525ee4bf126dffe3347f9fc16260d514eae558d2b2e75950f2fc8c91d9635daee748784b9ca92ecb67ca75b29f11da86b67a2c596e658986251ad9963724b4336255b0a9590cde39df65c4f7131c33fb03dc16171cecd519d960c4f8987a1b4711c0bd4f7527c94a97774b4da2752354799d34c9171e9b131a6e898f4deb1e658734c6c4c66646c54941a1b1ddb272e3dae8f29ce1c1da59ab362e2a2b2aebf073fb3bebed7dbf4a7a43d7092e6056466005496e070a42dbc12528f07527ddf21f100698002a4210a904628401aa300698202a4290a906628409aa300698102a4250a905628405aa300698302a42d0a90761ceeff863531f5eb3f60e0a0f884c4a4e4c12943860e1b3e62e4a8d16352c78e1b3f61e2a4c953a64e9b3e63e6acd973d2d23332d5acecb99679c51b5c9b46d90bdd61a1d57f862ad57f2a2137360e213e6f1ccc26d78e14bb43b564dbe496cab32f8372aac35298e654e53ecb69b1db4a5ce543d5b45c8d863bdce471ed1ca7665bf29daa63982d532d52fee7efa1fffdf2b07ad59823c2af638f706d965ba0925ad57f0f51aeef50e472f96ae4fb32ec72ca932d0e956817aaae6d630bec4e8b6a73aee551d3000e59fbbeb388b4ce3f6ab0999e6fb4d3b68aabbadd52b18761d90630d476be9ba12e0cfb103fca6720887c6c3946f2c931928fcd1ff219c850db1c06f9d8b0e59308229f5cbb917cec46f2c9f5877c12196a6b67904f2eb67c9240e4e3c833924f9e917c1cfe904f12436df318e4e3c0964f32887c9cf946f2c937928fd31ff24966a86d3e837c9cd8f29907229fc20223f91418c9a7d01ff299c750db0206f91432c8e7a6e2f84a2c8aa1c0fd18de6301e76110f3f9e602c6f3cda2e0f9a6aeb4451c0bb410f07c73c1c262ee7e77733cfe61788f4580425ab888e3e19857998738a439166d31030ead3c3e779abfc6f462c631bd2438a675a55dc2b14077038ee9c577b38f69c452b18c2133c318eacff01e4b81bde252c621744f7008e94a7b0fc7028965805368a95816b06e51b800b5249609178f61b406aa6114f7b238462bb06314f7324e6bb13c38aef5c515cb5916e93ec0814de4ee83348e2cd5f257bf1570b6dbfdc176d3d556dccfa29f1580dd56205604ae3d7a007176af100ff0d8235bc0daa3952cf6c8866c8f5672ceeb0783f35a5f5cf120cb22ad42b4472bc52a4c7bb40ab8dfec9cedf650b0dd74b5150fb1e8673560b7d9c5eac0b5470f23ceeed5e2611e7b941bb0f6680d8b3dca45b6476b38e7f523c179ad2fae788465918a11edd11a518c698f8a81fb2d8fb3dd4a82eda6abad2861d18f1bb0dbf2843b70ed91077176bb8587c71e3902d61e95b2d82307b23d2ae59cd76b83f35a5f5cb1966591d621daa352b10ed31ead03eeb77cce767b34d86ebada8a4759f4b31eb0dbf2c5fac0b5478f21ceeef5e2311e7be40c587bb481c51e3991edd106ce79bd3138aff5c5151b5916e971447bb4413c8e698f38aa75f32f876e4b55335547be6af378dcfdc535f77c8a1c712dc42dfe26fe6ef8fa2b21dddc83e8d5f1140914768a3c8a7c8ac1142914432886520ca3184e31826224c5288ad11463285229c6528ca3184f31816222c5248ac9145328a6524ca3984e31836226c52c8ad9147328d228d22932283229548a2c8a6c8ab914168dd13fc43fffa202fde8b544fc9a7cadfc8e27c4bf407ff66e62180cfe9abed19cc3777370f8ea6a2b36b34c9332c0d91b2dca90afad6590352fa048bc6b6bef40b938ef4e142077a100698f02a4030a908e28403aa100e98c02a40b0a90ae2840baa100e98e02a4070a909e28407aa10031f15d5bbb516c115bc536512eb68b1de249b153ec12bbc59effc7d5b455aa2daf402d50530bd2ad968c1b97d3ca2fe92fa8ad837b41adf4fdbe2eae3fafd912db40eed912ff167b8d6eda127b8daedaa2eff6c35d5b621b4785f7ba39aa837d5b9b284791d17eb1cf5046fb0c65b4df2f322ae7a8f03e0e19ed0797d14e14191d10158632aa3094d101bfc8682747852b386474005c46bb50647450541acaa8d2504607fd22a35d1c15aee490d1417019ed4691d121516528a32a43191df28b8c767354b88a434687103f3810cd51e32d1c6ff214f005531ce0fe3cba7a3a7874a52fae789a65910e237e6ee0297118f2935ea28ce34d9e41d4d361f10ccf47bd202f8fe659b8232c9ff52a44feacd711ce997d3438b3f5c515475916e918e2cc3e228e617ed6eb18e20da5911cf3682bc79b1c47b690c739c7d1b3c171a42fae789665914e208ea3e3e244005bc8e710f574423cc763218b02d7429e64b19045c816f224e7cc7e3e38b3f5c515cfb32cd229c4997d529cc2b490a790fbad82b3df5e08f69bbeb8e20596453a8dd86f15e274007ba41711f5745abcc8e3911605ae47122c1e6911f2cc169c33db1b9cd9fae20a2fcb229d419cd9429cc1f4486790fbad92b3df5e0af69bbeb8e22596453a8bd86f95e26c007ba49711f57456bccce3919604ae473ac7e2919620cfec739c33fb95e0ccd61757bcc2b248e71167f639711ed3239d47eeb72ace7e7b35d86ffae28a575916e90262bf55890b01ec915e43d4d305f11a8f475a1ab81ee9228b475a8a3cb32f72ceec4bc199ad2faeb8c4b248971167f6457119d3235df6fbd55c62abbc946aaf4cfbb49ba95e17576e26e2f3f879c31fe5f519d59b90a8de8244f53624aa772051bd0b89ea3d4854ef43a2fa0012d58790a83e8244f53124aa4f20517d0a89ea3348549f43a2fa0212d59790a8be8244f53524aa6f20517d0b89ea3b4854df43a2fa0112d58f90a87e8244f53324aa5f2051fd0a89ea374854bf43a2ba0a89ea1a24aa3f10517995104c580a26ac504c586198b0c231614560c2aa8109ab2626ac5a0cb08cff772b516eb15d1e00ed90e949992a64aa94a94aa63d32bd21d39b32bd25d3db32bd23d3bb32bd27d3fb327d20d387327d24d3c7327d22d3a7327d26d3e7327d21d397327d25d3d7327d23d3b7327d27d3f732fd20d38f32fd24d3cf32fd22d3af32fd26d3ef325d95e99a4c7f50a279af6545cba15a0ed372b89623b45c43cb35b55c4b1e7f7995da5ee596bf3a33db22ff95d7b5efaa5dfd5d75bccaada09fd9f02a75990f9491b8dd867858fe84d8c4d3fbb7338f242c76f530076e7d4c580d306135c484d5081356634c584d306135c584d50c1356734c582d3061b5c484d50a13566b4c586d3061b5c584d5ceef3bc97ab415aaafed8b1a68b9a1961b69b9b1969b68b9a9969b69b9b9965b68b9a5965b69b9b596db68b9ad96db55efb5eef02a77faa33c7761ae5a7b4c581d306175c484d5091356674c585d306175c584d50d1356774c583d3061f5c484d50b13960913961913562426ac28c4879b65f4589287de32407af4bc9c1e2af3f073f9e397257d8715cdf28b8ecb58dec585d9783198b07a63c2ea03d9c774e05897875f2c66d9e33061f5c584d50f13567f4c5803fc714183af3dadb0501b88482d9485da20446a612cd4e211a985b3504b40a416c1422d11915a0d166a4988d4e8113d0bb9644c72ed59c80dc624d781855c0a26b98e2ce4866092ebc4426e2826b9ce2ce4866192ebc2426e3826b9ae2ce4466092ebc6426e2426b9ee2ce4466192ebc1426e3426b99e2ce4c66092ebc5422e15939c8985dc584c72661672e330c945b2901b8f492e8a85dc044c72d12ce42662928b61213709935c6f16729331c9f561213705935c2c0bb9a998e4e258c84dc324d79785dc744c72fd58c8cdc024d79f85dc4c4c720358c8cd4224579385da6c446ab558a8cd41a4569b855a1a22b55b58a8a52352abc3422d0391daad2cd43211a9d565a1a62252bb8d855a1622b5db59a8652352abc7426daeefd48aaf8474f32a03bdca20af12ef5512bc4aa25749a2a3753a80a6635a3acca4233f3a18a3e3233a64a1a3087a604f8fb5e9e12f3d22a50789f4b88d1e4ad1a31b7ac0418f0168b34c5b4ada78d1f6844c3c595d3284649bc85ed08f61fa7145639dc61f8d096a27921d2d0fd1f80f", + "bytecode": "ed5d677454d516ce4d41104be8bda8f43a930209358dd021f45e526ec2c06426994c422822238a8888c94c40045ff1418080b4072104458a888867101111107befbd0bbe7d6e60f9ee63adeb8fd9b3deb7668d6bedcd6265327cdf3edfdef9ce3d936399575976598977ed4eb2a667ce4bb217a716da3293d3ad5657f9d8c451830795bac315832f46187db196e2da92e4b058ad969c35a5aecde32cb61cabea2929755f4c30f9f69f39dae7b730698872f3ac6a7c4999ab6258616eded0ec5176a73b24cc559e6cb71538dd4aa9ef405d3b922cb674c782548b6acd1a9d5716b231c552a4846c1ae7b4e7794a4a18fe816d890e8b734eaeeab4647a4a3d0ca58de758a03e1713a24dbd6262d4de51aa39da9c6e8a8acf888b35c5c466f48a33c79963e362b3a2e2a2a3d5b898b8def119f1bd4df1e69868d59c1d1b1f9d7ded3df899f5f1bddea63f25ed8193342f203303a0f24487237dc1e590481e48f57c87c403a43e0a900628401aa200698402a4310a902628409aa200698602a4390a901628405aa200698502a4350a90362840da72b8ffebd6c4d4b75fff0103131293925306a50e1e3274d8f01123478d4e1b3376dcf80913274d9e3275daf4193367cd4ecfc8cc52b373e658e696ac776d1c692f728785d6fc19aad4fca9845cdf3884f8bc71309b5cdb53ed0ed59263935b2acfde4cca690e4b51ba5395fb2ca7c56e2b75550c51d3f3341aee7093c7b563ac9a632970aa8ea1b62cb558f99fbf87fef7cbc3226b3047845fc31ee1da24b740a5b56bfe1ea25cdba1c8e5f2d5c8f761d8e554a4581c2ad12e525d5bc714da9d16d5e65cc3a3a6fe1cb2f67d6711659d77c460333dcf68a76d155774bba5120fc3b2f567a8ed3c37435d18f6217e94cf0010f9d8728de4936b241f9b3fe43380a1b6b90cf2b161cb2709443e797623f9d88de493e70ff92431d4d6ce209f3c6cf92483c8c7916f249f7c23f938fc219f6486dae633c8c7812d9f1410f9380b8ce45360241fa73fe493c250db0206f938b1e53317443e458546f22934924f913fe43397a1b6850cf2296290cf0dc5f19558344381fb32bcc77ccec320e6f3cdf98ce79bc5c1f34d5d698b39166801e0f9e6fc0525dcfdeee678fcc3f01e0b0185b46021c7c331af32177148732cda22061c5a797cee347f8de9458c637a71704ceb4abb986381ee061cd38bee661fd388a5621943668631d48fe13d96007bc5258c43e89ee010d295f61e8e05124b01a7d012b13460dda270016a492c152e1ec3680d54c328ee65718c5660c728ee659cd66259705ceb8b2b96b12cd27d80039bc8dd07691c59aae5af7e2be46cb7fb83eda6abadb89f453fcb01bbad502c0f5c7bf400e2ec5e2e1ee0b147b680b5472b58ec910dd91eade09cd70f06e7b5beb8e24196455a89688f56889598f6682570bfd939dbeda160bbe96a2b1e62d1cf2ac06eb38b55816b8f1e469cddabc4c33cf6282f60edd16a167b94876c8f5673ceeb4782f35a5f5cf108cb229520daa3d5a204d31e9500f75b3e67bb9506db4d575b51caa21f3760b7e50b77e0da230fe2ec760b0f8f3d7204ac3d2a63b1470e647b54c639afd704e7b5beb8620dcb22ad45b44765622da63d5a0bdc6f059cedf668b0dd74b5158fb2e8671d60b7158875816b8f1e439cddebc4633cf6c819b0f6683d8b3d7222dba3f59cf37a43705eeb8b2b36b02cd2e388f668bd781cd31e7154ebc65f0edd9aa666a98e02d5e6f1b8fb89abee7914b9e26a885bfc4dfcddf0f59743baba07d2ab13281229ec14f91405148328522906530ca1184a318c6238c5088a9114a3284653a4518ca1184b318e623cc5048a8914932826534ca1984a318d623ac50c8a9914b3286653a453645064526451a814d914391473282c1aa37f887ffe4505fad26b89f855f95af91d4f887f81feecddc83018fc357d633887efa6e0f0d5d5566c629926e580b3374694235f5bcb206b5e405178d7d6de817271de9d2840ee4201d20e05487b14201d5080744401d20905486714205d5080744501d20d05487714203d5080f4440162e2bbb67683d82cb688ada2426c13dbc5936287d8297689ddff8fab69ab555b7ea15aa8a61566582d99d72fa7955fd25f505b17f7825ae9fb7d5d5c7f5eb325b682dcb325fe2df618ddb425f6185db545dfed87bbb6c4568e0aef71735407fbb636518122a37d62afa18cf61aca689f5f6454c151e1bd1c32da072ea31d2832da2f2a0d65546928a3fd7e91d10e8e0a5772c8683fb88c76a2c8e880a832945195a18c0ef845463b392a5cc521a303e032da8522a383a2da5046d586323ae81719ede2a87035878c0e227e702086a3c69b39dee429e00ba638c0fd7974f574f0e84a5f5cf134cb221d42fcdcc053e210e427bd4439c79b3c83a8a743e2199e8f7a415e1ecdb37087593eeb5584fc59afc39c33fb487066eb8b2b8eb02cd251c4997d581cc5fcacd751c41b4aa338e6d1168e3739866c218f718ea36783e3485f5cf12ccb221d471c47c7c4f100b690cf21eae9b8788ec7421607ae853cc162218b912de409ce99fd7c7066eb8b2b9e6759a4938833fb84388969214f22f75b2567bfbd10ec377d71c50b2c8b740ab1df2ac5a900f6482f22eae9947891c7232d0c5c8f24583cd242e4992d3867b63738b3f5c5155e96453a8d38b385388de9914e23f75b1567bfbd14ec377d71c54b2c8b7406b1dfaac49900f6482f23eae98c7899c7232d0e5c8f7496c5232d469ed9673967f62bc199ad2fae78856591ce21ceecb3e21ca6473a87dc6fd59cfdf66ab0dff4c515afb22cd279c47eab16e703d823bd86a8a7f3e2351e8fb424703dd205168fb40479665fe09cd91783335b5f5c719165912e21ceec0be212a647bae4f7abb9c4167929d51e99f66a3753bd2e2edf48c4e7f1f3863fcaeb33aa372151bd0589ea6d4854ef40a27a1712d57b90a8de8744f50124aa0f21517d0489ea6348549f40a2fa1412d56790a83e8744f50524aa2f21517d0589ea6b4854df40a2fa1612d57790a8be8744f50324aa1f2151fd0489ea674854bf40a2fa1512d56f90a87e8744750512d55548547f20a2f22a2198b0144c58a198b0c230618563c28ac084550b13d64d98b06a33c032fedfad44bbc5367900b45da62765aa94a94aa66a9976cbf4864c6fcaf4964c6fcbf48e4cefcaf49e4cefcbf4814c1fcaf4914c1fcbf4894c9fcaf4994c9fcbf4854c5fcaf4954c5fcbf48d4cdfcaf49d4cdfcbf4834c3fcaf4934c3fcbf48b4cbfcaf49b4cbfcb7445a6ab32fd4189e6bd96152d876a394ccbe15a8ed0722d2ddfa4e5daf2f8cbabd4f12a37ffd599d966f9afbcae7d579d9aefaaeb556e01fdcc8657b915f140f909b191a73f6e636e5b2c76b707ec6789bc4a24b32e99066e3dcc9f03f5316135c084d5101356234c588d316135c184d5141356334c58cd3161b5c084d51213562b4c58ad3161b5c184d5d6ef3bc948da0ad5d3f645f5b5dc40cb0db5dc48cb8db5dc44cb4db5dc4ccbcdb5dc42cb2db5dc4acbadb5dc46cb6d6bf65a7778953bfd519ebb3057ad1d26acf698b03a60c2ea8809ab1326acce98b0ba60c2ea8a09ab1b26acee98b07a60c2ea8909cb8409cb8c092b0a135634e283db727ae4ca436f29203d3a0ba007e63cfc5cfef86549df61c5b0fca2e35296777161365e2c26ac5e98b07a43f6311d3846f2f08bc32c7b3c26ac3e98b0fa62c2ea8709abbf3f0e557ded698585da00446aa12cd40622520b63a19680482d9c855a2222b508166a4988d46ab1504b46a4468fe859c8a560926bc7426e1026b9f62ce45231c97560213718935c4716724330c97562213714935c671672c330c9756121371c935c5716722330c97563213712935c771672a330c9f56021371a935c4f16726998e44c2ce4c6609233b3901b8b492e8a85dc384c72d12ce4c663928b61213701935c2c0bb98998e47ab1909b8449ae370bb9c998e4e258c84dc12417cf426e2a26b93e2ce4a66192ebcb426e3a26b97e2ce4666092ebcf426e2622b99b58a8cd42a4569b85da6c446a7558a8a52352bb99855a0622b5ba2cd43211a9ddc2422d0b91daad2cd454446ab7b150cb46a4763b0bb51c446a912cd4e6f84eade4724857af32c0ab0cf42a095e25d1ab247995643a5aa703683aa6a5c34c3af2a383313a3ea243163a8aa007f6f4589b1efed223527a90488fdbe8a1143dbaa1071cf4188036cbb4a5a48d176d4fc8c493d5254348b689ec05fd18a61f5734d669fcd198a07622d9d1f2108dff00", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] From 15e36a69186f68999134801081ea8ae3849ab6e9 Mon Sep 17 00:00:00 2001 From: LHerskind Date: Fri, 30 Jun 2023 08:43:21 +0000 Subject: [PATCH 03/14] chore: noir rebuild --- .../src/examples/non_native_token_contract.json | 4 +++- .../src/examples/public_private_contract.json | 8 ++++++-- .../src/examples/schnorr_account_contract.json | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/yarn-project/noir-contracts/src/examples/non_native_token_contract.json b/yarn-project/noir-contracts/src/examples/non_native_token_contract.json index 45076f69c67..826aa52d5c7 100644 --- a/yarn-project/noir-contracts/src/examples/non_native_token_contract.json +++ b/yarn-project/noir-contracts/src/examples/non_native_token_contract.json @@ -370,7 +370,9 @@ "visibility": "private" } ], - "returnTypes": [null], + "returnTypes": [ + null + ], "bytecode": "cd9df973d35517c69b6e5ed119f53f505f505196ac4dc2da742fb42c2dfb9e36df94409a84242d2dab71c15d935370c5958220a2ef3bee3beedb41fdd579fd1fdc7745130b42a13dcdf2046e67fa43e69979b8e79393fb3df7f661b2fb98c9ff55c9ff13ffad097a3b37d684fb1a7a429db5de6030b1bfcd33afb13e45e52641ac90c44a53e2294f34105fdf6dc4039d03c9147d596d3357d9ed86d36a586c16afd9eaee7039cc76474795cbe2b2385c0e9fd565b3192ebbcbe9ee703bcd6e8bdd6658fc0eb7cd6f1efab9fccb6a73613f76fca2ae287851d611301e5c60f88c68cc080d0cd0e57c9cae48ff9af878095df99fc49335d1403018e8da934a1c680f84ba82c65025052ec37265c116e67f56d41d091ae3930f25f6b5867bc95492d85f1b0ec5e254922adc3f71b8211c35025da10ca481c3b17838eaed32da0caf2f9538d46478239e68d4db4fa5a654e2489bd11588c58d6873c867f4994eaea21cb18a2335819037dadf103082bef991dd15fb3c3e5f697962b025ecf55159c550e515652708542406e7f4744752170ebd2e310db6c7c391a389437581a8d1190ff41a89830b7bc2f180118aefc1bc95e30b2f722099ccc2c422cb574d382aec1113fa04f12ade35fcc33a00f8b08e07b09d40002e80262c62fb5ca249fb5c73b5d43e574bed734d31dae71200dbab01ed730da07de070269c2b386378f0ff0a079c071da748c7321140f85a80475674f2dc7a48972e2abc0120dbd7c46ba5edeb5a69fb9a683a35e6917663dea9059126bbea78e0ec7a5d72efd0a4566a2afe0cfbf4891976697abf31860db165263a6b881dfebaf4e4b22a8a30d4566686daf42c3b34d496570ea1a82c3f81a4f2c4503b6ed8508b39524d2cbc1f848fd62425889325718a244e9544b3245a24d12a893649b44ba24312ab24d129892e49744be234499c2e89332471a624ce92c4d992582d891e49ac91c45a49ac93c47a496c90c446496c92c466499c238973d5880396ad804dc33227ed61f517b4f158e62206ace78a389c5bf2adace9a4872f7f3acd083acf17f9e862cea7b286d33dccf9d16944d079e11c1cec5cb95656778687db9f3b9d7a049d17cfcdb1d7eecfa5b29a913c9cb9d1a945d079e91c5e0a38b2adac7a340f7bf6743c083a2f9fe32b13733695cd923cccd9d1998da0f3ca79b850ea1cabb219637938c7a6331341e7d5f374dd66952a9b06b8949a8ea0f3da79bc8c748e56992b5b0fe7e874dc083aaf9fe7ab5ad7489555e5e2e11a998e1341e70d0d2eb2cd675666cfd1a3ca7f361d0782ce9b9a5cf39b4fafcc9a8f8775381d1b82ce5b1afd11c47ab23273be1ef653742c083a4775fa1391e1f7671666995290c7109da9083a6f17834e8186163e8a30791bc1e71d2df9bc8930790bc1e75d2df9bc8e307903c1e73d2df9bc8a30790dc1e77d2df9bc8c307905c1e7032df9bc88307909c1e7432df93c8f307901c1e723dda69ff4fc63998cc0f31c02cfc75ab6cf4708938f117c3ed192cf0708930f117c3ed592cf7b0893f7117c584b3eef204cde45f039a6251f46981c43f0f94c4b3e9f204c3e45f0f95c473e97002a9b8440fc8596ddf319c2e47344f77c814dc01e5a146e31dabcbe40df8036e9fbaf4a2e9f3479cad4f46dadcdeea872badcd3a6cf98396b76b5a7a6b6aebea1b1a979cedc63a61221a1d322c5775a25719e24ce97c40592b85012db24b15d121749e262495c22894b257199242e97c41592b852125749e26a495c23896b25719d247a25b143123b25d127898624fa25b14b12d74b6240123748e2c62284e4360042721b117bf0d73a86e4d603427201049d6f740cc9f90121b92e049d6f750cc9f90021390341e73b1d43721d80905c2782cef73a86e4d60142725e049d1f740cc9ad0184e4d622e8fca863486e152024b71a41e7271d43722b0021b995083a3feb18925b0608c92d47d0f945c790dc1240486e2982ceaf3a86e4160142728b11747ed33124d70608c9b523e8fcae63486e012024b71041e70f1d4372f30021b9f9083a7f6a798ffc07c2e44f049fe35af2f90d61f23b82cf5f5af2f90561f22b804ffa025e4b403f214c7e8600326909e80784c98f1040a55a02fa0e61f23d0450999680be41987c0b0154ae6352ae15c1e76b089f0a1d1b28fdb6415c2a20882af544540a71298320ba404f44251017130491d272a73e8e30f90b02e8423d7b48415c2e84201aa727a24a88cb05104417e988e85240692d10c817ebd941e3202e17413ae862cde3739742e2732dadf3e62f58d8d6be68f192a5cb96af58b96af59ab5ebbc1d9d3ec3dfb53eb061a31c9f0b4ac19e6e490c496258122392b84912a3921893c4b824f64862af246e96c43e49ec97c42d92b85512b749e27649dc21893b2591af17d584a8de20aa378aea4da27ab3a8ee12d55b44f55651bd4d546f17d53b8a10a5e3db01593abe03b2255fa7639a8e6f05c4e9f83608a0493a06ea78172051c7b740004dd63153c7370142757c3304d0141d63757c032057c73742004dd53159c7d703a2759c800032eb18aedb0108d7ed84e0b1e898aedb0648d76d87e0b1ea18afdb0288d76d85e0b1e998afeb03e4ebfa2178ec3a06ec7a0101bbcd103c0e1d13767140c2ae0782a74ac7885d1410b18b41f03875ccd8450019bb4d103c2e1d43762140c82e0cc1e3d6f3c6d905717143104dd3135115c4c50941345d4f4476888b038268869e88ac10171b04d14c3d1199212e1608a2597a229a0271990a41345b4f4493202e932188aa754cdd7543005d0701e4d1b387aa212e1e08a21a3d11cd82b8cc8620aad513d10c88cb4c08a23a3d114d83b84c8720aad713511dc4a51e82a8414f443510975a08a2461d115d06282d0881dca4670735405c1a211dd4a479f0ee3248f02ed81d0a47364563f19edecd7dfd5bb66edbbe63275fcf09be816fe49bf866dec5b7f0ad7c1bdfce77644278c3de74c4b7cff29d85d6d1612fc2aaee2a745555e622aceaee4257e5f5176155f714ba2ab77d8438d981f6268fd551455f95f888ef54c477a57fef4effdea368aea2398a9a1535296a54d4a0a85e519da25a45358a3c8aaa15cd56344bd14c4533144d57344d915b914b91535195228722bb229b22ab228b22b3a2a98aa6289aac6892a28d8a36280a285aafa84b915f91a1c8a7a853518722afa2758ad62a5aa368b5a2558a562a5aa168b9a2658a962a5aa268b1a2458ada15b5295aa86881a2f98ae6296a55d4a23211b94c882e13b3cb04f13251bd4c982f13f7cb04023391c14ca830133bcc041369a7a21d8ab62bdaa668aba22d8afa15f529daaca857518fa2b8a298a2a8a24d8a228ac28a428aba150555fa33ce494e31f100efe63d7c2fdfc7f7f303fc203fc47bf9617e841fe5c7f8717e82f7f120efe703fc241fe443fc141fe6a7f9083fc3cf9efa6ef4d4a9af224ffb6636314b61ef3c278776c2826cf8dfedb4001ba6537b72de363cec3198a70def1efe74c8cb86f79cf988c9c386ef3dfb3995b30ddf37d2c32e471bbe7fe427664e36fcc0688fdd1c6cf8c1d19fdd59dbf043d20090a50def95a788ac6cf8e1b146912c6cf891b1e799316df8d16c86a2316cf8b1ec262bd1861fcf763c136cf889ec67bc516d785f2e83e228363c98dbb439a20defcf75641dc1860fe43ef79e65c34fe6333c9f61c307f39bc087d9f0a17cc7f8d36cf8a9fccf02ffdaf0e1420e14276cf8e9c24e25ffd8f091428f36691b7e06f1ff409f2dfc80944cee4dec6b0df752fae4b3bf361c8ac5a9240538171e6e08478d40572833e80e3cd71935bc71a3c59a3e215a5a8d58ccdb65a412879a0c6fc4138d7afba9d4944a1c6933ba02b1b8116d0ef98c3ed3c9d594235673a42610f246fb1b0246d0373fb2bb629fc7e72b2d4f0cb684bd3e2aab28eabf75a07e538f37182b2b4f1c98d3d31d69f653c5b8c145516f243198799dba68b03d1e8e0c249385374432f937", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } diff --git a/yarn-project/noir-contracts/src/examples/public_private_contract.json b/yarn-project/noir-contracts/src/examples/public_private_contract.json index c73fe8715bf..0e34292d30c 100644 --- a/yarn-project/noir-contracts/src/examples/public_private_contract.json +++ b/yarn-project/noir-contracts/src/examples/public_private_contract.json @@ -28,7 +28,9 @@ "visibility": "private" } ], - "returnTypes": [null], + "returnTypes": [ + null + ], "bytecode": "b590414ec24018855b685de8424f801e013c812da18a296a800b4c3abfcdc471a6ceb406967383ce1476ee285563484cbc8007e0025e861816ee0c9beadbbd7cc97b2f6f763257ef3e45d19dcf2741c6a22ea2542d87ded5794f1bc7de01dd5d70ef37f87203188404561873b8de98a3f5c632ad63f5ec0b422989e75a5523c2620a45aecdd759bb9e3aadda11ed3c7f528b017f34b6a5965dce646a2c5d3f56bd055c0089d9f697e223128052084fc73cec0c404a148356af1780124f0834350d5babd510622253107d866162ffac71fe62cdca270c89694080e2eb64e62e3c8c1b8e2a438eb069baffda55f51e324465d351d565769ff46f8dbb5f8e054a54b9f5faa01ca53cf9ccf36f", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, @@ -156,7 +158,9 @@ "visibility": "private" } ], - "returnTypes": [null], + "returnTypes": [ + null + ], "bytecode": "b5904f4ec24018c529b42e74a137406f8037b06da862fc17f00293f6b399389da9d3a981e57783ce1476ee28556348388207e0025e861816ee0c9beadbbdfc92f75edef464862b8f91f0d113e320e7a14f18c3c5d0bd39ef6b635b3ba0b30beefd06dfee200299012f8d395c6fccd17ad332dd637cf524658cc6338df588f298415968f375d66ba6d36ee3885e51bce0fc5a3c1bab850b5ff04c99966e1e8b1f81904063befda55c851288025f2409550970a5f1fd0248ea4a4926a66d695c0e21a6990239e0118cad9f29f65f4c597a9413390928b0e8369d3a73378ada3656578244a6e3fc6b57dd7fca09cb3a36d69779920e1e8cb35fdd4b9262b5f5faa01a29917e16c537", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } diff --git a/yarn-project/noir-contracts/src/examples/schnorr_account_contract.json b/yarn-project/noir-contracts/src/examples/schnorr_account_contract.json index 2e29cb3f7e5..34f71c1ef9f 100644 --- a/yarn-project/noir-contracts/src/examples/schnorr_account_contract.json +++ b/yarn-project/noir-contracts/src/examples/schnorr_account_contract.json @@ -91,7 +91,7 @@ } ], "returnTypes": [], - "bytecode": "edbd07945555b6fd4dedbd4f51a4a224271111115191222711101010909c4552912449ce39678a1c447214949c04111111ef462427111151319341c56fadebebefdf8fd7bd30ccea5ec3c11befecf7ba67bbfa9c5fed9a75ee5af39e33c5c7ec3a9d6cc7a037cab46bdafca5321d7b96efd6a1f9334ddbb51bb4b846e9aacf969b14ef22043190c448492c1425888525b188241695c46292585c124b48e253925852129f96c45292585a12cb48e23392585612cb496279497c56122b48624549ac2489cf49626549ac22895525f17949ac2689d525b18624d694c45a92585b12eb48625d49ac2789f525b181243694c44692f882243696c41725b189243695c46692d85c125b48629c24b694c45692d85a12db48625b497c4912db49627b49ec20891d25b19324be2c899d25b18b247695c46e92d85b12fb48625f49ec2789fd2571802486068aea20511d2caa434475a8a80e13d5e1a23a4254478aea28511d2daa634475aca88e13d5f1a23a4154278aea24518d17d5c9a23a4554a78aea34519d2eaa33447566d4a015a53bb7e9daba7d5cd736cd274f9c1c7fa254febc85f217882b9c2f2e367f6cd3bcf98a362b52306f8182cd0a15892d125bb048c116f98ae4cf1f57a44091c2459b152d9cb7686c81fc71b12d0b16cddf326ff87f624333a848be96850afca522337f3b93bf5224af8ffce844a9bc7ff17ffe25203eadd83f7d6dd3fe51a4c55f00341d02e8600202e2d3cafba7ae6dca3f17c9fb27014d85003a94c080f8b48afce16b8bbfa348d1967f02d06408a0c3ff0140745a055afea16b9bf8af8a14fe83802641001df9cf000a9f56c1df7d6de3ff5d91027f00d00408a0a3ff41407c5a797fd7b58d958ae4fd9d80c641001dfb0f03e2d36a7ed76b1b7db722857f07a0311040c7ff0b80f8b4f289d736f2f714297c1740a320804efc9700f16915feb7d736fcf716292c001a010174f2bf08884fabc8bfbcb6a17fa448917f03681804d0a9ff32203eadbcffe7da06ffc122855afe0b404320804e2b00c4a795f77f5ddbc03f5324df1d800641007dac04109f56be7f5c5bff3f5ba3c0ffe3330082e78c223cf9e35ab6e4338bedfb976afc86a71f04cf270981e72f168ca59f1aa4ca2710446775223a0da9f23104d1a73a119d8454390541744e27a2e3902a2720883ed389e828a4ca3108a2f33a111d8654390241f4b94e440721550e41105dd0764f447745b17d20803e8200fa42e71eba00a9f20504d1973a119d8754f91c82e82b9d88ce41aa7c0641745127a2b3902a9f42107dad13d1454895af2188bed189e84b4895af2088bed588a83be0d27a43207fa773077d03a9f22d640721102d2fdba6735cf3ae6dbac70d5a5eab63e5b81a4d5bb4e93979f2c44988cdf4d7cfef74a26cbdfbf4edd77f4068606850687068486868685868786844686468546874684c686c685c687c684268626852283e343934253435342d343d342334d34724922241b3c4c0d06c519d23aaaf88ea5c517d5554e789ea7c515d20aa0b457591a82e16d525a2ba54549789ea72515d21aa2b45f535515d25aaab45f575517d4354d788ea5a515d27aaeb457583a86e14d54da2ba5954b72444686f3322b4b70561e08953a80ced6d4484f636410045ab0cedad4784f6364000a55419da5b8b08edad83008a5119da7b0311da5b0301749fcad0de6a4468ef7508a0542a437baf21427bab208052ab0cedad4084f6564200a55119da5b8608ed2d87004aab32b4b70411da5b0a01944e65686f1122b4b7180228bdcad0de0244686f2104500695a1bd7988d0de7c08a08c1a437ba1b980d45ee85508a04c1a637ba13980dc5ee81508a0cc2a3bd6893341aa648620caa213510648958c1044f7eb44940e52253d0451569d88d240aaa485207a4027a254902aa92188b2e9441403a9721f04d1833a114543aaa48420caae31b8179a0d21940242e8219d9b283ba4ca431044397422ca06a9f22004d1c33a1165855479008228a74e44592055ee87207a4427a29c902a8f4010e5d2892807a4cac310448f6a44d4037069a15910cab9756ea15c902a8f42b6506ee5d1bd1e90e85e68566876684ee895d0dcd0aba179a1f9a105a185a145a1c5a125a1a5a165a1e5a115a195a1d742ab42ab43af87de08ad09ad0dad0bad0f6d086d0c6d0a6d0e6db94b806fab181eda26aa6f8aea7651dd21aa6f89ea4e517d5b547789ea3ba2ba5b54df15d53da2fa9ea8ee15d5f745759fa87e20aa2151f5a2ba5f543f14d503a2fa91a81e14d543a27a58548f88ea51513d26aac745f5444204f88e23027c90efc726aea832c0771411e0837c3b3671259501bec388001fe4bbb1899f5319e03b8808f041be199bb8b2ca00df0144800ff2cdd8c4555406f8f623027c1f4200555519e00b21027c1e02e8799501be7d8800df071040d55406f8f622027cef4300555719e0db8308f0bd0701544365806f3722c0f72e04504d9501be5d8800df3b1040b55406f87622027c6f4300d55619e0db8108f0bd050154476580ef4d44806f3b04505d9d7deb3a902a752188eae944540b52a53604517d9d886a40aad484206aa01351354895ea10440d7522aa0aa9f23c0451239d882a43aa5481207a4127a24a902acf4110355619e0db0621541142e8459d9ba831a4ca8b10444d74226a04a9f2020451539d881a40aa3484206aa613513d4895fa1044cd75226a06a9d21c82a8854e444d20559a4210c56944d41311e0db0aa1dc52e7166a01a91207d9422d9507f87a62027c5b43db426f86b6877684de0aed0cbd1dda157a27b43bf46e684fe8bdd0ded0fba17da10f42a1900fed0f7d183a10fa2874307428743874247434742c743c74e22e01be936278e894a89e16d58f45f58ca87e22aa6745f553513d27aa9f89ea7951fd5c542f88ea17a2faa5a87e25aa1745f56b51fd4654bf15d5ef44f57b51fd41547f14d54ba27a5954af88ea5551bd26aad745f586a8de4c8800df0d4480ef26c4c687a90cf05d4304f8ae43000d5719e0bb8208f05d85001aa132c0770911e0bb0c0134526580ef074480ef4708a0512a037cdf21027cdf43008d5619e0fb0611e0833c083cf1189501be8b88001fe4750489c7aa0cf07d8908f0415e4690789cca00df0544800ff2729dc4e35506f8ce23027c9057eb249ea032c0770e11e083bc5827f1449501beb388001fe4b53a8927a90cf09d4104f820af3d4d1caf32c0771a11e083bcf434f1649d7deb784895c910445374229a08a932098268aa4e44e321552640104dd389682ca4ca3808a2e93a118d8654190341344327a291902aa3208866ea44341c52650404d12c9501be531042c3208466ebdc4498870dcd86209aa313d10c4895991044afe844340d52653a04d15c9d88a640aa4c85207a5527a2b9902a9807edcfd389680ea40ae651fbf33522423c73397412427981ce2d340f5205f3be8f05ca037cf761027c2743a742a7431f87ce843e099d0d7d1a3a17fa2c743ef479e842e88bd097a1af4217435f87be097d1bfa2ef47de887d08fa14ba1cba12ba1aba16ba1eba11ba19b7709f0dd12c3433f89eacfa2fa8ba8de16d55f2595ae48962364d9c8b2956527cb812c47ca7262598e92e524b29c549693c97272594e21cbd1b29c52966364f93e594e25cba965398d2ca795e574b29c5e9633c872c60488f6d17f2920db47e706b1f8b73586fbe8a70a48f7d10f1f826897c6781ffdda00f27df4db0541f48ec6801ff91220e147f60541b45b63c48f8c1f90f1a3bf0f1044ef6a0cf9d15f5640ca8ffe004310edd118f3a35b1740ce8fee702088ded318f4a37b4340d28f6e212188f66a8cfad1cd3720eb47f7e81044ef6b0cfbd1a71b40da8f3e044110edd318f7a38f8f80bc1f7dca8420fa4063e08f3e9f03127ff4311e8228a431f2470d1040e68ffa2410445e65e8ef3622f4f72b04d07e95a1bf9f11a1bf5f20803ed4d9ebde0fa9827902f6019d8842902a9867607fa413d13e4815cc53b00fea44b4175205f31cec433a11ed8154c13c09fbb04e44bb215530cfc23ea213d12e4815ccd3b08faa0cfdfd042184791cf6319d9be828a40ae6e544c775223a0ca982793dd1099d880e42aa605e50745227a203902a9857149dd2890893b53a0541745a27a2e3902a9897ed7dac11512a44e8ef1684f2199d5be834a40ae60ba2679487fe5261427fb7423f857e0efd12ba1dfa95babdd4aaa5b638f5b4697e40cd7f1ab4d094842652344ea2d11dcddd68c649034a1a06d32497a6e634f2f611a97c446a1f91c647a4f511e97c447a1f91c1476494e3803e22931c39ca2ccb5964f97e59ce2acb0fc87236597e5096b3cbf243b29c43961f96e59cb2fc882ce792e5476539b72c3f26cb8fcbf213b29c47969f94e5bcb21c2bcbf96439bf2c1790e582b25c48960bcb7211592e9a20a1c02290506051c89f805f7486020b4142818521886eeb0c05168084020b4210fdaa3314980f120acc8f401495486728302f2414180b4114a133149807120a7c1282c8e80c053e0e09053e014164758602734342818f4110399da1c05c9050e0a3104481ce50604e4828f01108a2489da1c01c9050e0c3104489758602b34342810f411045e90c05668384021f84204aa23114481d26402a901a5110444935c602a98507c80552a70f822899ca7e7854524815c89725a292eb441405a902f9b244540a9d88222155205f96888ad689c841aa40be2c119552272203a902f9b244548c4e44892055205f9688ba4fe784f736a40ae4eb1251a934060369f2094104f9c244546a9dbf68a92055205f688f4aa313510ca40ae40bed516975228a8654817ca13d2a9d4e44c92155205f688f4aaf13513a4815c8235aa232e84494065205f28896a88c1a1141fe1245648260cea4730f658054813c2c0a822821a381a921d140da5074334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b78fc8e723f2fb88023ea2a08f28e4230afb88223ea2e8dd0282c5e4f85171592e21cb4fc97249597e5a964bc97269592e23cbcfc87259592e27cbe565f95959ae20cb1565b9922c3f27cb9565b98a2c5795e5e765b99a2c5797e51ab25c53966bc9726d59ae23cb7565b99e2cd74f9080603d4840b03ee40f41519d01c13a9080605d08a2623a0382b52001c1da1044c57506046b4002823521884ae80c0856830404ab43103da53320581512107c1e82a8a4ce8060654840b00a04d1d33a0382952001c1e720884ae90c08568004042b421095d619102c0f09083e0b4154466740b02c2420580e82e8199d01c1329080e0331044657506044b410282a52188cae90c08968404049f86202aaf3320580212107c0a82e8599d5df1f2902a98bf681574222a0ba982f98b565127a232902a98bf689574222a05a982f98bf69c4e44252155307fd12aeb4454025205f317ad8a4e44c520558a431055d519102c0e4104794442d4f33a77515548154cd7b19a4e44952155305dc7ea3a11558254c1741d6be84454015205d375aca913510d4815cc1cad964e44d520553073b4da1a11a581040431f7567574eea15a902a98897e1de501c134a0806031ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8db47d4f011357d442d1f51db47d4f111757d443d1f51ff6e01c10672fca8a12c3792e51764b9b12cbf28cb4d64b9a92c3793e5e6b2dc4296e364b9a52cb792e5d6b2dc4696dbcaf24bb2dc4e96dbcb720759ee28cb9d64f96559ee2ccb5d64b9ab2c7793e5eeb2dc43967bca72af040908f68404047b41fe1074d31910ec0e0908f68020eaae3320d8151210ec0641d4436740b0332420d80582a8a7ce8060274840f06508a25e3a03821d2001c18e1044bd750604db410282ed2188fae80c08b68504045f8220eaab3320d81a12106c0341d44f6740b0252420d80a82a8bfce80600b4840300e826880ce8060334840b03904d1409d01c1269080605308a2413a03828d2101c117218806eb0c08368204045f80201aa2b32b3e1852650804d1509d880642aa0c82201aa613517f4895011044c37522ea0ba9d20f8268844e44bd2155fa40108dd489a827a40aa6773d4a27a2ee902a98def5689d01c186104498def5189dbb6834a4ca1808a2b13a118d8454190541344e27a2e1902a232088c6eb44341452651804d1049d88c643aa4c80209aa813d1584895711044933422823c1c31a2010473bcce3d3411526512640fc52b0f08a60505041bd0cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3ea2b38fe8e223bafa886e3ea2bb8fe8e1237afa885e770b08f696e3477d64b9af2cf793e5feb23c409607caf220591e2ccb436479a82c0f93e5e1b23c429647caf228591e2dcb636479ac2c8f93e5f1b23c419627caf224598e97e5c9b23c4596a7caf234599e2ecb336479668204046740028233217f08d6e80c084e830404a74310add519109c0209084e85205aa73320180f09084e86205aaf332038111210c4dc946ed019101c0f0908623e1e6fd419101c0b0908623e1e6fd219101c0d0908621abe9b750604474202829886ef169d01c1e1908020a6e1bb556740702824208869f86ed319101c0c09086242396fea0c080e84040431a19ced3a0382fd2101414c286787ce80605f48401013ca794b67577c07a4ca5b10443b75227a1352653b04d1db3a116d8554d90641b44b27a2cd902a5b2088ded1896823a4ca2608a2dd3a11ad8754d90041f4ae4e446b2155d64110edd11910ec0341b40682e83d9dbb680fa4ca7b10447b7522da0da9f22e04d1fb3a11ed8254790782689f4e443b2155de8620fa4027a27d902a1f4010857422da0ba9f23e0491d788281d242088f90acf7e9d7b2804a9e2217b68bff280603a5040b037dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced2338e6e423a6f888a93e629a8f98ee2366f88899770b08ce92e347b365798e2cbf22cb7365f955599e27cbf36579812c2f94e545b2bc589697c8f252595e26cbcb6579852caf94e5d76479952caf96e5d765f90d595e23cb6b65799d2caf97e50db2bc519637c9f26659de922001c1cd908020a655f7adce80e046484010d3aafb4e6740703d24208869d57daf3320b8161210c4b4ea7ed019107c031210c4b4ea7ed419105c0d0908be0e4174496740f0354840701504d1659d01c1159080e04a08a22b3a0382cb2001c1e5104457750604974002824b2188aee90c082e8204041743105dd719105c0009082e8420baa13320380f12109c0f4174536740702e2420f82a04d12d9d01c1399080e02b10443fe9ec8adf8254f90982e8679d886e40aadc8420fa4527a26b902ad721886eeb44740552e52a04d1af3a115d8254b98c409424914e443f40aafc084114a113d177902adf4310199d01c1d91044df42105995bb28898154b110444e27a244902a111044814e2fba0da9f22b0451a44e443f43aafc02419458e72f5a24a44a6208a2289d881ca44a0041944423a2f49080e02c08e6a43af75014a44a12c81e4aaa3c20981e14109c4537a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7ffb88b53e629d8f58ef2336f8888d3e62938fd8ec23b6dc2d20b8558e1f6d93e5376579bb2cef90e5b76479a72cbf2dcbbb64f91d59de2dcbefcaf21e597e4f96f7caf2fbb2bc4f963f90e5902c7b59de2fcb1fcaf20159fe48960fcaf221593e2ccb4764f9a82c1f93e5e3b27c22410282c72101c113903f048fea0c081e8504048f4110e5d619103c0c09081e81207a4c6740f0202420780882e8719d01c1039080e04710444fe80c08ee8704043f8420caa333201882040421df7d4af2a4ce80e03e484010f22dcc2479750604f7420282906f612689d51910dc030908429e2b90249fce80e06e484010f25c8124f97506047741028290e70a2429a03320b8131210843c572049419d01c11d908020e4d96f490ae90c08be090908429efd96a4b0ceae78214895c210444574222a00a9521082a8a84e44f92055f2431015d389282fa44a2c0451719d88f240aa3c0941544227a2c721559e80207a4a27a2dc902a8f411095d41910dc0641f42804d1d33a7751494895a721884ae944540252e52908a2d23a11158354290e41544627a222902a4521889ed189a80ca4ca3310446575222a05a9521a82a89c464419200141c893e29394d7b987ca42aa9483eca1f2ca0382194001c1ad74334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b78f38e8230ef988c33ee2888f38ea238ef988e33ee2c4dd028227e5f8d129593e2dcb1fcbf21959fe4496cfcaf2a7b27c4e963f93e5f3b2fcb92c5f90e52f64f94b59fe4a962fcaf2d7b2fc8d2c7f2bcbdfc9f2f7b2fc832cff28cb9764f9b22c5f91e5abb27c4d96afcbf20d59be992001c11b908020e41be149e2740604af410282906f842769a9332078051210847c233c492b9d01c14b908020e61be1ad7506047f80040431df086fa33320f81d242088f946785b9d01c16f200141cc37c25fd21910bc0809087e0d41d44e6740f04b4840f02b08a2f63a0382172001c12f20883ae80c089e8704043f8720eaa83320780e1210fc0c82a893ce80e0594840f05308a297750604cf4002829f401075d619103c0d09087e0c41d4456757bc33a44a1708a2ae3a11758254791982a89b4e441d20553a421075d789a81da44a7b08a21e3a11b58554790982a8a74e44ad2155da4010f5d289a825a44a2b08a2de3a0382a72088e22088fae8dc4590972926e90341d45727a29e902abd2088fae944d41d52a50704517f9d88ba42aa7483201aa013517f4895011044037522ea0ba9d20f8268904644192101c19310cc8375eea181902a83207b68b0f28060465040f024dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced232ef988cb3ee28a8fb8ea23aef988eb3ee2868fb879b780e02d397ef4932cff2ccbbfc8f26d59fe55944d22598e906523cb56969d2c07b21c29cb8965394a9693c87252594e26cbc96539852c47cb724a598e91e5fb6439952ca796e534b29c5696d3c9727a59ce20cb19132220683220028206f21737c97c950141930e11103490c71a2759a0322068d2200282262d04d142950141930a111034a9218816a90c089a184440d0dc0741b4586540d044230282262504d112950141931c11103429208896aa0c089aa48880a0490641b44c6540d04421028206f388fde52a0382261211103498977dac501910340e11103498977dac541910340611103498d757bda63220681221028206f3faaa553a0382b7210141ccebab56eb0c08fe0c0908625e5ff5baceaef86a4895d72188ded089e83548955510446b74225a01a9b2128268ad4e44cb2055964310add3896809a4ca5208a2f53a112d8254590c41b44127a205902a0b218836ea0c08fe0441341f826893ce5db41152651304d1669d88d643aa6c8020daa213d15a48957510445b75227a0352650d04d1369d8830cf6ddb0641f4a64e449b2155b640106dd78828132420780b827987ce3df426a40ae67d133b94070433810282b7e86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f6f527993da9b34dea4f5269d37e9bdc9e04dc6bb04044d26397e945996b3c8f2fdb29c55961f90e56cb2fca02c6797e5876439872c3f2ccb3965f91159ce25cb8fca726e597e4c961f97e52764398f2c3f29cb7965395696f3c9727e592e20cb0565b9902c1796e522b25c3441028245200141cc43ad3fd619102c040908625e3c74466740b00024208879f1d0273a0382f9200141cc8b87ceea0c08e6850404312f1efa546740300f24208879f1d0399d01c1c7210141cc8b873ed31910cc0d0908625e3c745e6740301724208879f1d0e73a0382392101c14720882ee80c08e68004041f8620fa426740303b2420f81004d1973a0382d92001c1072188be5219103459110141f30004d1459501419305111034f743107dadb32b7e115205f364e56f7422fa125205f364e56f7522ba00a98279b2f2773a119d8754c13c59f97b9d88ce41aa609eacfc834e44672155304f56fe5127a233902a98272b5f52191034992188304f56beac73175d8254c1bcfde68a4e443f40aa60de7e735527a2ef2055306fbfb9a613d137902a98b7df5cd789e81aa40ae67d6e377422ba02a982799fdb4d8d8832232ecd648260bea5730fdd8054c1bc59f296f28060664c40d064a29b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbdc9e74d7e6f0a7853d09b42de14f6a6883745ef16102c26c78f8acb7209597e4a964bcaf2d3b25c4a964bcb7219597e4696cbca7239592e2fcbcfca720559ae28cb9564f93959ae2ccb5564b9aa2c3f2fcbd564b9ba2cd790e59ab25c4b966bcb721d59ae2bcbf564b97e820404eb410282f5117f089266d41910ac030908d68520caa43320580b1210ac0d4194596740b0062420581382288bce8060354840b03a04d1fd3a0382552101c1e72188b2ea0c0856860404ab40103da03320580912107c0e82289bce8060054840b02204d1833a0382e52101c1672188b2eb0c0896850404cb41103da43320580612107c06822887ce8060294840b03404d1c33a0382252101c1a7218872ea0c08968004049f82207a4465573c694e481548e43d692e9d887240aa4022ef491fd589283ba40a24f29e34b74e44d920552091f7a48fe9449415520512794ffab84e445920552091f7a44fe84404196227850cd493e6d119102c0e4104798752d22775eea23c902a90af2527cdab13d1e3902a90af25278dd5892837a40ae46bc949f3e944940b5205f2b5e4a4f97522ca07a90279d046d2023a11e58554813c682369418d88b2400282c520980be9dc43052055208ffc81204ac88060165040b018dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced4d0d6f6a7a53cb9bdaded4f1a6ae37f5bca97fb7806003397ed450961bc9f20bb2dc58965f94e526b2dc54969bc97273596e21cb71b2dc52965bc9726b596e23cb6d65f925596e27cbed65b9832c7794e54eb2fcb22c7796e52eb2dc5596bbc9727759ee21cb3d65b9578204047b420282bd207f086aeb0c08768704047b4010d5d11910ec0a0908768320aaab3320d8191210ec0241544f6740b0132420f83204517d9d01c10e9080604708a2063a0382ed2001c1f610440d750604db4202822f411035d219106c0d0908b681207a416740b0252420d80a82a8b1ce80600b4840300e82e8459d01c1669080607308a2263a03824d2001c1a610444d7506041b4302822f421035d319106c040908be0041d45c6757bc19a40ac68b5ae844d4045205e345713a11358654c178514b9d881a41aa60bca8954e440d20551a4210b5d689a81ea40ae6cbed6d7422aa03a982f9727b5b9d01c1861044982fb7bfa47317b58554c1f48bdae944d41a5205d32f6aaf13514b48154cbfa8834e442d205530fda28e3a11758054c14c403ae944d40e5205330179592322c877420ce60ebdb3ce3dd4095205338bedac3c20783f2820d8806e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef6a6b3375dbce9ea4d376fba7bd3c39b9edef4ba5b40b0b71c3fea23cb7d65b99f2cf797e501b23c509607c9f260591e22cb436579982c0f97e511b23c529647c9f268591e23cb6365799c2c8f97e509b23c519627c972bc2c4f96e529b23c5596a7c9f274599e21cb33132420380312109c09f94330496740701a2420381d82285e6740700a242038158268b2ce80603c2420381982688ace80e0444840701204d1549d01c1f19080e00408a2693a0382632101c1711044d37506044743028263208866e80c088e840404474110cdd419101c0e09088e80209aa53320381412101c0641345b674070302420380482688ece80e0404840701004d12b3a0382fd2101c101104473750604fb420282fd20885ed5d9159f0ba9f22a04d13c9d88e640aabc0241345f27a259902ab3218816e84434035205d3755ca813d13448154cd771914e44532055305dc7c53a11c543aa60ba8e4b740604fb401061ba8e4b75eea225902a4b218896e944b40852653104d1729d881640aa2c84205aa113d13c4895f910442b75225a01a9b21282e8359d889641aa2c87205aa51151564840b03704f36a9d7be835489555903db45a7940302b2820d89b6e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef686634ede4cf166aa37d3bc99eecd0c6f66de2d20384b8e1fcd96e539b2fc8a2ccf95e55765799e2ccf97e505b2bc509617c9f262595e22cb4b6579992c2f97e515b2bc52965f93e555b2bc5a965f97e53764798d2caf95e575b2bc5e9637c8f24659de24cb9b65794b820404374302825b207f08bcce80e0464840701304d17e9d01c1f59080e00608a20f750604d7420282eb20880ee80c08be010908ae8120fa48674070352420f83a04d1419d01c1d7200141cc479b433a03822b2001414c93e5b0ce80e032484010d36439a23320b8041210c48c0d8eea0c082e820404316383633a03820b200141ccd8e0b8ce80e03c484010333638a1332038171210c444bb4eea0c08ce81040431d1ae533abbe22721554e41109dd689e838a4ca0908a28f75223a0aa9720c82e88c4e448721558e40107da213d14148954310446775223a00a9f21104d1a73a11ed8754f91082e89cce80e06c08220f41f499ce5d740e52e53308a2f33a119d8554f91482e8739d88ce40aa7c0241744127a2d3902a1f43107da113d10548952f2088bed489e83ca4cae710445f6944f400242088f922d8459d7be84b4895af207be8a2f280e003a080e02cba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8db9bb5deacf366bd371bbcd9e8cd266f367bb3e56e01c1ad72fc689b2cbf29cbdb6579872cbf25cb3b65f96d59de25cbefc8f26e597e5796f7c8f27bb2bc5796df97e57db2fc812c8764d9cbf27e59fe50960fc8f247b27c50960fc9f261593e22cb4765f9982c1f97e5130912103c0e0908421abec992e80c081e850404210ddf64497506040f43028290866fb2643a03820721014148c33759729d01c103908020a4e19b2c85ce80e07e484010d2f04d16ad332018820404210ddf6429750604f74102821f4010c5e80c08ee850404df8720ba4f6740700f2420f81e04512a9d01c1dd9080e0bb1044a975060477410282ef4010a5d11910dc090908be0d419456674070072420f81604513a9d01c1372101c1ed1044e95576c593a58354490f41944127a234902a69218832ea44940a5225350451269d88622055ee8320caac135134a44a4a08a22c3a1125875449014174bf4e4449215592411065d51910dc0641940482e8019dbb282ba40a2496912c9b4e4459205520efbe4cf6a04e4499205532431065d7892803a44a4608a2877422ca0ea9f21004510e9d88b241aa3c0841f4b04644d92001c1ad10cc3975eea11c902a0f43f6504ee501c16ca080e056ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8db9b83de1cf2e6b03747bc39eacd316f8e7b73e26e01c19372fce8942c9f96e58f65f98c2c7f22cb6765f953593e27cb9fc9f27959fe5c962fc8f217b2fca52c7f25cb1765f96b59fe4696bf95e5ef64f97b59fe41967f94e54bb27c5996afc8f25559be26cbd765f9862cdf4c9080e00d4840f026e40f41399d01c16b9080e07508a2f23a0382572001c1ab1044cfea0c085e8204042f431055d01910fc011210fc1182a8a2ce80e0779080e0f7104495740604bf810404bf85207a4e6740f0222420f8350451659d01c12f210141c837e89255d11910bc00090842becb9bacaace80e079484010f25dde64cfeb0c089e830404214fa748564d6740f02c242008793a45b2ea3a038267200141c8d32992d5d019103c0d0908429e4e91aca6ceae780d48959a1044b57422aa06a9521d82a8b64e445521559e8720aaa313516548952a1044757522aa04a9f21c04513d9d882a40aa548420aaaf13517948956721881ae80c089e82202a0741d450e72e6a00a9d21082a8914e44f52055ea4310bda013511d4895ba10448d7522aa05a9521b82e8459d881a43aabc0841d44427a246902a2f401035d58808927d3490f70d246ba6730f358154690ad943cd9407041f0405044fd2cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde5cf2e6b23757bcb9eacd356fae7b73c39b9b770b08de92e3473fc9f2cfb2fc8b2cdf96e55f45d92692e5085936b26c65d9c97220cb91b29c5896a36439892c2795e564b29c5c9653c872b42ca794e51859be4f9653c9726a594e23cb6965399d2ca797e50cb29c31210282360322206831df5919a4322068d321028216f35c81c12a0382360d22206831cf1518a23220685321028216f35c81a12a038236061110b498e70a0c531910b4d18880a0c53c5760b8ca80a04d8e08085acc730546a80c08daa48880a0c53c5760a4ca80a08d4204042de6b902a35406046d242220681343108d561910b40e1110b40104d1189501416b1001416b2188c6aa0c08da448880a08d80201aa73320781b1210fc158268bcce80e0cf9080e02f1044137476c5c743aa4c80209aa813d15848957110449374221a0da9320682285e27a291902aa3208826eb44341c52650404d1149d888642aa0c83209aaa13d1604895211044d37406047f82201a0441345de72e9a06a9321d8268864e44532055a64210cdd489281e52653204d12c9d882642aa4c82209aad1311e4c5aec9664310cdd1896806a4ca4c08a2573422ca0e0908de82609eab730fcd81547905b287e62a0f08660705046fd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfdea6f236b5b769bc4deb6d3a6fd37b9bc1db8c770908da4c72fc28b32c6791e5fb6539ab2c3f20cbd964f94159ce2ecb0fc9720e597e589673caf223b29c4b961f95e5dcb2fc982c3f2ecb4fc8721e597e5296f3ca72ac2ce793e5fcb25c40960bca7221592e2ccb4564b9688204048b40028245217f08b6eb0c08168204040b4310edd019102c0009081684207a4b6740301f2420981f8268a7ce80605e4840301682e86d9d01c13c9080e0931044bb7406041f8704049f80207a47674030372420f81804d16e9d01c15c9080e0a31044efea0c08e68404041f8120daa3332098031210c4bca8e13d9d01c1ec908020e695317b750604b34102829857c6bcaf322068b322028216f312b47d2a0382360b222068312f41fb4067577c1fa4ca071044219d88f642aabc0f41e47522da03a9f21e04d17e9d887643aabc0b41f4a14e44bb2055de81203aa013d14e4895b721883ed2896807a4ca5b1044075506046d6608a2ed10448774eea283902a8720880eeb44740052e52308a2233a11ed8754f91082e8a84e442148150f41744c27a2a3902ac720888eeb44741852e50804d1098d8820dd428b7965fa499d7be838a4ca09c81e3aa93c20f81026206833d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfdee6f336bfb705bc2de86d216f0b7b5bc4dba2770b081693e347c565b9842c3f25cb2565f969592e25cba565b98c2c3f23cb6565b99c2c9797e56765b9822c5794e54ab2fc9c2c5796e52ab25c55969f97e56ab25c5d966bc8724d59ae25cbb565b98e2cd795e57ab25c3f410282f5200141cca3d16fea0c08d6810404318f46bfa53320580b1210c43c1afd279d01c11a908020e6f5553feb0c085683040431afaffa456740b02a242088797dd56d9d01c1ca908020e6f555bfea0c085682040421afaf4a9e486740b002242008797d55f2089d01c1f2908020e4f555c98dce806059484010f2faaae4566740b00c2420f80c0491d319102c0509089686200a7406044b4202824f431045ea0c08968004049f82204aacb22b9e3c125205f24cdce4513a11394815c833719327d189c840aa409e899b3ca94e4489205520cfc44d9e4ce784ee36a40ae499b8c993eb44f433a40ae499b8c953e8448479cacd4f1044d13a0382c521886e4210a5d469d7d1902a90f796248fd1892839a40ae4bd25c9efd3892829a40ae4bd25c953e9441405a902796f49f2d43a11a5825481bc892b791a9d88622055206fe24a9e5623a21c9080603108e6743af7501a4815c83b012188123220980314102c4637a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7b5bc3db9aded6f2b6b6b775bcadeb6d3d6febdf2d20d8408e1f3594e546b2fc822c3796e51765b9892c3795e566b2dc5c965bc8729c2cb794e556b2dc5a96dbc8725b597e4996dbc9727b59ee20cb1d65b9932cbf2ccb9d65b98b2c7795e56eb2dc5d967bc8724f59ee952001c19e9080602fc81f82823a0382dd2101c11e104485740604bb420282dd20880aeb0c0876860404bb401015d11910ec040908be0c4154546740b0032420d81182a898ce80603b4840b03d0451719d01c1b69080e04b1044257406045b4302826d20889ed219106c090908b682202aa93320d80212108c83207a5a6740b0192420d81c82a894ce8060134840b0290451699d01c1c69080e08b1044657406041b4102822f40103da3b32b5e06520513562eab13512948154c58b99c4e442521553061e5f23a11958054c184959fd58908337e2c0e41544127a222902a90b7df24afa81351214815c8db6f9257d219106c08410479fb4df2e774eea24a902a982f9456d689a802a40ae60ba55574222a0fa982f94269559d88ca42aa60be50fabc4e44552155208f48485e4d27a2ca902a90472424afae1111e4952cb60104730d9d7ba81aa40ae4612d10440919107c1814106c4037a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7bdbd9db2ede76f5b69bb7ddbdede16d4f6f7bdd2d20d85b8e1ff591e5beb2dc4f96fbcbf200591e28cb836479b02c0f91e5a1b23c4c9687cbf208591e29cba36479b42c8f91e5b1b23c4e96c7cbf204599e28cb9364395e9627cbf214599e2acbd36479ba2ccf90e5990912109c010908ce84fc2178596740701a2420381d82a8b3ce80e0144840702a0451179d01c178484070320451579d01c1899080e02408a26e3a0382e32101c1091044dd750604c7420282e320887ae80c088e860404c74010f5d419101c0909088e8220eaa53320381c12101c0141d45b674070282420380c82a88fce80e0604840700804515f9d01c1819080e02008a27e3a0382fd2101c1011044fd750604fb420282fd208806e8ec8af78754c1eca2813a11f58554c1eca2413a11f58654e90341345827a29e902a98af250fd189a83ba40ae66bc9437522ea0aa982f95af2309d883a43aa60be963c5c6740b00f0411e66bc92374eea2e1902a984ffa2375221a0aa982f9a43f4a27a2c1902a984ffaa375221a08a982f9a43f4627a2d1902a98def5589d884642aa607ad7e33422ca090908623ee78dd7b987c642aa60a668e395070473820282bde96694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f6f39e6e4ed146fa77a3bcddbe9decef076e6dd0282b3e4f8d16c599e23cbafc8f25c597e5596e7c9f27c595e20cb0b6579912c2f96e525b2bc549697c9f272595e21cb2b65f935595e25cbab65f975597e4396d7c8f25a595e27cbeb6579832c6f94e54db2bc5996b724484070332420b805f2876095ce80e0464840701304d16a9d01c1f59080e00608a2d7750604d7420282eb2088ded019107c0312105c0341b446674070352420f83a04d15a9d01c1d72001c1551044eb740604574002822b2188d6eb0c082e8304049743106dd019105c0209082e8520daa83320b80812105c0c41b449674070012420b8108268b3ce80e03c4840703e04d1169d01c1b99080e0ab10445b750604e7400282af40106dd3d915df0aa9b20d82e84d9d883643aa60fa45db7522da08a982e917edd089683da40aa65ff4964e446b215530fda29d3a11bd01a982e917bdad13d16a48154cbf6897ce80e06c08224cbfe81d9dbb6817a4ca3b1044bb7522da09a9f23604d1bb3a11ed8054790b82688f4e446f42aa6c87207a4f27a23d902aef4110edd5896837a4cabb1044ef6b44f4082420380b82799fce3db41752e57dc81edaa73c20f8082820388b6e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef676adb7ebbc5defed066f377abbc9dbcdde6eb95b4070ab1c3fda26cb6fcaf27659de21cb6fc9f24e597e5b9677c9f23bb2bc5b96df95e53db2fc9e2cef95e5f765799f2c7f20cb2159f6b2bc5f963f94e503b2fc912c1f94e543b27c58968fc8f251593e26cbc765f9448204048f43028227207f08bed219103c0a09081e8320baa83320781812103c0241f4b5ce80e0414840f01004d1373a0382072001c18f2088bed51910dc0f09087e0841f49dce8060081210f41044dfeb0c08ee8304043f8020fa416740702f242088f980fca3ce80e01e484010d3aabba43320b81b1210c4b4ea2eeb0c08ee82040431c3a72b3a03823b210141ccf0e9aace80e00e484010337cbaa63320f826242088193e5dd7d915bf06a9721d82e8864e44572055ae4210ddd489e812a4ca6508a25b3a11fd00a9f22304d14f3a117d07a9f23d04d1cf3a117d03a9f22d04d12f3a115d8454f91a82e8b6ce80e03608a2af20887ed5b98b6e43aafc8a409422914e443f43aafc024114a113d12d48959f20888c4e443720556e4210599588521848150b41e474224a04a9120141146844940b1210847c9d3045a4ce3de4205502c81e8a541e10cc050a086ea59b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbd3de8ed216f0f7b7bc4dba3de1ef3f6b8b727ee16103c29c78f4ec9f26959fe5896cfc8f227b27c56963f95e573b2fc992c9f97e5cf65f9822c7f21cb5fcaf257b27c5196bf96e56f64f95b59fe4e96bf97e51f64f94759be24cb9765f98a2c5f95e56bb27c5d966fc8f2cd040908de80040431b7a40feb0c085e8304042163831439750604af40028290b1418a477406042f41028290b1418a5c3a03823f40028290b1418a47750604bf83040421638314b9750604bf810404216383148fe90c085e840404216383148feb0c087e09090842c606299ed01910bc0009087e014194476740f03c2420f83904d1933a0382e72001c1cf2088f2ea0c089e8504043f85208ad519103c0309087e0241944f6740f0342420f83104517e9d5df17c902af921880ae844941752251682a8a04e447920559e84202aa413d1e3902a4f401015d6892837a4ca631044457422ca05a9f2280451519d887242aa409eb893a298ce80e02908a28721888aebdc45c520558a431095d089a808a44a5108a2a774222a04a9521882a8a44e440520550a42103dad1351494895a721884ae944540252e52908a2d21a11416ef9ec4908e6323af750294895d2903d54467940f0515040f024dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fceded256f2f7b7bc5dbabde5ef3f6bab737bcbd79b780e02d397ef4932cff2ccbbfc8f26d59fe55945d22598e906523cb56969d2c07b21c29cb8965394a9693c87252594e26cbc96539852c47cb724a598e91e5fb6439952ca796e534b29c5696d3c9727a59ce20cb19132220e8322002822e23e40f4153950141970e111074e921889aa90c08ba348880a04b0b41d45c6540d0a54204045d6a08a2162a03822e06111074f74110c5a90c08ba684440d0a584206aa93220e8922302822e0504512b9501419714111074c920885aab0c08ba284440d02581206aa33220e822110141971882a8adca80a0738880a0c37c0ff3259501416710014187f946783b9501419708111074986f84b7d71910bc0d0908629e71d2416740f067484010f38c938e3abbe21d20553a421075d289a81da44a7b08a29775226a0ba9f2120451679d885a43aab48120eaa213514b48955610445d75226a01a9120741d44d27a266902acd2188baeb0c08fe0441d41482a887ce5dd41d52a50704514f9d88ba42aa748320eaa513516748952e1044bd7522ea04a9f23204511f9d887a43aaf48120eaab13514f48955e1044fd3422ca0d0908429e889aa2bfce3dd41752a51f640ff5571e10cc0d0a08dea29b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbd4be55d6aefd27897d6bb74dea5f72e837719ef12107499e4f8516659ce22cbf7cb7256597e4096b3c9f283b29c5d961f92e51cb2fcb02ce794e5476439972c3f2acbb965f931597e5c969f90e53cb2fca42ce795e55859ce27cbf965b9802c1794e542b25c58968bc872d10409081681040431df7c7a456740b010242088f9e6d35c9d01c102908020e69b4fafea0c08e6830404314fa798a7332098171210c43c9d62bece80601e484010f3748a053a03828f43028298a7532cd41910cc0d0908629e4eb14867403017242088793ac5629d01c19c908020e6e9144b7406047340028298a7532cd51910cc0e09083e0441b44c6740301b2420f82004d17295014197151110740f4010ad5019107459100141773f04d14a9d5df115902a2b21885ed3896819a4ca7208a2553a112d8154590a41b45a27a245902a8b21885ed7896801a4ca4208a23774229a07a9321f82688d4e447321555e85205aab3220e8324310bd0241b44ee72e5a0ba9b20e8268bd4e446f40aaac8120daa013d16a4895d7218836ea44f41aa4ca2a08a24d3a116d8454d90441b45927a2f5902a1b2088b6684404995cb84c10cc5b75eea1cd902a5b207b68abf280e0639880a0cb4437a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7b97cfbbfcde15f0aea07785bc2bec5d11ef8ade2d20584c8e1f1597e512b2fc942c9794e5a765b9942c9796e532b2fc8c2c9795e572b25c5e969f95e50ab25c51962bc9f273b25c5996abc87255597e5e96abc9727559ae21cb3565b9962cd796e53ab25c5796ebc972fd040908d6830404eb43fe109cd01910ac030908d685203aa93320580b1210ac0d41744a6740b0062420581382e8b4ce8060354840b03a04d1c73a0382552101c1e72188cee80c0856860404ab40107da23320580912107c0e82e8acce8060054840b02204d1a73a0382e52101c1672188cee90c0896850404cb41107da63320580612107c0682e8bcce806029484010f3ba8fcf7506044b42028298170f5dd019102c010908625e3cf485ceaef80548952f2088bed489e83ca4cae710445fe944740e52e53308a28b3a119d8554f91482e86b9d88ce40aa7c0241f48d4e44a721553e8620fa562722cc6bf04e41107da73320581c82e80404d1f73a77d177902adf4310fda013d137902adf4210fda813d1454895af21882ee944f425a4ca571044977522ba04a9721982e88a4e443f40aafc0841745523a2c72101c16210ccd774eea12b902a57217be89af280e0e3a0806031ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbbb1aded5f4ae9677b5bdabe35d5defea7957ff6e01c10672fca8a12c3792e51764b9b12cbf28cb4d64b9a92c3793e5e6b2dc4296e364b9a52cb792e5d6b2dc4696dbcaf24bb2dc4e96dbcb720759ee28cb9d64f96559ee2ccb5d64b9ab2c7793e5eeb2dc43967bca72af040908f6840404218f238e4eab3320d81d1210843c603f3a9dce806057484010f280fde8f43a03829d210141c803f6a333e80c0876820404210fd88fcea83320d801121084bc042d3a93ce80603b484010f212b4e8cc3a03826d210141c84bd0a2b3e80c08b6860404212f418bbe5f6740b02524200879095a74569d01c116908020e42568d10fe80c0836830404212f418bcea63320d804121084bc042dfa419d01c1c69080e08b1044d97506041b4102822f40103da4b22b1e9d1d5205f234d3e81c3a11658354813ccd34fa619d88b242aa409e661a9d5327a22c902a90a799463fa21311e4f924d199218872e944940152252304d1a33a11a58354490f41945b6740b02104515a08a2c774eea2dc902a90e736453fae13512e4815c81b27a29fd0892827a40ae48d13d1797422ca01a90279e344f4933a11e5815481bc43293aaf4e448f43aa40dea1141dab1111e4d25c0308e67c3af7505e4815c8dbdc2088123220f8042820d8806e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef6aeb3775dbcebea5d37efba7bd7c3bb9edef5ba5b40b0b71c3fea23cb7d65b99f2cf797e501b23c509607c9f260591e22cb436579982c0f97e511b23c529647c9f268591e23cb6365799c2c8f97e509b23c519627c972bc2c4f96e529b23c5596a7c9f274599e21cb33132420380312109c09f943505d6740701a2420381d82a886ce80e0144840702a04514d9d01c1784840703204512d9d01c1899080e02408a2da3a0382e32101c109104475740604c7420282e32088eaea0c088e860404c74010d5d319101c0909088e8220aaaf3320381c12101c0141d440674070282420380c82a8a1ce80e060484070080451239d01c1819080e02008a217740604fb4302820320881aeb0c08f6850404fb4110bda8b32bde18520513336da213512348154cccb4a94e4498c1514308a2663a11d5835481bcb724bab94e4475205520ef2d896ea113512d4815c87b4ba2e37422aa01a902796f49744b9d01c13e104490f79644b7d2b98b5a42aa60be0ad85a27a216902a98af02b6d189a819a40ae6ab806d75226a02a982f92ae04b3a11b58554c17cb9bd9d4e44ad2155305f6e6faf11511e4840b0370473079d7ba81da40ae6311b1d940704f3800282bde96694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36fef38e6e4dd14efa67a37cdbbe9decdf06ee6dd0282b3e4f8d16c599e23cbafc8f25c597e5596e7c9f27c595e20cb0b6579912c2f96e525b2bc549697c9f272595e21cb2b65f935595e25cbab65f975597e4396d7c8f25a595e27cbeb6579832c6f94e54db2bc5996b7244840703324200879d77cf4389d01c18d9080e02608a2f13a0382eb2101c10d104413740604d7420282eb208826ea0c08be010908ae81209aa43320b81a12107c1d82285e6740f0354840701504d1649d01c1159080e04a08a2293a0382cb2001c1e5104453750604974002824b2188a6e90c082e8204041743104dd719105c0009082e84209aa13320380f12109c0f4134536740702e2420f82a04d12c9d01c1399080e02b1044b37576c56741aacc86209aa313d10c4815cc174a5fd189681aa40ae60ba57375229a02a982f942e9ab3a11c543aa60be503a4f27a289902a982f94ced789683ca40ae60ba50b74060467431061be50ba50e72e5a00a982f98cb64827a279902a98cf688b75229a0ba982f98cb64427a239902a98cf684b75225a02a982e93a2ed3896811a40aa6ebb85c2322c8f3231da65bb042e71e5a06a982997fac501e107c1214109c4537a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7bb7d6bb75deadf76e83771bbddbe4dd66efb6dc2d20b8558e1f6d93e5376579bb2cef90e5b76479a72cbf2dcbbb64f91d59de2dcbefcaf21e597e4f96f7caf2fbb2bc4f963f90e5902c7b59de2fcb1fcaf20159fe48960fcaf221593e2ccb4764f9a82c1f93e5e3b27c22410282c72101c113903f04efeb0c081e8504048f4110edd319103c0c09081e8120fa406740f020242078088228a4332078001210fc0882c8eb0c08ee8704043f8420daaf3320188204043d04d1873a0382fb2001c10f20880ee80c08ee850404df8720fa486740700f2420f81e04d1419d01c1dd9080e0bb10448774060477410282ef40101dd61910dc090908be0d417444674070072420f81604d1519d01c1372101c1ed1044c77476c58f42aa603ee91fd789e830a40ae693fe099d880e42aa603ee99fd489e800a40ae693fe299d88f643aa603ee99fd6892804a982f9a4ffb14e44fb2055309ff4cfe80c086e8320c27cd2ff44e72e3a03a9f20904d1599d884e43aa7c0c41f4a94e442721554e41109dd389e838a40a661afb994e44e720553e83203aaf13d15948954f21883ed788282f2420b81582f982ce3d741e52e573c81ebaa03c2098171410dc4a37a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7b77d0bb43de1df6ee887747bd3be6dd71ef4edc2d2078528e1f9d92e5d3b2fcb12c9f91e54f64f9ac2c7f2acbe764f933593e2fcb9fcbf20559fe4296bf94e5af64f9a22c7f2dcbdfc8f2b7b2fc9d2c7f2fcb3fc8f28fb27c49962fcbf21559be2acbd764f9ba2cdf90e59b091210bc010908de44fc214819e80c085e830404af431045ea0c085e810404af421025d61910bc0409085e86208ad21910fc011210fc11822889ce80e0779080e0f7104449750604bf810404bf85204aa6332078111210fc1a8228b9ce80e0979080e0571044297406042f4002825f401045eb0c089e870404216d969429750604cf41028290866fca189d01c1b3908020a4e19bf23e9d01c1339080206484993295ce80e06948401032c24c995a65573c652a4895d410446974228a8154b90f8228ad4e44d1902a292188d2e944941c52250504517a9d889242aa248320caa0135114a44a1208a28c3a114542aa248620caa43320780a82288020caac7317658254c90c41944527a20c902a192188eed789281da44a7a08a2ac3a11a58154490b41f4804e445921551e8020caa61351164895fb21881ed4882816121084049e5366d7b987b241aa3c08d943d9950704634101c19374334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b77797bcbbecdd15efae7a77cdbbebdeddf0eee6dd0282b7e4f8d14fb2fcb32cff22cbb765f957510e12c972842c1b59b6b2ec643990e548594e2ccb51b29c449693ca7232594e2ecb2964395a9653ca728c2cdf27cba96439b52ca791e5b4b29c4e96d3cb720659ce981001c12003222018603ed8945619100cd221028201e6834d199501c1200d222018603ed83ca3322018a442040403ccf0a9acca8060108308080698e153399501c1201a11100c30c3a7f22a03824172444030c00c9f9e5519100c922202820166f854416540308842040403ccf0a9a2ca8060108908080698e153259501c1c02102820166f8f49cca8060601001c1c04210555619100c1221028241040451159d01c1db9080e0af1044557506047f8604047f81207a5e6757bc2aa4caf31044d57422aa0ca9520582a8ba4e449520559e8320aaa113510548958a10443575222a0fa9f22c04512d9d88ca42aa948320aaad1351194895672088eae80c08fe0441541a82a8aece5d540752a52e04513d9d886a41aad48620aaaf13510d48959a10440d7422aa06a9521d82a8a14e440d20551a421035d289a81ea44a7d08a2173422ca070908de82606eac730f3582547901b2871a2b0f08e60305046fd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3e48e583d43e48e383b43e48e783f43ec8e0838c7709080699e4f8516659ce22cbf7cb7256597e4096b3c9f283b29c5d961f92e51cb2fcb02ce794e5476439972c3f2acbb965f931597e5c969f90e53cb2fca42ce795e55859ce27cbf965b9802c1794e542b25c58968bc872d1040908168104048b42fe10f4d319102c040908168620eaaf3320580012102c084134406740301f2420981f8268a0ce80605e484010f2f5a09483740604f34002824f42100dd619107c1c12107c02826888ce80606e4840f03108a2a13a0382b92001c147218886e90c08e68404041f81201aae3320980312107c18826884ce8060764840f02108a2913a0382d9200141ccb77947a90c0806591101c100f35c81d12a03824116444030c03c57608cceaef86848953110446375221a09a9320a82689c4e44c321554640108dd7896828a4ca3008a2093a110d8654190241345127a281902a83208826e944d41f5265000451bcca8060901982a81f04d1649dbb281e52653204d1149d882642aa4c82209aaa13d1784895091044d374221a0ba9320e8268ba4e44d32055a64310cdd089680aa4ca5408a2991a1141a6a801e6b9bab374eea119902a33217b6896f280607e4c4030c84437a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7ffb209f0ff2fba0800f0afaa0900f0afba0880f8ade2d20584c8e1f1597e512b2fc942c9794e5a765b9942c9796e532b2fc8c2c9795e572b25c5e969f95e50ab25c51962bc9f273b25c5996abc87255597e5e96abc9727559ae21cb3565b9962cd796e53ab25c5796ebc972fd040908d683040431df36d8a2332058071210c47c7f6eabce80602d484010f3fdb96d3a038235200141ccf7e7ded41910ac06090862be3fb75d6740b02a24208879c6c90e9d01c1ca908020e619276fe90c085682040431cf38d9a9332058011210c43ce3e46d9d01c1f2908020e61927bb740604cb42028298679cbca3332058061210c43ce364b7ce806029484010f38c93777506044b4202824f4310edd119102c0109083e0541f49eceaef81e4895f72088f6ea44b41b52e55d08a2f77522da05a9f20e04d13e9d887642aabc0d41f4814e443b2055de82200ae944f426a4ca760822af13d15648956d1044fb7506048b43106d8120fa50e72eda0fa9f22104d1019d8842902a1e82e8239d88f641aa7c0041745027a2bd902aef43101dd289e820a4ca2108a2c33a111d8054f90882e8884644052001c16210cc4775eea1c3902a47207be8a8f28060015040b018dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced831a3ea8e9835a3ea8ed833a3ea8eb837a3ea87fb7806003397ed450961bc9f20bb2dc58965f94e526b2dc54969bc97273596e21cb71b2dc52965bc9726b596e23cb6d65f925596e27cbed65b9832c7794e54eb2fcb22c7796e52eb2dc5596bbc9727759ee21cb3d65b9578204047b420282bd207f08aeea0c08768704047b40105dd31910ec0a0908768320baae3320d8191210ec024174436740b0132420f83204d14d9d01c10e9080604708a25b3a0382ed2001c1f610443fe90c08b68504045f8220fa596740b0352420d80682e8179d01c1969080602b08a2db3a03822d2001c13808a25f7506049b410282cd11886212e90c08368104049b421045e80c08368604045f8420323a03828d200141c84b6362accaae788c815481bcee3cc6e94494085205f2baf39840e76ce536a40ae475e731913a11fd0ca90279dd794c629d88302f30fb0982284a27a21b902a37218892e844740d52e53a0451529d01c186104457218892e9fca39f145225190451729d88a22055924010a5d08928125225310451b44e440e522580204aa9135134a44a4a08a2189d889243aaa48020ba4f2322c8abea02c8cbae6352e9dc4331902af741f6502ae501c182a0806003ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8db079d7dd0c5075d7dd0cd07dd7dd0c3073d7dd0eb5f070497d4ac503a5fc142f1a7ddbcf8d0cda8f8d00d3aaed3718d8eab745ca1e3321d97e8f8918e1fe8f89e8eefe8f8968e6fe8f89a8e8b747c45c797747c41c7053a3ea7e33c1d9fd1718e8e4fe9384bc727749ca1e3633a4ed3718a8e9351f13e22232f197849cf4b3a5ed2f2928697d4bca4e2e53e5e627849c94b342f297849ce4b325e92f2928497285e12f312c94bc08be3c5f2627889e025119dc5af74dca6e3173a7ea6e3273a6eb158949722bc14e6a5102f057929c04b7e5ef2f112cb4b5e5e9ee4250f2f4ff0f2382f8ff1929b974779c9c5cb23bce4e4e5615e72f0f2102fd9797990976cbc3cc04b565eeee7250b2f9979c9c44b7d5eeaf15297973abcd4e6a5162f3579a9c14b755eaaf1f23c2f5579a9c24b655e9ee3a5122f1579a9c0cbb3bc94e7a51c2f657979869732bc94e6a5142f4ff3529297a77829c14b715e8af1d28b979ebcf4e0a53b2fdd78e9ca4b175e3af3f2322f9d78e9c84b075edaf3d28e97977869cb4b1b5e5af3d28a9796bcc4f1d28297e6bc34e3a5292f4d78799197c6bcbcc04b235e1af2d2809799bccce0653a2fd37899cacb145e26f312cfcb245e26f2328197f1bc8ce3652c2f637819cdcb285e46f2328297e1bc0ce365282f437819cccb205e06f2328097febcf4e3a52f2f7d78e9cdcb165e36f3b289978dbc6ce0653d2feb7859cbcb1a5edee0e5755e56f3b28a97d77859c9cb0a5e96f3b28c97a5bc2ce165312f8b7859c8cb025ee6f3328f97577999cbcb2bbccce165362fb37839c1cb715e8ef172949723bc1ce6e5102f0779f9889703bc7cc8cb7e5e3c2f215e3ee0651f2feff3b29797f778d9c3cbbbbcece6e51d5e76f1f2362f3b79798b971dbc6ce7e54d5eb6f1b295979bbcdce0e53a2fd778b9cacb155e2ef37289971f79f98197ef79f98e976f79f98697af79b9c8cb57bc7cc9cb17bc5ce0e5735ecef3f2192fe778f99497b3bc7cc2cb195e3ee6e5342fa77861e733ec7c869dcfb0f319763ec3ce67d8f90c3b9f61e733ec7c869dcfb0f319763ec3ce67d8f90c3b9f61e733ec7c869dcfb0f319763ec3ce67d8f90c3b9f61e733ec7c26119fc6afbcdce6e5175e7ee6e5275ed8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ff33ec7f86fdcfb0ff19f63fc3fe67d8ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fdcfb1ff39f63fc7fee7d8ff1cfb9f63ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f681015eebef7f6411f1ff4f5413f1ff4f7c1001f0cf4c1201f0cf6c1101f0cf5c1301f0cf7c1081f8cf4c1281f8cf6c1181f8cf5c1381f8cf7c1041f4cf4c1241f50c5c93e98e283a93e98e683e93e98e18399f8190de4750ac12cc8842656d9102b96979a7f153255a905c1934f119ed87ffc3fd5ff0a9effa952038227bf123cb1fffc2f9effb378fea94a35089e020af0c4def96f54f93378eea8521582a7e07f194fecbffa379ffba378fe4595ca103c85fe8b7862ff9d50f18fe0f937552a41f014fe2fe18995c4677f2f1ea14a05089e22ff053cb177ab58eef7e0b94b95f2103c45ffc378627f4fc567ee86e77754290bc153ec3f8827f6f7562c2de1f99d55ca40f014ff0fe189fd23159ffe7778fe409552103c25fe037862ff68c5a7fe159e3f58a52404cf53098c27f6cf54fc3f4f5bfe13554a40f0944c403cb17fb662d17fc6f327ab1483e0795a67ecb424a40ae4452f31a574222a01a90279d14b4c699d88208f6e8d290e41544627a222902a4521889ed189a810a44a6108a2b23a11158054817c1d23a69c4e44f92055f24310954f3044b17fbe22c6896221809ed5b987ca43aa405ec519534127a2b2902a905771c654d489a80ca40ae4559c319574222a05a902791567cc733a1155825481bc5c3aa6b24e44152055202f978ea992208862ff5ac5ffb9b3fe4b550a432057d5b9832a43aa405e72af1311e451e1c16c08a0f61ac32f5d00e197ae103c1d34865f5e06845f3a43f074d4187ee90808bf7482e0e9a431fcd21e107ee900c1f3b2c6f0cb4b80f04b3b089ece1ac32f6d00e197b6103c5d34865f5a01c22fad2178ba6a0cbfc401c22f2d2178ba690cbf3407845f5a40f074d7187e690a08bf3483e0e9a131fcf22220fcd20482a7a7c6f0cb0b80f04b63089e5e1ac32f0d01e19746103cbd35865fea03c22f0d2078fae8ecfaf48654e90341d45727a29e902a90d715c6f4d389a83ba40ae4758531fd7522ea0aa902e941c60cd089a833a40ae4758531037522ea04a902795d61cc209d883a40aa405e5718335863f8a51e0410e46585314374eea1c1902a43208886ea44341052651004d1309d88fa43aa0c80201aae13515f48957e10442374221a0ea932028268a44e444321558641108dd2187ea90308bfd485401ead73078d84541905d9410844fff7a1ebab6a366fdda163e7ce75e23ab769d96b6abc0f66856ed33a3b74fb74a252f1a11951f1a1e9744ca3632a1d53e8984c473c1d93e89848c7043ac6d3318e8eb1748ca163341da3e81849c7083a86d3318c8ea1740ca163301d83e81818153f202abe7f547cbfa8f8be51f17da2e27bd3bfbb998e4d746ca463031debe95847c75a3ad6d0f1061dafd3b19a8e5574bc46c74a3a56d0b19c8e65742ca563091d8be95844c7423a16d0319f8e7974bc4ac75c3a5ea1630e1db3e99845c7713a8ef1737888023fef2be0277f05fc0cb0809f0616f073c1027e4258c0cf0a0bf8a961013f3f2ce0278905fc4cb1809f2e16f073c6027ee258c0cf1e0bf82964013f8f2ce0279305fc8cb2809f5616f073cb027e8259c0cf320bf8a966013fdf2ce0279d05fcccb3809f7e16f073d0027e225ac0cf460b6646f960ceffdef3f188dd1acc81e4995ef9eb45062d2dd3b94dbb766d5a4d9d346849cd361d5ab58bc3bc24217c767ff577297c4eed3bb58bf3c1dc8953062dafd4ad7da78a2dab76ec1a9fc80e5afc4cc70e5dbac6474cfaeb273b685599361d9a76ee55be4d5cbb16cf779a926861d936dd23122daad9b563a7c9132702fe0bfe790f4d9a0cc14b4c303fa85701db2841aeefd589e8bf587a8025d4ef5d7ee86fddbc7bbf75ff0b2e11c16ca1f90a7fe7e8eae6237ee3feffad3d59ddd6c69e10e231788b4b77eedcb4d7e94431985302bc7f0b7322a9b49c486a2d279246cb89a4d57222e9b49c487a2d279241cb8964d4722299b49c48662d279245cb89dcafe544b26a399107b49c4836c4a7807fdc9a50a761810f16fa60910f16fb60890f96fa60990f96fb60850f56fae0351facf2c16a1fbcee83377cb0c6076b7db0ce07eb7db0c1071b7db0c9079b7db0c5075b7db0cd076ffa60bb0f76f8e02d1fecf4c1db3ed8e583777cb0db07effa608f0fdef3c15e1fbcef837d3ef8c007211f781fecf7c1873e38e0838f26ce1ab4b04ac7eef1d6fcf67f4dc46fff3722d13f3e9e24facb1f4f62f30e5a59be63e7b836ad3a700f6ff2bae6b456ebdca67bd3ae71dcd8ebdaa6638749839657886bda298c29dee59d3c68558db8566dba748deb5cb1438bb89e1177fc6bf3cfff711bf3db3907ee7fce3d18b4883f684d8afaed5f278af89fcf419320ada2f9804f53fff44ecd65d5bb75ecda26ae43d7a9a8cfd48b10bf3a7ffdd34b3e1f1cf2c1c19dffa28bbbb846e9aacf969b446dc18311a27c28f40beec5f5ffef47b808c2f9603c8411f615adf8edb458cd763ae283c3f2763a2c6fa72309b39d1643381f866ca723dab7d37235dbe9980f8ecadbe9a8bc9d8e25cc765a0ee17c14b29d8e69df4e2bd46ca7133e382e6fa7e3f2763a9130db690584f371c8763aa17d3bad54b39d4ef9e0a4bc9d4ecadbe954c26ca79510ce2721dbe994f6edf4919aedf4b10f4ecbdbe9b4bc9d3e4e98edf41184f369c876fa5863aa07f2fcc26001a4ca19e4480b9e9238039dd77e726f5e7b075e6282f9419d559992a0eb3b0b4f49c4635a4e902a9faadc5667e9c4208db998e52a4399a01fde3948b473b9ea98db39a8817f76cfc0efc04b4c303fa8f32a0d9caeefbcd2981b1a18c49a200f7e0e1642aa7caefacef273a8315db8674c77e02526981fd4172a8d89aeef8bbff59de5972ab7d5177462983bcb957fe73bcbaf2077962b55df597e0535f08bf70cfc0ebcc404f383fa5aa581d3f57dadf4cef26bd5bf77a7a1bf77dfdcfbbdbb032f31c1fca0be55f97b47d7f7eddffac6e93b95dbea5b3a31cc8dd3aabff38dd3f7901ba755aa0dfc7ba881ff70cfc0efc04b4c303fa81f551a385ddf8f4a6f9c7e54fd7b7714fa7b77e9deefdd1d788909e6077559e5ef1d5ddfe5bff58dd31595dbea329d18e6c6e9f5bff38dd355c88dd3ebaa0dfc2ad4c0afdd33f03bf01213cc0feaba4a03a7ebbbaef4c6e9baeadfbbe3d0dfbb1bf77eefeec04b4c303fa89b2a7fefe8fa6efead6f9c6ea9dc5637e9c430374e6bfece374e3f416e9cd6a836f09fa006fef33d03bf032f31c1fca07e5169e0747dbf28bd71fa45f5efdd49e8efdded7bbf7777e02526981fd4af2a7fefe8fa7efd3bdf38452652b9ad7ea513c3dc38adfb1bdf384546406e9cd66936f0c808a481479a7b067e075e6282f941598d06ced76775de384180fddfafb62eab16d722ae7397b80e9327c7fb6061f831e207c3ebe1d0ed44f13ed2f9c840fce74e277a8cfed34bc2ffccd2f0ba2cbc1e0dafc7c3ebc9f0fa5a785d155e5787d7d7c3eb1be1754d785d1b5ed785d7f5e1754378dd185e3785d7cde1754b78dd1a5eb785d737c3ebf6f0ba23bcbe155e7786d7b7c3ebaef0fa4e78dd1d5edf0daf7bc2eb7be1756f787d3fbcee0baf1f84d75078f5e1757f78fd30bc1ef88d54a48f4c7c57c20bf89f8874e135f2b77f2eca4726d1fb173f29c08712caee0b40cd3ed93db3ff5f708908c6b9922bb47ababae49a9f4d0cd8dad813caa7efd9c40f6a793a62762d27f2909613c9a1e5441ed6722239b59cc8235a4e249796137954cb89e4d672228f693991c7b59cc8135a4e248f96137952cb89e4c53d9b78b68f4ce123a37d644a1f19e323eff391a97c646a1f99c647a6f591e97c64faffc6a382b7c47578b95b5cb7b86add9ab56bd3fc1f0f0b66e97f3f303899e20706f38780bffa834ed0a79445a6d4f294b2c88c3e3283f894b2c80ce253ca223326c853ca225342386788873052fed0bbc81835db29b38fcc246fa74cf276ca9c30db2906c23913643b65d6be9dd2a8d94ef7fbc82cf276ca226fa7fb13663ba58170ce02d94ef76bdf4e69d56ca7077c6456793b6595b7d30309b39dd2423867856ca707b46fa7746ab6d3833e329bbc9db2c9dbe9c184d94ee9209cb341b6d3831a430e0520985340aa64d7fc1c2ec4d9fdd3d4eba17b53af3bf01213cc0f2a87ca88035d5f0e9d19b5c8e4902a0fabdc5639e8c43019b50d2a336aa01f5e4e48466d83ea8c5a4ea8813f72cfc0efc04b4c303fa85c2a0d9cae2f97d28c5a2e8d4f78cd0731a66848954755df593e0a35a6dcf78ce90ebcc404f3837a4ca531d1f53df6b7beb37c5ce5b67a8c4e0c7367b9e9ef7c67f904e4ce7293ea3bcb27a0069ee79e81df819798607e504faa3470babe2795de593ea9faf72e0bf4f72eefbddfbb3bf01213cc0f2a56e5ef1d5d5fecdffac6299fca6d45ff9b0f73e3b4e5ef7ce3941f72e3b445b581e7871a78817b067e075e6282f941155469e0747d0595de381554fd7b9715fa7b57e8deefdd1d788909e6075558e5ef1d5d5fe1bff58d531195dbaa309d18e6c669dbdff9c6a928e4c6699b6a032f0a35f062f70cfc0ebcc404f3832aaed2c0e9fa8a2bbd712aaefaf72e1bf4f7aec4bddfbb3bf01213cc0fea2995bf77747d4ffdad6f9c4aaadc564fd189616e9cb6ff9d6f9c9e86dc386d576de04f430dbcd43d03bf032f31c1fca04aab3470babed24a6f9c4a27fc83ca22a3c30fd0ca105e33fdf618ad323ef299ff7b397fdd8cca2604e5bf7e5ae5749e56799da7f5acced3aaa0f3b42aea3cad4a3a4feb399da75559e76955d1795a55759ed6f33a4fab9aced3aaaef3b46ae83cad9a3a4fab96ced3aaadf3b4eae83cadba3a4fab9eced3aaaff3b41ae83cad863a4fab91ced37a41e76935d6795a2fea3cad263a4faba9ced36aa6f3b49aeb3cad163a4f2b4ee769b5d4795aad749e566b9da7d546e769b5d5795a2fe93cad763a4fabbdced3eaa0f3b43a024e4b7e394d7e1a0ddd179e13a50aafa9c36b96f09a35bc660bafe9c36bd9f05a2ebc960fafcf86d70ae1b56278ad145e9f0baf95c36b95f05a35bc3e1f5eab85d7eae1b54678ad195e6b85d7dae1b54e78ad1b5eeb85d7fae1b541786d185e1b85d717c26be3f0fa62786d125e9b86d766e1b579786d115ee3c26bcbf0da2abcb60eaf6dc26bdbf0fa52786d175edb87d70ee1b5e36fd3b44e3ef2e5bb4ee15284ff8932e1b5d36fff5c671fd9456f2aa42b7856adeae2baa91cc447f9c8a418afe80eb6306dd7d743a745f7d4795abd749e566f9da7d547e769f5d5795afd749e567f9da73540e7690dd4795a83749ed6609da73544e7690dd5795ac3749ed6709da73522c13f7bc6d007a29ee14f47bdc26beff0da27bcf60daffdc26bfff03a20bc0e0caf83c2ebe0f03a24bc0e0dafc3c2ebf0f03ae2b74f5c237de4a884c0335ae74f6d8cced31aabf3b4c6e93cadf13a4f6b82ced39aa8f3b426e93cad789da73559e7694dd1795a53759ed6349da7355de769cdd0795a33759ed62c95edcde4d497c47c63f12d95d7d78dfaca98ebdb9910dfc8fcebdb6a36e4bb946f41aaecd4f99b3747e769bda2f3b4e6aafc3da6b96357ccf5bdaa13fb3c9da7355fe7692dd0795a0b759ed6a2847812c45ffd9d8e805cda628d97662097b644e3a559c8a52dd578690e7269cb345e5a00b9b4e51a2f2d1272692b345e1af5e82117b752e7c58d815cdc6b3a2f6e2ce4e256e9bcb871908b5badf3e2c6432eee759d17370172716fe8bcb889908b5ba3f3e2309f04d6eabc384ccc769dce8bc3f4f9d6ebbcb829908bdba0f3e2a6422e6ea3ce8b9b06b9b84d3a2f6e3ae4e236ebbcb819908bdba2f3e266422e6eabce8b9b05b9b86d3a2f6e36e4e2ded47971732017b75de7c5bd02b9b81d3a2f6e2ee4e2ded27971af422e6ea7ce8b9b07b9b8b7755edc7cc8c5edd279710b2017f78ece8b5b08b9b8dd3a2f6e11e4e2ded57871892197b647e3a545412eed3d8d97960472697b355e5a52c8a5bdaff1d292412e6d9fc64bc37c99ff038d9796027269218d97160db934aff1d252422e6dbfc64b8b815cda877ffdd24e27ea1561ac0b22134725499a2c798ae89431f7a54a9d266dbaf4193266ca9ce5feac0f647b30fb43391ecef948ae47733ff6f813799ecc1b9b2f7f8182850a17295aac7889a74a3e5daa749967ca962bff6c858a959eab5ca5eaf3d5aad7a859ab769dbaf5ea3768d8e885c62f3669daac798bb896ad5ab769fb52bbf61d3a767ab97397aeddbaf7e8d9eb74a2c77ce4621fb9c4472ef591cb7ce4721fb982a6fa34fba60931cd5169da4833399a5cd17c87a620342ba08e3af59da93b4b3d4ceaf4513f8cba46d45ba10e047d4ea74fb3f4998f3e19d1e707bacba67b51ba63a33b1bba03a0bf94f417859c971c8a7e9369c7d3ce2082ff1f", + "bytecode": "edbd07945555b6fd4dedbd4f51a4a224271111115191222711101010909c4552912449ce39678a1c447214949c04111111ef462427111151319341c56fadebebefdf8fd7bd30ccea5ec3c11befecf7ba67bbfa9c5fed9a75ee5af39e33c5c7ec3a9d6cc7a037cab46bdafca5321d7b96efd6a1f9334ddbb51bb4b846e9aacf969b14ef22043190c448492c1425888525b188241695c46292585c124b48e253925852129f96c45292585a12cb48e23392585612cb496279497c56122b48624549ac2489cf49626549ac22895525f17949ac2689d525b18624d694c45a92585b12eb48625d49ac2789f525b181243694c44692f882243696c41725b189243695c46692d85c125b48629c24b694c45692d85a12db48625b497c4912db49627b49ec20891d25b19324be2c899d25b18b247695c46e92d85b12fb48625f49ec2789fd2571802486068aea20511d2caa434475a8a80e13d5e1a23a4254478aea28511d2daa634475aca88e13d5f1a23a4154278aea24518d17d5c9a23a4554a78aea34519d2eaa33447566d4a015a53bb7e9daba7d5cd736cd274f9c1c7fa254febc85f217882b9c2f2e367f6cd3bcf98a362b52306f8182cd0a15892d125bb048c116f98ae4cf1f57a44091c2459b152d9cb7686c81fc71b12d0b16cddf326ff87f624333a848be96850afca522337f3b93bf5224af8ffce844a9bc7ff17ffe25203eadd83f7d6dd3fe51a4c55f00341d02e8600202e2d3cafba7ae6dca3f17c9fb27014d85003a94c080f8b48afce16b8bbfa348d1967f02d06408a0c3ff0140745a055afea16b9bf8af8a14fe83802641001df9cf000a9f56c1df7d6de3ff5d91027f00d00408a0a3ff41407c5a797fd7b58d958ae4fd9d80c641001dfb0f03e2d36a7ed76b1b7db722857f07a0311040c7ff0b80f8b4f289d736f2f714297c1740a320804efc9700f16915feb7d736fcf716292c001a010174f2bf08884fabc8bfbcb6a17fa448917f03681804d0a9ff32203eadbcffe7da06ffc122855afe0b404320804e2b00c4a795f77f5ddbc03f5324df1d800641007dac04109f56be7f5c5bff3f5ba3c0ffe3330082e78c223cf9e35ab6e4338bedfb976afc86a71f04cf270981e72f168ca59f1aa4ca2710446775223a0da9f23104d1a73a119d8454390541744e27a2e3902a2720883ed389e828a4ca3108a2f33a111d8654390241f4b94e440721550e41105dd0764f447745b17d20803e8200fa42e71eba00a9f20504d1973a119d8754f91c82e82b9d88ce41aa7c0641745127a2b3902a9f42107dad13d1454895af2188bed189e84b4895af2088bed588a83be0d27a43207fa773077d03a9f22d640721102d2fdba6735cf3ae6dbac70d5a5eab63e5b81a4d5bb4e93979f2c44988cdf4d7cfef74a26cbdfbf4edd77f4068606850687068486868685868786844686468546874684c686c685c687c684268626852283e343934253435342d343d342334d34724922241b3c4c0d06c519d23aaaf88ea5c517d5554e789ea7c515d20aa0b457591a82e16d525a2ba54549789ea72515d21aa2b45f535515d25aaab45f575517d4354d788ea5a515d27aaeb457583a86e14d54da2ba5954b72444686f3322b4b70561e08953a80ced6d4484f636410045ab0cedad4784f6364000a55419da5b8b08edad83008a5119da7b0311da5b0301749fcad0de6a4468ef7508a0542a437baf21427bab208052ab0cedad4084f6564200a55119da5b8608ed2d87004aab32b4b70411da5b0a01944e65686f1122b4b7180228bdcad0de0244686f2104500695a1bd7988d0de7c08a08c1a437ba1b980d45ee85508a04c1a637ba13980dc5ee81508a0cc2a3bd6893341aa648620caa213510648958c1044f7eb44940e52253d0451569d88d240aaa485207a4027a254902aa92188b2e9441403a9721f04d1833a114543aaa48420caae31b8179a0d21940242e8219d9b283ba4ca431044397422ca06a9f22004d1c33a1165855479008228a74e44592055ee87207a4427a29c902a8f4010e5d2892807a4cac310448f6a44d4037069a15910cab9756ea15c902a8f42b6506ee5d1bd1e90e85e68566876684ee895d0dcd0aba179a1f9a105a185a145a1c5a125a1a5a165a1e5a115a195a1d742ab42ab43af87de08ad09ad0dad0bad0f6d086d0c6d0a6d0e6db94b806fab181eda26aa6f8aea7651dd21aa6f89ea4e517d5b547789ea3ba2ba5b54df15d53da2fa9ea8ee15d5f745759fa87e20aa2151f5a2ba5f543f14d503a2fa91a81e14d543a27a58548f88ea51513d26aac745f5444204f88e23027c90efc726aea832c0771411e0837c3b3671259501bec388001fe4bbb1899f5319e03b8808f041be199bb8b2ca00df0144800ff2cdd8c4555406f8f623027c1f4200555519e00b21027c1e02e8799501be7d8800df071040d55406f8f622027cef4300555719e0db8308f0bd0701544365806f3722c0f72e04504d9501be5d8800df3b1040b55406f87622027c6f4300d55619e0db8108f0bd050154476580ef4d44806f3b04505d9d7deb3a902a752188eae944540b52a53604517d9d886a40aad484206aa01351354895ea10440d7522aa0aa9f23c0451239d882a43aa5481207a4127a24a902acf4110355619e0db0621541142e8459d9ba831a4ca8b10444d74226a04a9f2020451539d881a40aa3484206aa613513d4895fa1044cd75226a06a9d21c82a8854e444d20559a4210c56944d41311e0db0aa1dc52e7166a01a91207d9422d9507f87a62027c5b43db426f86b6877684de0aed0cbd1dda157a27b43bf46e684fe8bdd0ded0fba17da10f42a1900fed0f7d183a10fa2874307428743874247434742c743c74e22e01be936278e894a89e16d58f45f58ca87e22aa6745f553513d27aa9f89ea7951fd5c542f88ea17a2faa5a87e25aa1745f56b51fd4654bf15d5ef44f57b51fd41547f14d54ba27a5954af88ea5551bd26aad745f586a8de4c8800df0d4480ef26c4c687a90cf05d4304f8ae43000d5719e0bb8208f05d85001aa132c0770911e0bb0c0134526580ef074480ef4708a0512a037cdf21027cdf43008d5619e0fb0611e0833c083cf1189501be8b88001fe4750489c7aa0cf07d8908f0415e4690789cca00df0544800ff2729dc4e35506f8ce23027c9057eb249ea032c0770e11e083bc5827f1449501beb388001fe4b53a8927a90cf09d4104f820af3d4d1caf32c0771a11e083bcf434f1649d7deb784895c910445374229a08a932098268aa4e44e321552640104dd389682ca4ca3808a2e93a118d8654190341344327a291902aa3208866ea44341c52650404d12c9501be531042c3208466ebdc4498870dcd86209aa313d10c4895991044afe844340d52653a04d15c9d88a640aa4c85207a5527a2b9902a9807edcfd389680ea40ae651fbf33522423c73397412427981ce2d340f5205f3be8f05ca037cf761027c2743a742a7431f87ce843e099d0d7d1a3a17fa2c743ef479e842e88bd097a1af4217435f87be097d1bfa2ef47de887d08fa14ba1cba12ba1aba16ba1eba11ba19b7709f0dd12c3433f89eacfa2fa8ba8de16d55f2595ae48962364d9c8b2956527cb812c47ca7262598e92e524b29c549693c97272594e21cbd1b29c52966364f93e594e25cba965398d2ca795e574b29c5e9633c872c60488f6d17f2920db47e706b1f8b73586fbe8a70a48f7d10f1f826897c6781ffdda00f27df4db0541f48ec6801ff91220e147f60541b45b63c48f8c1f90f1a3bf0f1044ef6a0cf9d15f5640ca8ffe004310edd118f3a35b1740ce8fee702088ded318f4a37b4340d28f6e212188f66a8cfad1cd3720eb47f7e81044ef6b0cfbd1a71b40da8f3e044110edd318f7a38f8f80bc1f7dca8420fa4063e08f3e9f03127ff4311e8228a431f2470d1040e68ffa2410445e65e8ef3622f4f72b04d07e95a1bf9f11a1bf5f20803ed4d9ebde0fa9827902f6019d8842902a9867607fa413d13e4815cc53b00fea44b4175205f31cec433a11ed8154c13c09fbb04e44bb215530cfc23ea213d12e4815ccd3b08faa0cfdfd042184791cf6319d9be828a40ae6e544c775223a0ca982793dd1099d880e42aa605e50745227a203902a9857149dd2890893b53a0541745a27a2e3902a9897ed7dac11512a44e8ef1684f2199d5be834a40ae60ba2679487fe5261427fb7423f857e0efd12ba1dfa95babdd4aaa5b638f5b4697e40cd7f1ab4d094842652344ea2d11dcddd68c649034a1a06d32497a6e634f2f611a97c446a1f91c647a4f511e97c447a1f91c1476494e3803e22931c39ca2ccb5964f97e59ce2acb0fc87236597e5096b3cbf243b29c43961f96e59cb2fc882ce792e5476539b72c3f26cb8fcbf213b29c47969f94e5bcb21c2bcbf96439bf2c1790e582b25c48960bcb7211592e9a20a1c02290506051c89f805f7486020b4142818521886eeb0c05168084020b4210fdaa3314980f120acc8f401495486728302f2414180b4114a133149807120a7c1282c8e80c053e0e09053e014164758602734342818f4110399da1c05c9050e0a3104481ce50604e4828f01108a2489da1c01c9050e0c3104489758602b34342810f411045e90c05668384021f84204aa23114481d26402a901a5110444935c602a98507c80552a70f822899ca7e7854524815c89725a292eb441405a902f9b244540a9d88222155205f96888ad689c841aa40be2c119552272203a902f9b244548c4e44892055205f9688ba4fe784f736a40ae4eb1251a934060369f2094104f9c244546a9dbf68a92055205f688f4aa313510ca40ae40bed516975228a8654817ca13d2a9d4e44c92155205f688f4aaf13513a4815c8235aa232e84494065205f28896a88c1a1141fe1245648260cea4730f658054813c2c0a822821a381a921d140da5074334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b78fc8e723f2fb88023ea2a08f28e4230afb88223ea2e8dd0282c5e4f85171592e21cb4fc97249597e5a964bc97269592e23cbcfc87259592e27cbe565f95959ae20cb1565b9922c3f27cb9565b98a2c5795e5e765b99a2c5797e51ab25c53966bc9726d59ae23cb7565b99e2cd74f9080603d4840b03ee40f41519d01c13a9080605d08a2623a0382b52001c1da1044c57506046b4002823521884ae80c0856830404ab43103da53320581512107c1e82a8a4ce8060654840b00a04d1d33a0382952001c1e720884ae90c08568004042b421095d619102c0f09083e0b4154466740b02c2420580e82e8199d01c1329080e0331044657506044b410282a52188cae90c08968404049f86202aaf3320580212107c0a82e8599d5df1f2902a98bf681574222a0ba982f98b565127a232902a98bf689574222a05a982f98bf69c4e44252155307fd12aeb4454025205f317ad8a4e44c520558a431055d519102c0e4104794442d4f33a77515548154cd7b19a4e44952155305dc7ea3a11558254c1741d6be84454015205d375aca913510d4815cc1cad964e44d520553073b4da1a11a581040431f7567574eea15a902a98897e1de501c134a0806031ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8db47d4f011357d442d1f51db47d4f111757d443d1f51ff6e01c10672fca8a12c3792e51764b9b12cbf28cb4d64b9a92c3793e5e6b2dc4296e364b9a52cb792e5d6b2dc4696dbcaf24bb2dc4e96dbcb720759ee28cb9d64f96559ee2ccb5d64b9ab2c7793e5eeb2dc43967bca72af040908f68404047b41fe1074d31910ec0e0908f68020eaae3320d8151210ec0641d4436740b0332420d80582a8a7ce8060274840f06508a25e3a03821d2001c18e1044bd750604db410282ed2188fae80c08b68504045f8220eaab3320d81a12106c0341d44f6740b0252420d80a82a8bfce80600b4840300e826880ce8060334840b03904d1409d01c1269080605308a2413a03828d2101c117218806eb0c08368204045f80201aa2b32b3e1852650804d1509d880642aa0c82201aa613517f4895011044c37522ea0ba9d20f8268844e44bd2155fa40108dd489a827a40aa6773d4a27a2ee902a98def5689d01c186104498def5189dbb6834a4ca1808a2b13a118d8454190541344e27a2e1902a232088c6eb44341452651804d1049d88c643aa4c80209aa813d1584895711044933422823c1c31a2010473bcce3d3411526512640fc52b0f08a60505041bd0cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3ea2b38fe8e223bafa886e3ea2bb8fe8e1237afa885e770b08f696e3477d64b9af2cf793e5feb23c409607caf220591e2ccb436479a82c0f93e5e1b23c429647caf228591e2dcb636479ac2c8f93e5f1b23c419627caf224598e97e5c9b23c4596a7caf234599e2ecb336479668204046740028233217f08d6e80c084e830404a74310add519109c0209084e85205aa73320180f09084e86205aaf332038111210c4dc946ed019101c0f0908623e1e6fd419101c0b0908623e1e6fd219101c0d0908621abe9b750604474202829886ef169d01c1e1908020a6e1bb556740702824208869f86ed319101c0c09086242396fea0c080e84040431a19ced3a0382fd2101414c286787ce80605f48401013ca794b67577c07a4ca5b10443b75227a1352653b04d1db3a116d8554d90641b44b27a2cd902a5b2088ded1896823a4ca2608a2dd3a11ad8754d90041f4ae4e446b2155d64110edd11910ec0341b40682e83d9dbb680fa4ca7b10447b7522da0da9f22e04d1fb3a11ed8254790782689f4e443b2155de8620fa4027a27d902a1f4010857422da0ba9f23e0491d788281d242088f90acf7e9d7b2804a9e2217b68bff280603a5040b037dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced2338e6e423a6f888a93e629a8f98ee2366f88899770b08ce92e347b365798e2cbf22cb7365f955599e27cbf36579812c2f94e545b2bc589697c8f252595e26cbcb6579852caf94e5d76479952caf96e5d765f90d595e23cb6b65799d2caf97e50db2bc519637c9f26659de922001c1cd908020a655f7adce80e046484010d3aafb4e6740703d24208869d57daf3320b8161210c4b4ea7ed019107c031210c4b4ea7ed419105c0d0908be0e4174496740f0354840701504d1659d01c1159080e04a08a22b3a0382cb2001c1e5104457750604974002824b2188aee90c082e8204041743105dd719105c0009082e8420baa13320380f12109c0f4174536740702e2420f82a04d12d9d01c1399080e02b10443fe9ec8adf8254f90982e8679d886e40aadc8420fa4527a26b902ad721886eeb44740552e52a04d1af3a115d8254b98c409424914e443f40aafc084114a113d177902adf4310199d01c1d91044df42105995bb28898154b110444e27a244902a111044814e2fba0da9f22b0451a44e443f43aafc02419458e72f5a24a44a6208a2289d881ca44a0041944423a2f49080e02c08e6a43af75014a44a12c81e4aaa3c20981e14109c4537a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7ffb88b53e629d8f58ef2336f8888d3e62938fd8ec23b6dc2d20b8558e1f6d93e5376579bb2cef90e5b76479a72cbf2dcbbb64f91d59de2dcbefcaf21e597e4f96f7caf2fbb2bc4f963f90e5902c7b59de2fcb1fcaf20159fe48960fcaf221593e2ccb4764f9a82c1f93e5e3b27c22410282c72101c113903f048fea0c081e8504048f4110e5d619103c0c09081e81207a4c6740f0202420780882e8719d01c1039080e04710444fe80c08ee8704043f8420caa333201882040421df7d4af2a4ce80e03e484010f22dcc2479750604f7420282906f612689d51910dc030908429e2b90249fce80e06e484010f25c8124f97506047741028290e70a2429a03320b8131210843c572049419d01c11d908020e4d96f490ae90c08be090908429efd96a4b0ceae78214895c210444574222a00a9521082a8a84e44f92055f2431015d389282fa44a2c0451719d88f240aa3c0941544227a2c721559e80207a4a27a2dc902a8f411095d41910dc0641f42804d1d33a7751494895a721884ae944540252e52908a2d23a11158354290e41544627a222902a4521889ed189a80ca4ca3310446575222a05a9521a82a89c464419200141c893e29394d7b987ca42aa9483eca1f2ca0382194001c1ad74334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b78f38e8230ef988c33ee2888f38ea238ef988e33ee2c4dd028227e5f8d129593e2dcb1fcbf21959fe4496cfcaf2a7b27c4e963f93e5f3b2fcb92c5f90e52f64f94b59fe4a962fcaf2d7b2fc8d2c7f2bcbdfc9f2f7b2fc832cff28cb9764f9b22c5f91e5abb27c4d96afcbf20d59be992001c11b908020e41be149e2740604af410282906f842769a9332078051210847c233c492b9d01c14b908020e61be1ad7506047f80040431df086fa33320f81d242088f946785b9d01c16f200141cc37c25fd21910bc0809087e0d41d44e6740f04b4840f02b08a2f63a0382172001c12f20883ae80c089e8704043f8720eaa83320780e1210fc0c82a893ce80e0594840f05308a297750604cf4002829f401075d619103c0d09087e0c41d4456757bc33a44a1708a2ae3a11758254791982a89b4e441d20553a421075d789a81da44a7b08a21e3a11b58554790982a8a74e44ad2155da4010f5d289a825a44a2b08a2de3a0382a72088e22088fae8dc4590972926e90341d45727a29e902abd2088fae944d41d52a50704517f9d88ba42aa7483201aa013517f4895011044037522ea0ba9d20f8268904644192101c19310cc8375eea181902a83207b68b0f28060465040f024dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced232ef988cb3ee28a8fb8ea23aef988eb3ee2868fb879b780e02d397ef4932cff2ccbbfc8f26d59fe55944d22598e906523cb56969d2c07b21c29cb8965394a9693c87252594e26cbc96539852c47cb724a598e91e5fb6439952ca796e534b29c5696d3c9727a59ce20cb19132220683220028206f21737c97c950141930e11103490c71a2759a0322068d2200282262d04d142950141930a111034a9218816a90c089a184440d0dc0741b4586540d044230282262504d112950141931c11103429208896aa0c089aa48880a0490641b44c6540d04421028206f388fde52a0382261211103498977dac501910340e11103498977dac541910340611103498d757bda63220681221028206f3faaa553a0382b7210141ccebab56eb0c08fe0c0908625e5ff5baceaef86a4895d72188ded089e83548955510446b74225a01a9b2128268ad4e44cb2055964310add3896809a4ca5208a2f53a112d8254590c41b44127a205902a0b218836ea0c08fe0441341f826893ce5db41152651304d1669d88d643aa6c8020daa213d15a48957510445b75227a0352650d04d1369d8830cf6ddb0641f4a64e449b2155b640106dd78828132420780b827987ce3df426a40ae67d133b94070433810282b7e86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f6f527993da9b34dea4f5269d37e9bdc9e04dc6bb04044d26397e945996b3c8f2fdb29c55961f90e56cb2fca02c6797e5876439872c3f2ccb3965f91159ce25cb8fca726e597e4c961f97e52764398f2c3f29cb7965395696f3c9727e592e20cb0565b9902c1796e522b25c3441028245200141cc43ad3fd619102c040908625e3c74466740b00024208879f1d0273a0382f9200141cc8b87ceea0c08e6850404312f1efa546740300f24208879f1d0399d01c1c7210141cc8b873ed31910cc0d0908625e3c745e6740301724208879f1d0e73a0382392101c14720882ee80c08e68004041f8620fa426740303b2420f81004d1973a0382d92001c1072188be5219103459110141f30004d1459501419305111034f743107dadb32b7e115205f364e56f7422fa125205f364e56f7522ba00a98279b2f2773a119d8754c13c59f97b9d88ce41aa609eacfc834e44672155304f56fe5127a233902a98272b5f52191034992188304f56beac73175d8254c1bcfde68a4e443f40aa60de7e735527a2ef2055306fbfb9a613d137902a98b7df5cd789e81aa40ae67d6e377422ba02a982799fdb4d8d8832232ecd648260bea5730fdd8054c1bc59f296f28060664c40d064a29b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbdc9e74d7e6f0a7853d09b42de14f6a6883745ef16102c26c78f8acb7209597e4a964bcaf2d3b25c4a964bcb7219597e4696cbca7239592e2fcbcfca720559ae28cb9564f93959ae2ccb5564b9aa2c3f2fcbd564b9ba2cd790e59ab25c4b966bcb721d59ae2bcbf564b97e820404eb410282f5117f089266d41910ac030908d68520caa43320580b1210ac0d4194596740b0062420581382288bce8060354840b03a04d1fd3a0382552101c1e72188b2ea0c0856860404ab40103da03320580912107c0e82289bce8060054840b02204d1833a0382e52101c1672188b2eb0c0896850404cb41103da43320580612107c06822887ce8060294840b03404d1c33a0382252101c1a7218872ea0c08968004049f82207a4465573c694e481548e43d692e9d887240aa4022ef491fd589283ba40a24f29e34b74e44d920552091f7a48fe9449415520512794ffab84e445920552091f7a44fe84404196227850cd493e6d119102c0e4104798752d22775eea23c902a90af2527cdab13d1e3902a90af25278dd5892837a40ae46bc949f3e944940b5205f2b5e4a4f97522ca07a90279d046d2023a11e58554813c682369418d88b2400282c520980be9dc43052055208ffc81204ac88060165040b018dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced4d0d6f6a7a53cb9bdaded4f1a6ae37f5bca97fb7806003397ed450961bc9f20bb2dc58965f94e526b2dc54969bc97273596e21cb71b2dc52965bc9726b596e23cb6d65f925596e27cbed65b9832c7794e54eb2fcb22c7796e52eb2dc5596bbc9727759ee21cb3d65b9578204047b420282bd207f086aeb0c08768704047b4010d5d11910ec0a0908768320aaab3320d8191210ec0241544f6740b0132420f83204517d9d01c10e9080604708a2063a0382ed2001c1f610440d750604db4202822f411035d219106c0d0908b681207a416740b0252420d80a82a8b1ce80600b4840300e82e8459d01c1669080607308a2263a03824d2001c1a610444d7506041b4302822f421035d319106c040908be0041d45c6757bc19a40ac68b5ae844d4045205e345713a11358654c178514b9d881a41aa60bca8954e440d20551a4210b5d689a81ea40ae6cbed6d7422aa03a982f9727b5b9d01c1861044982fb7bfa47317b58554c1f48bdae944d41a5205d32f6aaf13514b48154cbfa8834e442d205530fda28e3a11758054c14c403ae944d40e5205330179592322c877420ce60ebdb3ce3dd4095205338bedac3c20783f2820d8806e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef6a6b3375dbce9ea4d376fba7bd3c39b9edef4ba5b40b0b71c3fea23cb7d65b99f2cf797e501b23c509607c9f260591e22cb436579982c0f97e511b23c529647c9f268591e23cb6365799c2c8f97e509b23c519627c972bc2c4f96e529b23c5596a7c9f274599e21cb33132420380312109c09f94330496740701a2420381d82285e6740700a242038158268b2ce80603c2420381982688ace80e0444840701204d1549d01c1f19080e00408a2693a0382632101c1711044d37506044743028263208866e80c088e840404474110cdd419101c0e09088e80209aa53320381412101c0641345b674070302420380482688ece80e0404840701004d12b3a0382fd2101c101104473750604fb420282fd20885ed5d9159f0ba9f22a04d13c9d88e640aabc0241345f27a259902ab3218816e84434035205d3755ca813d13448154cd771914e44532055305dc7c53a11c543aa60ba8e4b740604fb401061ba8e4b75eea225902a4b218896e944b40852653104d1729d881640aa2c84205aa113d13c4895f910442b75225a01a9b21282e8359d889641aa2c87205aa51151564840b03704f36a9d7be835489555903db45a7940302b2820d89b6e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef686634ede4cf166aa37d3bc99eecd0c6f66de2d20384b8e1fcd96e539b2fc8a2ccf95e55765799e2ccf97e505b2bc509617c9f262595e22cb4b6579992c2f97e515b2bc52965f93e555b2bc5a965f97e53764798d2caf95e575b2bc5e9637c8f24659de24cb9b65794b820404374302825b207f08bcce80e0464840701304d17e9d01c1f59080e00608a20f750604d7420282eb20880ee80c08be010908ae8120fa48674070352420f83a04d1419d01c1d7200141cc479b433a03822b2001414c93e5b0ce80e032484010d36439a23320b8041210c48c0d8eea0c082e820404316383633a03820b200141ccd8e0b8ce80e03c484010333638a1332038171210c444bb4eea0c08ce81040431d1ae533abbe22721554e41109dd689e838a4ca0908a28f75223a0aa9720c82e88c4e448721558e40107da213d14148954310446775223a00a9f21104d1a73a11ed8754f91082e89cce80e06c08220f41f499ce5d740e52e53308a2f33a119d8554f91482e8739d88ce40aa7c0241744127a2d3902a1f43107da113d10548952f2088bed489e83ca4cae710445f6944f400242088f922d8459d7be84b4895af207be8a2f280e003a080e02cba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8db9bb5deacf366bd371bbcd9e8cd266f367bb3e56e01c1ad72fc689b2cbf29cbdb6579872cbf25cb3b65f96d59de25cbefc8f26e597e5796f7c8f27bb2bc5796df97e57db2fc812c8764d9cbf27e59fe50960fc8f247b27c50960fc9f261593e22cb4765f9982c1f97e5130912103c0e0908421abec992e80c081e850404210ddf64497506040f43028290866fb2643a03820721014148c33759729d01c103908020a4e19b2c85ce80e07e484010d2f04d16ad332018820404210ddf6429750604f74102821f4010c5e80c08ee850404df8720ba4f6740700f2420f81e04512a9d01c1dd9080e0bb1044a975060477410282ef4010a5d11910dc090908be0d419456674070072420f81604513a9d01c1372101c1ed1044e95576c593a58354490f41944127a234902a69218832ea44940a5225350451269d88622055ee8320caac135134a44a4a08a22c3a1125875449014174bf4e4449215592411065d51910dc0641940482e8019dbb282ba40a2496912c9b4e4459205520efbe4cf6a04e4499205532431065d7892803a44a4608a2877422ca0ea9f21004510e9d88b241aa3c0841f4b04644d92001c1ad10cc3975eea11c902a0f43f6504ee501c16ca080e056ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8db9b83de1cf2e6b03747bc39eacd316f8e7b73e26e01c19372fce8942c9f96e58f65f98c2c7f22cb6765f953593e27cb9fc9f27959fe5c962fc8f217b2fca52c7f25cb1765f96b59fe4696bf95e5ef64f97b59fe41967f94e54bb27c5996afc8f25559be26cbd765f9862cdf4c9080e00d4840f026e40f41399d01c16b9080e07508a2f23a0382572001c1ab1044cfea0c085e8204042f431055d01910fc011210fc1182a8a2ce80e0779080e0f7104495740604bf810404bf85207a4e6740f0222420f8350451659d01c12f210141c837e89255d11910bc00090842becb9bacaace80e079484010f25dde64cfeb0c089e830404214fa748564d6740f02c242008793a45b2ea3a038267200141c8d32992d5d019103c0d0908429e4e91aca6ceae780d48959a1044b57422aa06a9521d82a8b64e445521559e8720aaa313516548952a1044757522aa04a9f21c04513d9d882a40aa548420aaaf13517948956721881ae80c089e82202a0741d450e72e6a00a9d21082a8914e44f52055ea4310bda013511d4895ba10448d7522aa05a9521b82e8459d881a43aabc0841d44427a246902a2f401035d58808927d3490f70d246ba6730f358154690ad943cd9407041f0405044fd2cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde5cf2e6b23757bcb9eacd356fae7b73c39b9b770b08de92e3473fc9f2cfb2fc8b2cdf96e55f45d92692e5085936b26c65d9c97220cb91b29c5896a36439892c2795e564b29c5c9653c872b42ca794e51859be4f9653c9726a594e23cb6965399d2ca797e50cb29c31210282360322206831df5919a4322068d321028216f35c81c12a0382360d22206831cf1518a23220685321028216f35c81a12a038236061110b498e70a0c531910b4d18880a0c53c5760b8ca80a04d8e08085acc730546a80c08daa48880a0c53c5760a4ca80a08d4204042de6b902a35406046d242220681343108d561910b40e1110b40104d1189501416b1001416b2188c6aa0c08da448880a08d80201aa73320781b1210fc158268bcce80e0cf9080e02f1044137476c5c743aa4c80209aa813d15848957110449374221a0da9320682285e27a291902aa3208826eb44341c52650404d1149d888642aa0c83209aaa13d1604895211044d37406047f82201a0441345de72e9a06a9321d8268864e44532055a64210cdd489281e52653204d12c9d882642aa4c82209aad1311e4c5aec9664310cdd1896806a4ca4c08a2573422ca0e0908de82609eab730fcd81547905b287e62a0f08660705046fd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfdea6f236b5b769bc4deb6d3a6fd37b9bc1db8c770908da4c72fc28b32c6791e5fb6539ab2c3f20cbd964f94159ce2ecb0fc9720e597e589673caf223b29c4b961f95e5dcb2fc982c3f2ecb4fc8721e597e5296f3ca72ac2ce793e5fcb25c40960bca7221592e2ccb4564b9688204048b40028245217f08b6eb0c08168204040b4310edd019102c0009081684207a4b6740301f2420981f8268a7ce80605e4840301682e86d9d01c13c9080e0931044bb7406041f8704049f80207a47674030372420f81804d16e9d01c15c9080e0a31044efea0c08e68404041f8120daa3332098031210c4bca8e13d9d01c1ec908020e695317b750604b34102829857c6bcaf322068b322028216f312b47d2a0382360b222068312f41fb4067577c1fa4ca071044219d88f642aabc0f41e47522da03a9f21e04d17e9d887643aabc0b41f4a14e44bb2055de81203aa013d14e4895b721883ed2896807a4ca5b1044075506046d6608a2ed10448774eea283902a8720880eeb44740052e52308a2233a11ed8754f91082e8a84e442148150f41744c27a2a3902ac720888eeb44741852e50804d1098d8820dd428b7965fa499d7be838a4ca09c81e3aa93c20f81026206833d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfdee6f336bfb705bc2de86d216f0b7b5bc4dba2770b081693e347c565b9842c3f25cb2565f969592e25cba565b98c2c3f23cb6565b99c2c9797e56765b9822c5794e54ab2fc9c2c5796e52ab25c55969f97e56ab25c5d966bc8724d59ae25cbb565b98e2cd795e57ab25c3f410282f5200141cca3d16fea0c08d6810404318f46bfa53320580b1210c43c1afd279d01c11a908020e6f5553feb0c085683040431afaffa456740b02a242088797dd56d9d01c1ca908020e6f555bfea0c085682040421afaf4a9e486740b002242008797d55f2089d01c1f2908020e4f555c98dce806059484010f2faaae4566740b00c2420f80c0491d319102c0509089686200a7406044b4202824f431045ea0c08968004049f82204aacb22b9e3c125205f24cdce4513a11394815c833719327d189c840aa409e899b3ca94e4489205520cfc44d9e4ce784ee36a40ae499b8c993eb44f433a40ae499b8c953e8448479cacd4f1044d13a0382c521886e4210a5d469d7d1902a90f796248fd1892839a40ae4bd25c9efd3892829a40ae4bd25c953e9441405a902796f49f2d43a11a5825481bc892b791a9d88622055206fe24a9e5623a21c9080603108e6743af7501a4815c83b012188123220980314102c4637a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7b5bc3db9aded6f2b6b6b775bcadeb6d3d6febdf2d20d8408e1f3594e546b2fc822c3796e51765b9892c3795e566b2dc5c965bc8729c2cb794e556b2dc5a96dbc8725b597e4996dbc9727b59ee20cb1d65b9932cbf2ccb9d65b98b2c7795e56eb2dc5d967bc8724f59ee952001c19e9080602fc81f82823a0382dd2101c11e104485740604bb420282dd20880aeb0c0876860404bb401015d11910ec040908be0c4154546740b0032420d81182a898ce80603b4840b03d0451719d01c1b69080e04b1044257406045b4302826d20889ed219106c090908b682202aa93320d80212108c83207a5a6740b0192420d81c82a894ce8060134840b0290451699d01c1c69080e08b1044657406041b4102822f40103da3b32b5e06520513562eab13512948154c58b99c4e442521553061e5f23a11958054c184959fd58908337e2c0e41544127a222902a90b7df24afa81351214815c8db6f9257d219106c08410479fb4df2e774eea24a902a982f9456d689a802a40ae60ba55574222a0fa982f94269559d88ca42aa60be50fabc4e44552155208f48485e4d27a2ca902a90472424afae1111e4952cb60104730d9d7ba81aa40ae4612d10440919107c1814106c4037a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7bdbd9db2ede76f5b69bb7ddbdede16d4f6f7bdd2d20d85b8e1ff591e5beb2dc4f96fbcbf200591e28cb836479b02c0f91e5a1b23c4c9687cbf208591e29cba36479b42c8f91e5b1b23c4e96c7cbf204599e28cb9364395e9627cbf214599e2acbd36479ba2ccf90e5990912109c010908ce84fc2178596740701a2420381d82a8b3ce80e0144840702a0451179d01c178484070320451579d01c1899080e02408a26e3a0382e32101c1091044dd750604c7420282e320887ae80c088e860404c74010f5d419101c0909088e8220eaa53320381c12101c0141d45b674070282420380c82a88fce80e0604840700804515f9d01c1819080e02008a27e3a0382fd2101c1011044fd750604fb420282fd208806e8ec8af78754c1eca2813a11f58554c1eca2413a11f58654e90341345827a29e902a98af250fd189a83ba40ae66bc9437522ea0aa982f95af2309d883a43aa60be963c5c6740b00f0411e66bc92374eea2e1902a984ffa2375221a0aa982f9a43f4a27a2c1902a984ffaa375221a08a982f9a43f4627a2d1902a98def5589d884642aa607ad7e33422ca090908623ee78dd7b987c642aa60a668e395070473820282bde96694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f6f39e6e4ed146fa77a3bcddbe9decef076e6dd0282b3e4f8d16c599e23cbafc8f25c597e5596e7c9f27c595e20cb0b6579912c2f96e525b2bc549697c9f272595e21cb2b65f935595e25cbab65f975597e4396d7c8f25a595e27cbeb6579832c6f94e54db2bc5996b724484070332420b805f2876095ce80e0464840701304d16a9d01c1f59080e00608a2d7750604d7420282eb2088ded019107c0312105c0341b446674070352420f83a04d15a9d01c1d72001c1551044eb740604574002822b2188d6eb0c082e8304049743106dd019105c0209082e8520daa83320b80812105c0c41b449674070012420b8108268b3ce80e03c4840703e04d1169d01c1b99080e0ab10445b750604e7400282af40106dd3d915df0aa9b20d82e84d9d883643aa60fa45db7522da08a982e917edd089683da40aa65ff4964e446b215530fda29d3a11bd01a982e917bdad13d16a48154cbf6897ce80e06c08224cbfe81d9dbb6817a4ca3b1044bb7522da09a9f23604d1bb3a11ed8054790b82688f4e446f42aa6c87207a4f27a23d902aef4110edd5896837a4cabb1044ef6b44f4082420380b82799fce3db41752e57dc81edaa73c20f8082820388b6e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef676adb7ebbc5defed066f377abbc9dbcdde6eb95b4070ab1c3fda26cb6fcaf27659de21cb6fc9f24e597e5b9677c9f23bb2bc5b96df95e53db2fc9e2cef95e5f765799f2c7f20cb2159f6b2bc5f963f94e503b2fc912c1f94e543b27c58968fc8f251593e26cbc765f9448204048f43028227207f08bed219103c0a09081e8320baa83320781812103c0241f4b5ce80e0414840f01004d1373a0382072001c18f2088bed51910dc0f09087e0841f49dce8060081210f41044dfeb0c08ee8304043f8020fa416740702f242088f980fca3ce80e01e484010d3aabba43320b81b1210c4b4ea2eeb0c08ee82040431c3a72b3a03823b210141ccf0e9aace80e00e484010337cbaa63320f826242088193e5dd7d915bf06a9721d82e8864e44572055ae4210ddd489e812a4ca6508a25b3a11fd00a9f22304d14f3a117d07a9f23d04d1cf3a117d03a9f22d04d12f3a115d8454f91a82e8b6ce80e03608a2af20887ed5b98b6e43aafc8a409422914e443f43aafc024114a113d12d48959f20888c4e443720556e4210599588521848150b41e474224a04a9120141146844940b1210847c9d3045a4ce3de4205502c81e8a541e10cc050a086ea59b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbd3de8ed216f0f7b7bc4dba3de1ef3f6b8b727ee16103c29c78f4ec9f26959fe5896cfc8f227b27c56963f95e573b2fc992c9f97e5cf65f9822c7f21cb5fcaf257b27c5196bf96e56f64f95b59fe4e96bf97e51f64f94759be24cb9765f98a2c5f95e56bb27c5d966fc8f2cd040908de80040431b7a40feb0c085e8304042163831439750604af40028290b1418a477406042f41028290b1418a5c3a03823f40028290b1418a47750604bf83040421638314b9750604bf810404216383148fe90c085e840404216383148feb0c087e09090842c606299ed01910bc0009087e014194476740f03c2420f83904d1933a0382e72001c1cf2088f2ea0c089e8504043f85208ad519103c0309087e0241944f6740f0342420f83104517e9d5df17c902af921880ae844941752251682a8a04e447920559e84202aa413d1e3902a4f401015d6892837a4ca631044457422ca05a9f2280451519d887242aa409eb893a298ce80e02908a28721888aebdc45c520558a431095d089a808a44a5108a2a774222a04a9521882a8a44e440520550a42103dad1351494895a721884ae944540252e52908a2d21a11416ef9ec4908e6323af750294895d2903d54467940f0515040f024dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fceded256f2f7b7bc5dbabde5ef3f6bab737bcbd79b780e02d397ef4932cff2ccbbfc8f26d59fe55945d22598e906523cb56969d2c07b21c29cb8965394a9693c87252594e26cbc96539852c47cb724a598e91e5fb6439952ca796e534b29c5696d3c9727a59ce20cb19132220e8322002822e23e40f4153950141970e111074e921889aa90c08ba348880a04b0b41d45c6540d0a54204045d6a08a2162a03822e06111074f74110c5a90c08ba684440d0a584206aa93220e8922302822e0504512b9501419714111074c920885aab0c08ba284440d02581206aa33220e822110141971882a8adca80a0738880a0c37c0ff3259501416710014187f946783b9501419708111074986f84b7d71910bc0d0908629e71d2416740f067484010f38c938e3abbe21d20553a421075d289a81da44a7b08a29775226a0ba9f2120451679d885a43aab48120eaa213514b48955610445d75226a01a9120741d44d27a266902acd2188baeb0c08fe0441d41482a887ce5dd41d52a50704514f9d88ba42aa748320eaa513516748952e1044bd7522ea04a9f23204511f9d887a43aaf48120eaab13514f48955e1044fd3422ca0d0908429e889aa2bfce3dd41752a51f640ff5571e10cc0d0a08dea29b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbd4be55d6aefd27897d6bb74dea5f72e837719ef12107499e4f8516659ce22cbf7cb7256597e4096b3c9f283b29c5d961f92e51cb2fcb02ce794e5476439972c3f2acbb965f931597e5c969f90e53cb2fca42ce795e55859ce27cbf965b9802c1794e542b25c58968bc872d10409081681040431df7c7a456740b010242088f9e6d35c9d01c102908020e69b4fafea0c08e6830404314fa798a7332098171210c43c9d62bece80601e484010f3748a053a03828f43028298a7532cd41910cc0d0908629e4eb14867403017242088793ac5629d01c19c908020e6e9144b7406047340028298a7532cd51910cc0e09083e0441b44c6740301b2420f82004d17295014197151110740f4010ad5019107459100141773f04d14a9d5df115902a2b21885ed3896819a4ca7208a2553a112d8154590a41b45a27a245902a8b21885ed7896801a4ca4208a23774229a07a9321f82688d4e447321555e85205aab3220e8324310bd0241b44ee72e5a0ba9b20e8268bd4e446f40aaac8120daa013d16a4895d7218836ea44f41aa4ca2a08a24d3a116d8454d90441b45927a2f5902a1b2088b6684404995cb84c10cc5b75eea1cd902a5b207b68abf280e0639880a0cb4437a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7b97cfbbfcde15f0aea07785bc2bec5d11ef8ade2d20584c8e1f1597e512b2fc942c9794e5a765b9942c9796e532b2fc8c2c9795e572b25c5e969f95e50ab25c51962bc9f273b25c5996abc87255597e5e96abc9727559ae21cb3565b9962cd796e53ab25c5796ebc972fd040908d6830404eb43fe109cd01910ac030908d685203aa93320580b1210ac0d41744a6740b0062420581382e8b4ce8060354840b03a04d1c73a0382552101c1e72188cee80c0856860404ab40107da23320580912107c0e82e8acce8060054840b02204d1a73a0382e52101c1672188cee90c0896850404cb41107da63320580612107c0682e8bcce806029484010f3ba8fcf7506044b42028298170f5dd019102c010908625e3cf485ceaef80548952f2088bed489e83ca4cae710445fe944740e52e53308a28b3a119d8554f91482e86b9d88ce40aa7c0241f48d4e44a721553e8620fa562722cc6bf04e41107da73320581c82e80404d1f73a77d177902adf4310fda013d137902adf4210fda813d1454895af21882ee944f425a4ca571044977522ba04a9721982e88a4e443f40aafc0841745523a2c72101c16210ccd774eea12b902a57217be89af280e0e3a0806031ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbbb1aded5f4ae9677b5bdabe35d5defea7957ff6e01c10672fca8a12c3792e51764b9b12cbf28cb4d64b9a92c3793e5e6b2dc4296e364b9a52cb792e5d6b2dc4696dbcaf24bb2dc4e96dbcb720759ee28cb9d64f96559ee2ccb5d64b9ab2c7793e5eeb2dc43967bca72af040908f6840404218f238e4eab3320d81d1210843c603f3a9dce806057484010f280fde8f43a03829d210141c803f6a333e80c0876820404210fd88fcea83320d801121084bc042d3a93ce80603b484010f212b4e8cc3a03826d210141c84bd0a2b3e80c08b6860404212f418bbe5f6740b02524200879095a74569d01c116908020e42568d10fe80c0836830404212f418bcea63320d804121084bc042dfa419d01c1c69080e08b1044d97506041b4102822f40103da4b22b1e9d1d5205f234d3e81c3a11658354813ccd34fa619d88b242aa409e661a9d5327a22c902a90a799463fa21311e4f924d199218872e944940152252304d1a33a11a58354490f41945b6740b02104515a08a2c774eea2dc902a90e736453fae13512e4815c81b27a29fd0892827a40ae48d13d1797422ca01a90279e344f4933a11e5815481bc43293aaf4e448f43aa40dea1141dab1111e4d25c0308e67c3af7505e4815c8dbdc2088123220f8042820d8806e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef6aeb3775dbcebea5d37efba7bd7c3bb9edef5ba5b40b0b71c3fea23cb7d65b99f2cf797e501b23c509607c9f260591e22cb436579982c0f97e511b23c529647c9f268591e23cb6365799c2c8f97e509b23c519627c972bc2c4f96e529b23c5596a7c9f274599e21cb33132420380312109c09f943505d6740701a2420381d82a886ce80e0144840702a04514d9d01c1784840703204512d9d01c1899080e02408a2da3a0382e32101c109104475740604c7420282e32088eaea0c088e860404c74010d5d319101c0909088e8220aaaf3320381c12101c0141d440674070282420380c82a8a1ce80e060484070080451239d01c1819080e02008a217740604fb4302820320881aeb0c08f6850404fb4110bda8b32bde18520513336da213512348154cccb4a94e4498c1514308a2663a11d5835481bcb724bab94e4475205520ef2d896ea113512d4815c87b4ba2e37422aa01a902796f49744b9d01c13e104490f79644b7d2b98b5a42aa60be0ad85a27a216902a98af02b6d189a819a40ae6ab806d75226a02a982f92ae04b3a11b58554c17cb9bd9d4e44ad2155305f6e6faf11511e4840b0370473079d7ba81da40ae6311b1d940704f3800282bde96694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36fef38e6e4dd14efa67a37cdbbe9decdf06ee6dd0282b3e4f8d16c599e23cbafc8f25c597e5596e7c9f27c595e20cb0b6579912c2f96e525b2bc549697c9f272595e21cb2b65f935595e25cbab65f975597e4396d7c8f25a595e27cbeb6579832c6f94e54db2bc5996b7244840703324200879d77cf4389d01c18d9080e02608a2f13a0382eb2101c10d104413740604d7420282eb208826ea0c08be010908ae81209aa43320b81a12107c1d82285e6740f0354840701504d1649d01c1159080e04a08a2293a0382cb2001c1e5104453750604974002824b2188a6e90c082e8204041743104dd719105c0009082e84209aa13320380f12109c0f4134536740702e2420f82a04d12c9d01c1399080e02b1044b37576c56741aacc86209aa313d10c4815cc174a5fd189681aa40ae60ba57375229a02a982f942e9ab3a11c543aa60be503a4f27a289902a982f94ced789683ca40ae60ba50b74060467431061be50ba50e72e5a00a982f98cb64827a279902a98cf688b75229a0ba982f98cb64427a239902a98cf684b75225a02a982e93a2ed3896811a40aa6ebb85c2322c8f3231da65bb042e71e5a06a982997fac501e107c1214109c4537a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7bb7d6bb75deadf76e83771bbddbe4dd66efb6dc2d20b8558e1f6d93e5376579bb2cef90e5b76479a72cbf2dcbbb64f91d59de2dcbefcaf21e597e4f96f7caf2fbb2bc4f963f90e5902c7b59de2fcb1fcaf20159fe48960fcaf221593e2ccb4764f9a82c1f93e5e3b27c22410282c72101c113903f04efeb0c081e8504048f4110edd319103c0c09081e8120fa406740f020242078088228a4332078001210fc0882c8eb0c08ee8704043f8420daaf3320188204043d04d1873a0382fb2001c10f20880ee80c08ee850404df8720fa486740700f2420f81e04d1419d01c1dd9080e0bb10448774060477410282ef40101dd61910dc090908be0d417444674070072420f81604d1519d01c1372101c1ed1044c77476c58f42aa603ee91fd789e830a40ae693fe099d880e42aa603ee99fd489e800a40ae693fe299d88f643aa603ee99fd6892804a982f9a4ffb14e44fb2055309ff4cfe80c086e8320c27cd2ff44e72e3a03a9f20904d1599d884e43aa7c0c41f4a94e442721554e41109dd389e838a40a661afb994e44e720553e83203aaf13d15948954f21883ed788282f2420b81582f982ce3d741e52e573c81ebaa03c2098171410dc4a37a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7b77d0bb43de1df6ee887747bd3be6dd71ef4edc2d2078528e1f9d92e5d3b2fcb12c9f91e54f64f9ac2c7f2acbe764f933593e2fcb9fcbf20559fe4296bf94e5af64f9a22c7f2dcbdfc8f2b7b2fc9d2c7f2fcb3fc8f28fb27c49962fcbf21559be2acbd764f9ba2cdf90e59b091210bc010908de44fc214819e80c085e830404af431045ea0c085e810404af421025d61910bc0409085e86208ad21910fc011210fc11822889ce80e0779080e0f7104449750604bf810404bf85204aa6332078111210fc1a8228b9ce80e0979080e0571044297406042f4002825f401045eb0c089e870404216d969429750604cf41028290866fca189d01c1b3908020a4e19bf23e9d01c1339080206484993295ce80e06948401032c24c995a65573c652a4895d410446974228a8154b90f8228ad4e44d1902a292188d2e944941c52250504517a9d889242aa248320caa0135114a44a1208a28c3a114542aa248620caa43320780a82288020caac7317658254c90c41944527a20c902a192188eed789281da44a7a08a2ac3a11a58154490b41f4804e445921551e8020caa61351164895fb21881ed4882816121084049e5366d7b987b241aa3c08d943d9950704634101c19374334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b77797bcbbecdd15efae7a77cdbbebdeddf0eee6dd0282b7e4f8d14fb2fcb32cff22cbb765f957510e12c972842c1b59b6b2ec643990e548594e2ccb51b29c449693ca7232594e2ecb2964395a9653ca728c2cdf27cba96439b52ca791e5b4b29c4e96d3cb720659ce981001c12003222018603ed8945619100cd221028201e6834d199501c1200d222018603ed83ca3322018a442040403ccf0a9acca8060108308080698e153399501c1201a11100c30c3a7f22a03824172444030c00c9f9e5519100c922202820166f854416540308842040403ccf0a9a2ca8060108908080698e153259501c1c02102820166f8f49cca8060601001c1c04210555619100c1221028241040451159d01c1db9080e0af1044557506047f8604047f81207a5e6757bc2aa4caf31044d57422aa0ca9520582a8ba4e449520559e8320aaa113510548958a10443575222a0fa9f22c04512d9d88ca42aa948320aaad1351194895672088eae80c08fe0441541a82a8aece5d540752a52e04513d9d886a41aad48620aaaf13510d48959a10440d7422aa06a9521d82a8a14e440d20551a421035d289a81ea44a7d08a2173422ca070908de82606eac730f3582547901b2871a2b0f08e60305046fd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3e48e583d43e48e383b43e48e783f43ec8e0838c7709080699e4f8516659ce22cbf7cb7256597e4096b3c9f283b29c5d961f92e51cb2fcb02ce794e5476439972c3f2acbb965f931597e5c969f90e53cb2fca42ce795e55859ce27cbf965b9802c1794e542b25c58968bc872d1040908168104048b42fe10f4d319102c040908168620eaaf3320580012102c084134406740301f2420981f8268a0ce80605e484010f2f5a09483740604f34002824f42100dd619107c1c12107c02826888ce80606e4840f03108a2a13a0382b92001c147218886e90c08e68404041f81201aae3320980312107c18826884ce8060764840f02108a2913a0382d9200141ccb77947a90c0806591101c100f35c81d12a03824116444030c03c57608cceaef86848953110446375221a09a9320a82689c4e44c321554640108dd7896828a4ca3008a2093a110d8654190241345127a281902a83208826e944d41f5265000451bcca8060901982a81f04d1649dbb281e52653204d1149d882642aa4c82209aaa13d1784895091044d374221a0ba9320e8268ba4e44d32055a64310cdd089680aa4ca5408a2991a1141a6a801e6b9bab374eea119902a33217b6896f280607e4c4030c84437a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7ffb209f0ff2fba0800f0afaa0900f0afba0880f8ade2d20584c8e1f1597e512b2fc942c9794e5a765b9942c9796e532b2fc8c2c9795e572b25c5e969f95e50ab25c51962bc9f273b25c5996abc87255597e5e96abc9727559ae21cb3565b9962cd796e53ab25c5796ebc972fd040908d683040431df36d8a2332058071210c47c7f6eabce80602d484010f3fdb96d3a038235200141ccf7e7ded41910ac06090862be3fb75d6740b02a24208879c6c90e9d01c1ca908020e619276fe90c085682040431cf38d9a9332058011210c43ce3e46d9d01c1f2908020e61927bb740604cb42028298679cbca3332058061210c43ce364b7ce806029484010f38c93777506044b4202824f4310edd119102c0109083e0541f49eceaef81e4895f72088f6ea44b41b52e55d08a2f77522da05a9f20e04d13e9d887642aabc0d41f4814e443b2055de82200ae944f426a4ca760822af13d15648956d1044fb7506048b43106d8120fa50e72eda0fa9f22104d1019d8842902a1e82e8239d88f641aa7c0041745027a2bd902aef43101dd289e820a4ca2108a2c33a111d8054f90882e8884644052001c16210cc4775eea1c3902a47207be8a8f28060015040b018dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced831a3ea8e9835a3ea8ed833a3ea8eb837a3ea87fb7806003397ed450961bc9f20bb2dc58965f94e526b2dc54969bc97273596e21cb71b2dc52965bc9726b596e23cb6d65f925596e27cbed65b9832c7794e54eb2fcb22c7796e52eb2dc5596bbc9727759ee21cb3d65b9578204047b420282bd207f08aeea0c08768704047b40105dd31910ec0a0908768320baae3320d8191210ec024174436740b0132420f83204d14d9d01c10e9080604708a25b3a0382ed2001c1f610443fe90c08b68504045f8220fa596740b0352420d80682e8179d01c1969080602b08a2db3a03822d2001c13808a25f7506049b410282cd11886212e90c08368104049b421045e80c08368604045f8420323a03828d200141c84b6362accaae788c815481bcee3cc6e94494085205f2baf39840e76ce536a40ae475e731913a11fd0ca90279dd794c629d88302f30fb0982284a27a21b902a37218892e844740d52e53a0451529d01c186104457218892e9fca39f145225190451729d88a22055924010a5d08928125225310451b44e440e522580204aa9135134a44a4a08a2189d889243aaa48020ba4f2322c8abea02c8cbae6352e9dc4331902af741f6502ae501c182a0806003ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8db079d7dd0c5075d7dd0cd07dd7dd0c3073d7dd0eb5f070497d4ac503a5fc142f1a7ddbcf8d0cda8f8d00d3aaed3718d8eab745ca1e3321d97e8f8918e1fe8f89e8eefe8f8968e6fe8f89a8e8b747c45c797747c41c7053a3ea7e33c1d9fd1718e8e4fe9384bc727749ca1e3633a4ed3718a8e9351f13e22232f197849cf4b3a5ed2f2928697d4bca4e2e53e5e627849c94b342f297849ce4b325e92f2928497285e12f312c94bc08be3c5f2627889e025119dc5af74dca6e3173a7ea6e3273a6eb158949722bc14e6a5102f057929c04b7e5ef2f112cb4b5e5e9ee4250f2f4ff0f2382f8ff1929b974779c9c5cb23bce4e4e5615e72f0f2102fd9797990976cbc3cc04b565eeee7250b2f9979c9c44b7d5eeaf15297973abcd4e6a5162f3579a9c14b755eaaf1f23c2f5579a9c24b655e9ee3a5122f1579a9c0cbb3bc94e7a51c2f657979869732bc94e6a5142f4ff3529297a77829c14b715e8af1d28b979ebcf4e0a53b2fdd78e9ca4b175e3af3f2322f9d78e9c84b075edaf3d28e97977869cb4b1b5e5af3d28a9796bcc4f1d28297e6bc34e3a5292f4d78799197c6bcbcc04b235e1af2d2809799bccce0653a2fd37899cacb145e26f312cfcb245e26f2328197f1bc8ce3652c2f637819cdcb285e46f2328297e1bc0ce365282f437819cccb205e06f2328097febcf4e3a52f2f7d78e9cdcb165e36f3b289978dbc6ce0653d2feb7859cbcb1a5edee0e5755e56f3b28a97d77859c9cb0a5e96f3b28c97a5bc2ce165312f8b7859c8cb025ee6f3328f97577999cbcb2bbccce165362fb37839c1cb715e8ef172949723bc1ce6e5102f0779f9889703bc7cc8cb7e5e3c2f215e3ee0651f2feff3b29797f778d9c3cbbbbcece6e51d5e76f1f2362f3b79798b971dbc6ce7e54d5eb6f1b295979bbcdce0e53a2fd778b9cacb155e2ef37289971f79f98197ef79f98e976f79f98697af79b9c8cb57bc7cc9cb17bc5ce0e5735ecef3f2192fe778f99497b3bc7cc2cb195e3ee6e5342fa77861e733ec7c869dcfb0f319763ec3ce67d8f90c3b9f61e733ec7c869dcfb0f319763ec3ce67d8f90c3b9f61e733ec7c869dcfb0f319763ec3ce67d8f90c3b9f61e733ec7c26119fc6afbcdce6e5175e7ee6e5275ed8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff0cfb9f61ff33ec7f86fdcfb0ff19f63fc3fe67d8ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ff33ec7f86fdcfb0ff19f63fc3fe67d8ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff2cfb9f65ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ffb3ec7f96fdcfb2ff59f63fcbfe67d9ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff1cfb9f63ff73ec7f8efdcfb1ff39f63fc7fee7d8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fdcfb1ff39f63fc7fee7d8ff1cfb9f63ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f60ff0bd8ff02f6bf80fd2f681015eebef7f6411f1ff4f5413f1ff4f7c1001f0cf4c1201f0cf6c1101f0cf5c1301f0cf7c1081f8cf4c1281f8cf6c1181f8cf5c1381f8cf7c1041f4cf4c1241f50c5c93e98e283a93e98e683e93e98e18399f8190de4750ac12cc8842656d9102b96979a7f153255a905c1934f119ed87ffc3fd5ff0a9effa952038227bf123cb1fffc2f9effb378fea94a35089e020af0c4def96f54f93378eea8521582a7e07f194fecbffa379ffba378fe4595ca103c85fe8b7862ff9d50f18fe0f937552a41f014fe2fe18995c4677f2f1ea14a05089e22ff053cb177ab58eef7e0b94b95f2103c45ffc378627f4fc567ee86e77754290bc153ec3f8827f6f7562c2de1f99d55ca40f014ff0fe189fd23159ffe7778fe409552103c25fe037862ff68c5a7fe159e3f58a52404cf53098c27f6cf54fc3f4f5bfe13554a40f0944c403cb17fb662d17fc6f327ab1483e0795a67ecb424a40ae4452f31a574222a01a90279d14b4c699d88208f6e8d290e41544627a222902a4521889ed189a810a44a6108a2b23a11158054817c1d23a69c4e44f92055f24310954f3044b17fbe22c6896221809ed5b987ca43aa405ec519534127a2b2902a905771c654d489a80ca40ae4559c319574222a05a902791567cc733a1155825481bc5c3aa6b24e44152055202f978ea992208862ff5ac5ffb9b3fe4b550a432057d5b9832a43aa405e72af1311e451e1c16c08a0f61ac32f5d00e197ae103c1d34865f5e06845f3a43f074d4187ee90808bf7482e0e9a431fcd21e107ee900c1f3b2c6f0cb4b80f04b3b089ece1ac32f6d00e197b6103c5d34865f5a01c22fad2178ba6a0cbfc401c22f2d2178ba690cbf3407845f5a40f074d7187e690a08bf3483e0e9a131fcf22220fcd20482a7a7c6f0cb0b80f04b63089e5e1ac32f0d01e19746103cbd35865fea03c22f0d2078fae8ecfaf48654e90341d45727a29e902a90d715c6f4d389a83ba40ae4758531fd7522ea0aa902e941c60cd089a833a40ae4758531037522ea04a902795d61cc209d883a40aa405e5718335863f8a51e0410e46585314374eea1c1902a43208886ea44341052651004d1309d88fa43aa0c80201aae13515f48957e10442374221a0ea932028268a44e444321558641108dd2187ea90308bfd485401ead73078d84541905d9410844fff7a1ebab6a366fdda163e7ce75e23ab769d96b6abc0f66856ed33a3b74fb74a252f1a11951f1a1e9744ca3632a1d53e8984c473c1d93e89848c7043ac6d3318e8eb1748ca163341da3e81849c7083a86d3318c8ea1740ca163301d83e81818153f202abe7f547cbfa8f8be51f17da2e27bd3bfbb998e4d746ca463031debe95847c75a3ad6d0f1061dafd3b19a8e5574bc46c74a3a56d0b19c8e65742ca563091d8be95844c7423a16d0319f8e7974bc4ac75c3a5ea1630e1db3e99845c7713a8ef1737888023fef2be0277f05fc0cb0809f0616f073c1027e4258c0cf0a0bf8a961013f3f2ce0278905fc4cb1809f2e16f073c6027ee258c0cf1e0bf82964013f8f2ce0279305fc8cb2809f5616f073cb027e8259c0cf320bf8a966013fdf2ce0279d05fcccb3809f7e16f073d0027e225ac0cf460b6646f960ceffdef3f188dd1acc81e4995ef9eb45062d2dd3b94dbb766d5a4d9d346849cd361d5ab58bc3bc24217c767ff577297c4eed3bb58bf3c1dc8953062dafd4ad7da78a2dab76ec1a9fc80e5afc4cc70e5dbac6474cfaeb273b685599361d9a76ee55be4d5cbb16cf779a926861d936dd23122daad9b563a7c9132702fe0bfe790f4d9a0cc14b4c303fa85701db2841aeefd589e8bf587a8025d4ef5d7ee86fddbc7bbf75ff0b2e11c16ca1f90a7fe7e8eae6237ee3feffad3d59ddd6c69e10e231788b4b77eedcb4d7e94431985302bc7f0b7322a9b49c486a2d279246cb89a4d57222e9b49c487a2d279241cb8964d4722299b49c48662d279245cb89dcafe544b26a399107b49c4836c4a7807fdc9a50a761810f16fa60910f16fb60890f96fa60990f96fb60850f56fae0351facf2c16a1fbcee83377cb0c6076b7db0ce07eb7db0c1071b7db0c9079b7db0c5075b7db0cd076ffa60bb0f76f8e02d1fecf4c1db3ed8e583777cb0db07effa608f0fdef3c15e1fbcef837d3ef8c007211f781fecf7c1873e38e0838f26ce1ab4b04ac7eef1d6fcf67f4dc46fff3722d13f3e9e24facb1f4f62f30e5a59be63e7b836ad3a700f6ff2bae6b456ebdca67bd3ae71dcd8ebdaa6638749839657886bda298c29dee59d3c68558db8566dba748deb5cb1438bb89e1177fc6bf3cfff711bf3db3907ee7fce3d18b4883f684d8afaed5f278af89fcf419320ada2f9804f53fff44ecd65d5bb75ecda26ae43d7a9a8cfd48b10bf3a7ffdd34b3e1f1cf2c1c19dffa28bbbb846e9aacf969b446dc18311a27c28f40beec5f5ffef47b808c2f9603c8411f615adf8edb458cd763ae283c3f2763a2c6fa72309b39d1643381f866ca723dab7d37235dbe9980f8ecadbe9a8bc9d8e25cc765a0ee17c14b29d8e69df4e2bd46ca7133e382e6fa7e3f2763a9130db690584f371c8763aa17d3bad54b39d4ef9e0a4bc9d4ecadbe954c26ca79510ce2721dbe994f6edf4919aedf4b10f4ecbdbe9b4bc9d3e4e98edf41184f369c876fa5863aa07f2fcc26001a4ca19e4480b9e9238039dd77e726f5e7b075e6282f9419d559992a0eb3b0b4f49c4635a4e902a9faadc5667e9c4208db998e52a4399a01fde3948b473b9ea98db39a8817f76cfc0efc04b4c303fa8f32a0d9caeefbcd2981b1a18c49a200f7e0e1642aa7caefacef273a8315db8674c77e02526981fd4172a8d89aeef8bbff59de5972ab7d5177462983bcb957fe73bcbaf2077962b55df597e0535f08bf70cfc0ebcc404f383fa5aa581d3f57dadf4cef26bd5bf77a7a1bf77dfdcfbbdbb032f31c1fca0be55f97b47d7f7eddffac6e93b95dbea5b3a31cc8dd3aabff38dd3f7901ba755aa0dfc7ba881ff70cfc0efc04b4c303fa81f551a385ddf8f4a6f9c7e54fd7b7714fa7b77e9deefdd1d788909e6077559e5ef1d5ddfe5bff58dd31595dbea329d18e6c6e9f5bff38dd355c88dd3ebaa0dfc2ad4c0afdd33f03bf01213cc0feaba4a03a7ebbbaef4c6e9baeadfbbe3d0dfbb1bf77eefeec04b4c303fa89b2a7fefe8fa6efead6f9c6ea9dc5637e9c430374e6bfece374e3f416e9cd6a836f09fa006fef33d03bf032f31c1fca07e5169e0747dbf28bd71fa45f5efdd49e8efdded7bbf7777e02526981fd4af2a7fefe8fa7efd3bdf38452652b9ad7ea513c3dc38adfb1bdf384546406e9cd66936f0c808a481479a7b067e075e6282f941598d06ced76775de384180fddfafb62eab16d722ae7397b80e9327c7fb6061f831e207c3ebe1d0ed44f13ed2f9c840fce74e277a8cfed34bc2ffccd2f0ba2cbc1e0dafc7c3ebc9f0fa5a785d155e5787d7d7c3eb1be1754d785d1b5ed785d7f5e1754378dd185e3785d7cde1754b78dd1a5eb785d737c3ebf6f0ba23bcbe155e7786d7b7c3ebaef0fa4e78dd1d5edf0daf7bc2eb7be1756f787d3fbcee0baf1f84d75078f5e1757f78fd30bc1ef88d54a48f4c7c57c20bf89f8874e135f2b77f2eca4726d1fb173f29c08712caee0b40cd3ed93db3ff5f708908c6b9922bb47ababae49a9f4d0cd8dad813caa7efd9c40f6a793a62762d27f2909613c9a1e5441ed6722239b59cc8235a4e249796137954cb89e4d672228f693991c7b59cc8135a4e248f96137952cb89e4c53d9b78b68f4ce123a37d644a1f19e323eff391a97c646a1f99c647a6f591e97c64faffc6a382b7c47578b95b5cb7b86add9ab56bd3fc1f0f0b66e97f3f303899e20706f38780bffa834ed0a79445a6d4f294b2c88c3e3283f894b2c80ce253ca223326c853ca225342386788873052fed0bbc81835db29b38fcc246fa74cf276ca9c30db2906c23913643b65d6be9dd2a8d94ef7fbc82cf276ca226fa7fb13663ba58170ce02d94ef76bdf4e69d56ca7077c6456793b6595b7d30309b39dd2423867856ca707b46fa7746ab6d3833e329bbc9db2c9dbe9c184d94ee9209cb341b6d3831a430e0520985340aa64d7fc1c2ec4d9fdd3d4eba17b53af3bf01213cc0f2a87ca88035d5f0e9d19b5c8e4902a0fabdc5639e8c43019b50d2a336aa01f5e4e48466d83ea8c5a4ea8813f72cfc0efc04b4c303fa85c2a0d9cae2f97d28c5a2e8d4f78cd0731a66848954755df593e0a35a6dcf78ce90ebcc404f3837a4ca531d1f53df6b7beb37c5ce5b67a8c4e0c7367b9e9ef7c67f904e4ce7293ea3bcb27a0069ee79e81df819798607e504faa3470babe2795de593ea9faf72e0bf4f72eefbddfbb3bf01213cc0f2a56e5ef1d5d5fecdffac6299fca6d45ff9b0f73e3b4e5ef7ce3941f72e3b445b581e7871a78817b067e075e6282f941155469e0747d0595de381554fd7b9715fa7b57e8deefdd1d788909e6075558e5ef1d5d5fe1bff58d531195dbaa309d18e6c669dbdff9c6a928e4c6699b6a032f0a35f062f70cfc0ebcc404f3832aaed2c0e9fa8a2bbd712aaefaf72e1bf4f7aec4bddfbb3bf01213cc0fea2995bf77747d4ffdad6f9c4aaadc564fd189616e9cb6ff9d6f9c9e86dc386d576de04f430dbcd43d03bf032f31c1fca04aab3470babed24a6f9c4a27fc83ca22a3c30fd0ca105e33fdf618ad323ef299ff7b397fdd8cca2604e5bf7e5ae5749e56799da7f5acced3aaa0f3b42aea3cad4a3a4feb399da75559e76955d1795a55759ed6f33a4fab9aced3aaaef3b46ae83cad9a3a4fab96ced3aaadf3b4eae83cadba3a4fab9eced3aaaff3b41ae83cad863a4fab91ced37a41e76935d6795a2fea3cad263a4faba9ced36aa6f3b49aeb3cad163a4f2b4ee769b5d4795aad749e566b9da7d546e769b5d5795a2fe93cad763a4fabbdced3eaa0f3b43a024e4b7e394d7e1a0ddd179e13a50aafa9c36b96f09a35bc660bafe9c36bd9f05a2ebc960fafcf86d70ae1b56278ad145e9f0baf95c36b95f05a35bc3e1f5eab85d7eae1b54678ad195e6b85d7dae1b54e78ad1b5eeb85d7fae1b541786d185e1b85d717c26be3f0fa62786d125e9b86d766e1b579786d115ee3c26bcbf0da2abcb60eaf6dc26bdbf0fa52786d175edb87d70ee1b5e36fd3b44e3ef2e5bb4ee15284ff8932e1b5d36fff5c671fd9456f2aa4abca5975948f4c8af975ea06fe2dd7767dddffce91a51ee0cd09b2e89e3aff72f4d2795abd759e561f9da7d557e769f5d3795afd759ed6009da73550e7690dd2795a83759ed6109da73554e7690dd3795ac3759ed68804ffec19431f887a863f1df50aafbdc36b9ff0da37bcf60baffdc3eb80f03a30bc0e0aaf83c3eb90f03a34bc0e0bafc3c3eb88df3e718df491a31202cf689d3fb5313a4f6bacced31aa7f3b4c6eb3cad093a4f6ba2ced39aa4f3b4e2759ed6649da73545e7694dd5795ad3749ed6749da73543e769cdd4795ab354f66e9353d315f38dc5b7545e5f576a9a63ae6f67427c23f3af6fabd990ef52be05a9b253e76fde1c9da7f58aced39aabf2f798e68e3d30d7f7aa4eecf3749ed67c9da7b540e7692dd4795a8b1262acfa577fa7232097b658e3a519c8a52dd178691672694b355e9a835cda328d9716402e6db9c64b8b845cda0a8d97463d7ac8c5add47971632017f79ace8b1b0bb9b8553a2f6e1ce4e256ebbcb8f1908b7b5de7c54d805cdc1b3a2f6e22e4e2d6e8bc38cc2781b53a2f0e13d35ca7f3e2307dbef53a2f6e0ae4e236e8bcb8a9908bdba8f3e2a6412e6e93ce8b9b0eb9b8cd3a2f6e06e4e2b6e8bcb899908bdbaaf3e266412e6e9bce8b9b0db9b837755edc1cc8c56dd77971af402e6e87ce8b9b0bb9b8b7745edcab908bdba9f3e2e6412eee6d9d17371f7271bb745edc02c8c5bda3f3e216422e6eb7ce8b5b04b9b877355e5c62c8a5edd1786951904b7b4fe3a525815cda5e8d9796147269ef6bbcb464904bdba7f1d2305f06ff40e3a5a5805c5a48e3a545432ecd6bbcb494904bdbaff1d2622097f6e15fbfb4d3897a4518eb82c8c4514992264b9e223a65cc7da952a7499b2e7d868c993267b93feb03d91eccfe508e87733e92ebd1dc8f3dfe449e27f3c6e6cb5fa060a1c2458a162b5ee2a9924f972a5de699b2e5ca3f5ba162a5e72a57a9fa7cb5ea356ad6aa5da76ebdfa0d1a367aa1f18b4d9a366bde22ae65abd66ddabed4ae7d878e9d5eeedca56bb7ee3d7af63a9de8311fb9d8472ef1914b7de4321fb9dc47aea0a93ecdbe69424c73549a36d24c8e265734dfa12908cd0aa8a34e7d67eace520f933a7dd40fa3ae11f556a803419fd3e9d32c7de6a34f46f4f981eeb2e95e94eed8e8ce86ee00e82f25fd4521e72587a2df64daf1b43388e0ff07", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] From 77ea1bf85ae7c3c1a71d4580e923d6abe51a8959 Mon Sep 17 00:00:00 2001 From: LHerskind Date: Fri, 30 Jun 2023 09:14:46 +0000 Subject: [PATCH 04/14] feat: use globals in block production --- .../src/integration_l1_publisher.test.ts | 22 +++++++++-- .../src/block_builder/index.ts | 6 +-- .../block_builder/solo_block_builder.test.ts | 30 ++++++++------ .../src/block_builder/solo_block_builder.ts | 39 +++++++++---------- .../src/client/sequencer-client.ts | 2 - .../src/sequencer/sequencer.test.ts | 21 +++++++--- .../src/sequencer/sequencer.ts | 18 ++++----- 7 files changed, 82 insertions(+), 56 deletions(-) diff --git a/yarn-project/end-to-end/src/integration_l1_publisher.test.ts b/yarn-project/end-to-end/src/integration_l1_publisher.test.ts index a7bfc4cb555..21586fa5ee1 100644 --- a/yarn-project/end-to-end/src/integration_l1_publisher.test.ts +++ b/yarn-project/end-to-end/src/integration_l1_publisher.test.ts @@ -1,6 +1,7 @@ import { createMemDown, getConfigEnvVars } from '@aztec/aztec-node'; import { AztecAddress, + GlobalVariables, KERNEL_NEW_COMMITMENTS_LENGTH, KERNEL_NEW_L2_TO_L1_MSGS_LENGTH, KERNEL_NEW_NULLIFIERS_LENGTH, @@ -130,7 +131,7 @@ describe('L1Publisher integration', () => { const vks = getVerificationKeys(); const simulator = await WasmRollupCircuitSimulator.new(); const prover = new EmptyRollupProver(); - builder = new SoloBlockBuilder(builderDb, vks, simulator, prover, new Fr(config.chainId), new Fr(config.version)); + builder = new SoloBlockBuilder(builderDb, vks, simulator, prover); l2Proof = Buffer.alloc(0); @@ -182,7 +183,7 @@ describe('L1Publisher integration', () => { }; const sendToL2 = async (content: Fr, recipientAddress: AztecAddress) => { - // @todo @LHerskind version hardcoded here + // @todo @LHerskind version hardcoded here (update to bigint or field) const recipient = new L2Actor(recipientAddress, 1); // Note: using max deadline const deadline = 2 ** 32 - 1; @@ -266,7 +267,14 @@ describe('L1Publisher integration', () => { await makeBloatedProcessedTx(128 * i + 96), await makeBloatedProcessedTx(128 * i + 128), ]; - const [block] = await builder.buildL2Block(1 + i, txs, l1ToL2Messages); + // @todo @LHerskind fix time. + const globalVariables = new GlobalVariables( + new Fr(config.chainId), + new Fr(config.version), + new Fr(1 + i), + Fr.ZERO, + ); + const [block] = await builder.buildL2Block(globalVariables, txs, l1ToL2Messages); // check that values are in the inbox for (let j = 0; j < l1ToL2Messages.length; j++) { @@ -351,7 +359,13 @@ describe('L1Publisher integration', () => { await makeEmptyProcessedTx(), await makeEmptyProcessedTx(), ]; - const [block] = await builder.buildL2Block(1 + i, txs, l1ToL2Messages); + const globalVariables = new GlobalVariables( + new Fr(config.chainId), + new Fr(config.version), + new Fr(1 + i), + Fr.ZERO, + ); + const [block] = await builder.buildL2Block(globalVariables, txs, l1ToL2Messages); await publisher.processL2Block(block); diff --git a/yarn-project/sequencer-client/src/block_builder/index.ts b/yarn-project/sequencer-client/src/block_builder/index.ts index 6a0250af6f7..0620f18c8e6 100644 --- a/yarn-project/sequencer-client/src/block_builder/index.ts +++ b/yarn-project/sequencer-client/src/block_builder/index.ts @@ -1,6 +1,6 @@ import { L2Block } from '@aztec/types'; import { ProcessedTx } from '../sequencer/processed_tx.js'; -import { Proof } from '@aztec/circuits.js'; +import { GlobalVariables, Proof } from '@aztec/circuits.js'; import { Fr } from '@aztec/foundation/fields'; /** @@ -10,10 +10,10 @@ export interface BlockBuilder { /** * Creates a new L2Block with the given number, containing the set of processed txs. * Note that the number of txs need to be a power of two. - * @param blockNumber - Number of the block to assemble. + * @param globalVariables - Global variables to include in the block. * @param txs - Processed txs to include. * @param newL1ToL2Messages - L1 to L2 messages to be part of the block. * @returns The new L2 block along with its proof from the root circuit. */ - buildL2Block(blockNumber: number, txs: ProcessedTx[], newL1ToL2Messages: Fr[]): Promise<[L2Block, Proof]>; + buildL2Block(globalVariables: GlobalVariables, txs: ProcessedTx[], newL1ToL2Messages: Fr[]): Promise<[L2Block, Proof]>; } diff --git a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts index 15c00a2e6c3..8b591327035 100644 --- a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts +++ b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts @@ -4,6 +4,7 @@ import { BaseRollupInputs, CircuitsWasm, Fr, + GlobalVariables, KERNEL_NEW_COMMITMENTS_LENGTH, KERNEL_NEW_L2_TO_L1_MSGS_LENGTH, KERNEL_NEW_NULLIFIERS_LENGTH, @@ -86,7 +87,7 @@ describe('sequencer/solo_block_builder', () => { vks = getVerificationKeys(); simulator = mock(); prover = mock(); - builder = new SoloBlockBuilder(builderDb, vks, simulator, prover, chainId, version); + builder = new SoloBlockBuilder(builderDb, vks, simulator, prover); // Create mock l1 to L2 messages mockL1ToL2Messages = new Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(new Fr(0n)); @@ -244,7 +245,7 @@ describe('sequencer/solo_block_builder', () => { describe('mock simulator', () => { beforeEach(() => { // Create instance to test - builder = new SoloBlockBuilder(builderDb, vks, simulator, prover, chainId, version); + builder = new SoloBlockBuilder(builderDb, vks, simulator, prover); }); it('builds an L2 block using mock simulator', async () => { @@ -252,7 +253,8 @@ describe('sequencer/solo_block_builder', () => { const txs = await buildMockSimulatorInputs(); // Actually build a block! - const [l2Block, proof] = await builder.buildL2Block(blockNumber, txs, mockL1ToL2Messages); + const globalVariables = new GlobalVariables(chainId, version, new Fr(blockNumber), Fr.ZERO); + const [l2Block, proof] = await builder.buildL2Block(globalVariables, txs, mockL1ToL2Messages); expect(l2Block.number).toEqual(blockNumber); expect(proof).toEqual(emptyProof); @@ -284,8 +286,8 @@ describe('sequencer/solo_block_builder', () => { // Assemble a fake transaction const txs = await buildMockSimulatorInputs(); const l1ToL2Messages = new Array(100).fill(new Fr(0n)); - - await expect(builder.buildL2Block(blockNumber, txs, l1ToL2Messages)).rejects.toThrow(); + const globalVariables = new GlobalVariables(chainId, version, new Fr(blockNumber), Fr.ZERO); + await expect(builder.buildL2Block(globalVariables, txs, l1ToL2Messages)).rejects.toThrow(); }); }); @@ -293,7 +295,7 @@ describe('sequencer/solo_block_builder', () => { beforeEach(async () => { const simulator = await WasmRollupCircuitSimulator.new(); const prover = new EmptyRollupProver(); - builder = new SoloBlockBuilder(builderDb, vks, simulator, prover, chainId, version); + builder = new SoloBlockBuilder(builderDb, vks, simulator, prover); }); const makeContractDeployProcessedTx = async (seed = 0x1) => { @@ -341,7 +343,9 @@ describe('sequencer/solo_block_builder', () => { ...(await Promise.all(times(totalCount - deployCount, makeEmptyProcessedTx))), ]; - const [l2Block] = await builder.buildL2Block(blockNumber, txs, mockL1ToL2Messages); + const globalVariables = new GlobalVariables(chainId, version, new Fr(blockNumber), Fr.ZERO); + + const [l2Block] = await builder.buildL2Block(globalVariables, txs, mockL1ToL2Messages); expect(l2Block.number).toEqual(blockNumber); await updateExpectedTreesFromTxs(txs); @@ -366,7 +370,9 @@ describe('sequencer/solo_block_builder', () => { makeEmptyProcessedTx(), ]); - const [l2Block] = await builder.buildL2Block(1, txs, mockL1ToL2Messages); + const globalVariables = new GlobalVariables(chainId, version, new Fr(1), Fr.ZERO); + + const [l2Block] = await builder.buildL2Block(globalVariables, txs, mockL1ToL2Messages); expect(l2Block.number).toEqual(1); }, 10_000); @@ -380,7 +386,8 @@ describe('sequencer/solo_block_builder', () => { const l1ToL2Messages = range(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, 1 + 0x400).map(fr); - const [l2Block] = await builder.buildL2Block(1, txs, l1ToL2Messages); + const globalVariables = new GlobalVariables(chainId, version, new Fr(1), Fr.ZERO); + const [l2Block] = await builder.buildL2Block(globalVariables, txs, l1ToL2Messages); expect(l2Block.number).toEqual(1); }, 20_000); @@ -388,7 +395,7 @@ describe('sequencer/solo_block_builder', () => { it('e2e_zk_token edge case regression test on nullifier values', async () => { const simulator = await WasmRollupCircuitSimulator.new(); const prover = new EmptyRollupProver(); - builder = new SoloBlockBuilder(builderDb, vks, simulator, prover, chainId, version); + builder = new SoloBlockBuilder(builderDb, vks, simulator, prover); // update the starting tree const updateVals = Array(16).fill(0n); updateVals[0] = 19777494491628650244807463906174285795660759352776418619064841306523677458742n; @@ -409,7 +416,8 @@ describe('sequencer/solo_block_builder', () => { ); const txs = [tx, await makeEmptyProcessedTx(), await makeEmptyProcessedTx(), await makeEmptyProcessedTx()]; - const [l2Block] = await builder.buildL2Block(blockNumber, txs, mockL1ToL2Messages); + const globalVariables = new GlobalVariables(chainId, version, new Fr(blockNumber), Fr.ZERO); + const [l2Block] = await builder.buildL2Block(globalVariables, txs, mockL1ToL2Messages); expect(l2Block.number).toEqual(blockNumber); }, 10000); diff --git a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts index b25624da497..170d754488b 100644 --- a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts +++ b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.ts @@ -60,35 +60,27 @@ const DELETE_FR = new Fr(0n); * using the base, merge, and root rollup circuits. */ export class SoloBlockBuilder implements BlockBuilder { - private globalVariables: GlobalVariables; - constructor( protected db: MerkleTreeOperations, protected vks: VerificationKeys, protected simulator: RollupSimulator, protected prover: RollupProver, - protected chainId: Fr, - protected version: Fr, protected debug = createDebugLogger('aztec:sequencer'), - ) { - this.globalVariables = new GlobalVariables(chainId, version, Fr.ZERO, Fr.ZERO); - } + ) {} /** * Builds an L2 block with the given number containing the given txs, updating state trees. - * @param blockNumber - Number of the block to create. + * @param globalVariables - Global variables to be used in the block. * @param txs - Processed transactions to include in the block. * @param newL1ToL2Messages - L1 to L2 messages to be part of the block. * @param timestamp - Timestamp of the block. * @returns The new L2 block and a correctness proof as returned by the root rollup circuit. */ public async buildL2Block( - blockNumber: number, + globalVariables: GlobalVariables, txs: ProcessedTx[], newL1ToL2Messages: Fr[], - timestamp = 0, ): Promise<[L2Block, Proof]> { - this.globalVariables = new GlobalVariables(this.chainId, this.version, new Fr(blockNumber), new Fr(timestamp)); const [ startPrivateDataTreeSnapshot, startNullifierTreeSnapshot, @@ -115,7 +107,7 @@ export class SoloBlockBuilder implements BlockBuilder { this.validateTxs(txs); // We fill the tx batch with empty txs, we process only one tx at a time for now - const [circuitsOutput, proof] = await this.runCircuits(txs, newL1ToL2Messages); + const [circuitsOutput, proof] = await this.runCircuits(globalVariables, txs, newL1ToL2Messages); const { endPrivateDataTreeSnapshot, @@ -154,8 +146,8 @@ export class SoloBlockBuilder implements BlockBuilder { const newUnencryptedLogs = new L2BlockL2Logs(unencryptedLogsArr); const l2Block = L2Block.fromFields({ - number: blockNumber, - globalVariables: this.globalVariables, + number: Number(globalVariables.blockNumber.value), + globalVariables, startPrivateDataTreeSnapshot, endPrivateDataTreeSnapshot, startNullifierTreeSnapshot, @@ -214,7 +206,11 @@ export class SoloBlockBuilder implements BlockBuilder { return new AppendOnlyTreeSnapshot(Fr.fromBuffer(treeInfo.root), Number(treeInfo.size)); } - protected async runCircuits(txs: ProcessedTx[], newL1ToL2Messages: Fr[]): Promise<[RootRollupPublicInputs, Proof]> { + protected async runCircuits( + globalVariables: GlobalVariables, + txs: ProcessedTx[], + newL1ToL2Messages: Fr[], + ): Promise<[RootRollupPublicInputs, Proof]> { // Check that the length of the array of txs is a power of two // See https://graphics.stanford.edu/~seander/bithacks.html#DetermineIfPowerOf2 if (txs.length < 4 || (txs.length & (txs.length - 1)) !== 0) { @@ -228,7 +224,7 @@ export class SoloBlockBuilder implements BlockBuilder { const baseRollupOutputs: [BaseOrMergeRollupPublicInputs, Proof][] = []; for (const pair of chunk(txs, 2)) { const [tx1, tx2] = pair; - baseRollupOutputs.push(await this.baseRollupCircuit(tx1, tx2)); + baseRollupOutputs.push(await this.baseRollupCircuit(tx1, tx2, globalVariables)); } // Run merge rollups in layers until we have only two outputs @@ -251,9 +247,10 @@ export class SoloBlockBuilder implements BlockBuilder { protected async baseRollupCircuit( tx1: ProcessedTx, tx2: ProcessedTx, + globalVariables: GlobalVariables, ): Promise<[BaseOrMergeRollupPublicInputs, Proof]> { this.debug(`Running base rollup for ${tx1.hash} ${tx2.hash}`); - const rollupInput = await this.buildBaseRollupInput(tx1, tx2); + const rollupInput = await this.buildBaseRollupInput(tx1, tx2, globalVariables); const rollupOutput = await this.simulator.baseRollupCircuit(rollupInput); await this.validateTrees(rollupOutput); const proof = await this.prover.getBaseRollupProof(rollupInput, rollupOutput); @@ -525,7 +522,7 @@ export class SoloBlockBuilder implements BlockBuilder { ); } - protected async getConstantBaseRollupData(): Promise { + protected async getConstantBaseRollupData(globalVariables: GlobalVariables): Promise { return ConstantBaseRollupData.from({ baseRollupVkHash: DELETE_FR, mergeRollupVkHash: DELETE_FR, @@ -538,7 +535,7 @@ export class SoloBlockBuilder implements BlockBuilder { startTreeOfHistoricL1ToL2MsgTreeRootsSnapshot: await this.getTreeSnapshot( MerkleTreeId.L1_TO_L2_MESSAGES_ROOTS_TREE, ), - globalVariables: this.globalVariables, + globalVariables, }); } @@ -603,11 +600,11 @@ export class SoloBlockBuilder implements BlockBuilder { } // Builds the base rollup inputs, updating the contract, nullifier, and data trees in the process - protected async buildBaseRollupInput(left: ProcessedTx, right: ProcessedTx) { + protected async buildBaseRollupInput(left: ProcessedTx, right: ProcessedTx, globalVariables: GlobalVariables) { const wasm = await CircuitsWasm.get(); // Get trees info before any changes hit - const constants = await this.getConstantBaseRollupData(); + const constants = await this.getConstantBaseRollupData(globalVariables); const startNullifierTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.NULLIFIER_TREE); const startContractTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.CONTRACT_TREE); const startPrivateDataTreeSnapshot = await this.getTreeSnapshot(MerkleTreeId.PRIVATE_DATA_TREE); diff --git a/yarn-project/sequencer-client/src/client/sequencer-client.ts b/yarn-project/sequencer-client/src/client/sequencer-client.ts index de7a796bf64..2ec855b5b1e 100644 --- a/yarn-project/sequencer-client/src/client/sequencer-client.ts +++ b/yarn-project/sequencer-client/src/client/sequencer-client.ts @@ -42,8 +42,6 @@ export class SequencerClient { getVerificationKeys(), await WasmRollupCircuitSimulator.new(), new EmptyRollupProver(), - new Fr(config.chainId), - new Fr(config.version), ); const publicProcessorFactory = new PublicProcessorFactory(merkleTreeDb, contractDataSource, l1ToL2MessageSource); diff --git a/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts b/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts index 8ba1e9c2d0c..a63e8944b6d 100644 --- a/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts +++ b/yarn-project/sequencer-client/src/sequencer/sequencer.test.ts @@ -1,4 +1,10 @@ -import { CombinedHistoricTreeRoots, Fr, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, makeEmptyProof } from '@aztec/circuits.js'; +import { + CombinedHistoricTreeRoots, + Fr, + GlobalVariables, + NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, + makeEmptyProof, +} from '@aztec/circuits.js'; import { P2P, P2PClientState } from '@aztec/p2p'; import { L1ToL2MessageSource, L2Block, L2BlockSource, MerkleTreeId, Tx, TxHash } from '@aztec/types'; import { MerkleTreeOperations, WorldStateRunningState, WorldStateSynchroniser } from '@aztec/world-state'; @@ -25,6 +31,9 @@ describe('sequencer', () => { let sequencer: TestSubject; + const chainId = Fr.ZERO; + const version = Fr.ZERO; + beforeEach(() => { lastBlockNumber = 0; @@ -43,7 +52,7 @@ describe('sequencer', () => { publicProcessor = mock({ process: async txs => [await Promise.all(txs.map(tx => makeProcessedTx(tx))), []], - makeEmptyProcessedTx: () => makeEmptyProcessedTx(CombinedHistoricTreeRoots.empty(), Fr.ZERO, Fr.ZERO), + makeEmptyProcessedTx: () => makeEmptyProcessedTx(CombinedHistoricTreeRoots.empty(), chainId, version), }); publicProcessorFactory = mock({ @@ -67,8 +76,8 @@ describe('sequencer', () => { l1ToL2MessageSource, publicProcessorFactory, { - chainId: 0, - version: 0, + chainId: Number(chainId.value), + version: Number(version.value), }, ); }); @@ -88,7 +97,7 @@ describe('sequencer', () => { const expectedTxHashes = [...(await Tx.getHashes([tx])), ...times(3, () => TxHash.ZERO)]; expect(blockBuilder.buildL2Block).toHaveBeenCalledWith( - lastBlockNumber + 1, + new GlobalVariables(chainId, version, new Fr(lastBlockNumber + 1), Fr.ZERO), expectedTxHashes.map(hash => expect.objectContaining({ hash })), Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(new Fr(0n)), ); @@ -119,7 +128,7 @@ describe('sequencer', () => { const expectedTxHashes = [...(await Tx.getHashes([txs[0], txs[2]])), TxHash.ZERO, TxHash.ZERO]; expect(blockBuilder.buildL2Block).toHaveBeenCalledWith( - lastBlockNumber + 1, + new GlobalVariables(chainId, version, new Fr(lastBlockNumber + 1), Fr.ZERO), expectedTxHashes.map(hash => expect.objectContaining({ hash })), Array(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP).fill(new Fr(0n)), ); diff --git a/yarn-project/sequencer-client/src/sequencer/sequencer.ts b/yarn-project/sequencer-client/src/sequencer/sequencer.ts index 61db12b6050..5f9a17de630 100644 --- a/yarn-project/sequencer-client/src/sequencer/sequencer.ts +++ b/yarn-project/sequencer-client/src/sequencer/sequencer.ts @@ -136,8 +136,9 @@ export class Sequencer { this.log(`Processing ${validTxs.length} txs...`); this.state = SequencerState.CREATING_BLOCK; - // @todo @LHerskind Fetch the next global variables in here! - const globalVariables = GlobalVariables.empty(); + // @todo @LHerskind Fetch meaningful timestamp in here. + const blockNumber = (await this.l2BlockSource.getBlockHeight()) + 1; + const globalVariables = new GlobalVariables(this.chainId, this.version, new Fr(blockNumber), Fr.ZERO); // Process public txs and drop the ones that fail processing // We create a fresh processor each time to reset any cached state (eg storage writes) @@ -163,7 +164,7 @@ export class Sequencer { const emptyTx = await processor.makeEmptyProcessedTx(this.chainId, this.version); // @todo @LHerskind We need to pass in the globals here as well to build a block with the correct data. - const block = await this.buildBlock(processedTxs, l1ToL2Messages, emptyTx); + const block = await this.buildBlock(processedTxs, l1ToL2Messages, emptyTx, globalVariables); this.log(`Assembled block ${block.number}`); await this.publishContractPublicData(validTxs, block); @@ -271,19 +272,18 @@ export class Sequencer { * @param txs - Processed txs to include in the next block. * @param newL1ToL2Messages - L1 to L2 messages to be part of the block. * @param emptyTx - Empty tx to repeat at the end of the block to pad to a power of two. + * @param globalVariables - Global variables to use in the block. * @returns The new block. */ - protected async buildBlock(txs: ProcessedTx[], newL1ToL2Messages: Fr[], emptyTx: ProcessedTx) { + protected async buildBlock(txs: ProcessedTx[], newL1ToL2Messages: Fr[], emptyTx: ProcessedTx, globalVariables: GlobalVariables) { // Pad the txs array with empty txs to be a power of two, at least 4 const txsTargetSize = Math.max(ceilPowerOfTwo(txs.length), 4); const emptyTxCount = txsTargetSize - txs.length; const allTxs = [...txs, ...times(emptyTxCount, () => emptyTx)]; - const blockNumber = (await this.l2BlockSource.getBlockHeight()) + 1; - this.log(`Building block ${blockNumber}`); - // @todo @LHerskind We need to pass in the globals here as well to build a block with the correct data. - // We don't need to do the blocknumber in here. Just passing along the globals is enough. - const [block] = await this.blockBuilder.buildL2Block(blockNumber, allTxs, newL1ToL2Messages); + this.log(`Building block ${globalVariables.blockNumber}`); + + const [block] = await this.blockBuilder.buildL2Block(globalVariables, allTxs, newL1ToL2Messages); return block; } From ad8057eaed96e5fc3a86d5202cd507e595e53cfc Mon Sep 17 00:00:00 2001 From: LHerskind Date: Fri, 30 Jun 2023 09:21:27 +0000 Subject: [PATCH 05/14] chore: formatting --- .../src/examples/non_native_token_contract.json | 4 +--- .../src/examples/public_private_contract.json | 8 ++------ yarn-project/sequencer-client/src/block_builder/index.ts | 6 +++++- yarn-project/sequencer-client/src/sequencer/sequencer.ts | 7 ++++++- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/yarn-project/noir-contracts/src/examples/non_native_token_contract.json b/yarn-project/noir-contracts/src/examples/non_native_token_contract.json index 826aa52d5c7..45076f69c67 100644 --- a/yarn-project/noir-contracts/src/examples/non_native_token_contract.json +++ b/yarn-project/noir-contracts/src/examples/non_native_token_contract.json @@ -370,9 +370,7 @@ "visibility": "private" } ], - "returnTypes": [ - null - ], + "returnTypes": [null], "bytecode": "cd9df973d35517c69b6e5ed119f53f505f505196ac4dc2da742fb42c2dfb9e36df94409a84242d2dab71c15d935370c5958220a2ef3bee3beedb41fdd579fd1fdc7745130b42a13dcdf2046e67fa43e69979b8e79393fb3df7f661b2fb98c9ff55c9ff13ffad097a3b37d684fb1a7a429db5de6030b1bfcd33afb13e45e52641ac90c44a53e2294f34105fdf6dc4039d03c9147d596d3357d9ed86d36a586c16afd9eaee7039cc76474795cbe2b2385c0e9fd565b3192ebbcbe9ee703bcd6e8bdd6658fc0eb7cd6f1efab9fccb6a73613f76fca2ae287851d611301e5c60f88c68cc080d0cd0e57c9cae48ff9af878095df99fc49335d1403018e8da934a1c680f84ba82c65025052ec37265c116e67f56d41d091ae3930f25f6b5867bc95492d85f1b0ec5e254922adc3f71b8211c35025da10ca481c3b17838eaed32da0caf2f9538d46478239e68d4db4fa5a654e2489bd11588c58d6873c867f4994eaea21cb18a2335819037dadf103082bef991dd15fb3c3e5f697962b025ecf55159c550e515652708542406e7f4744752170ebd2e310db6c7c391a389437581a8d1190ff41a89830b7bc2f180118aefc1bc95e30b2f722099ccc2c422cb574d382aec1113fa04f12ade35fcc33a00f8b08e07b09d40002e80262c62fb5ca249fb5c73b5d43e574bed734d31dae71200dbab01ed730da07de070269c2b386378f0ff0a079c071da748c7321140f85a80475674f2dc7a48972e2abc0120dbd7c46ba5edeb5a69fb9a683a35e6917663dea9059126bbea78e0ec7a5d72efd0a4566a2afe0cfbf4891976697abf31860db165263a6b881dfebaf4e4b22a8a30d4566686daf42c3b34d496570ea1a82c3f81a4f2c4503b6ed8508b39524d2cbc1f848fd62425889325718a244e9544b3245a24d12a893649b44ba24312ab24d129892e49744be234499c2e89332471a624ce92c4d992582d891e49ac91c45a49ac93c47a496c90c446496c92c466499c238973d5880396ad804dc33227ed61f517b4f158e62206ace78a389c5bf2adace9a4872f7f3acd083acf17f9e862cea7b286d33dccf9d16944d079e11c1cec5cb95656778687db9f3b9d7a049d17cfcdb1d7eecfa5b29a913c9cb9d1a945d079e91c5e0a38b2adac7a340f7bf6743c083a2f9fe32b13733695cd923cccd9d1998da0f3ca79b850ea1cabb219637938c7a6331341e7d5f374dd66952a9b06b8949a8ea0f3da79bc8c748e56992b5b0fe7e874dc083aaf9fe7ab5ad7489555e5e2e11a998e1341e70d0d2eb2cd675666cfd1a3ca7f361d0782ce9b9a5cf39b4fafcc9a8f8775381d1b82ce5b1afd11c47ab23273be1ef653742c083a4775fa1391e1f7671666995290c7109da9083a6f17834e8186163e8a30791bc1e71d2df9bc8930790bc1e75d2df9bc8e307903c1e73d2df9bc8a30790dc1e77d2df9bc8c307905c1e7032df9bc88307909c1e7432df93c8f307901c1e723dda69ff4fc63998cc0f31c02cfc75ab6cf4708938f117c3ed192cf0708930f117c3ed592cf7b0893f7117c584b3eef204cde45f039a6251f46981c43f0f94c4b3e9f204c3e45f0f95c473e97002a9b8440fc8596ddf319c2e47344f77c814dc01e5a146e31dabcbe40df8036e9fbaf4a2e9f3479cad4f46dadcdeea872badcd3a6cf98396b76b5a7a6b6aebea1b1a979cedc63a61221a1d322c5775a25719e24ce97c40592b85012db24b15d121749e262495c22894b257199242e97c41592b852125749e26a495c23896b25719d247a25b143123b25d127898624fa25b14b12d74b6240123748e2c62284e4360042721b117bf0d73a86e4d603427201049d6f740cc9f90121b92e049d6f750cc9f90021390341e73b1d43721d80905c2782cef73a86e4d60142725e049d1f740cc9ad0184e4d622e8fca863486e152024b71a41e7271d43722b0021b995083a3feb18925b0608c92d47d0f945c790dc1240486e2982ceaf3a86e4160142728b11747ed33124d70608c9b523e8fcae63486e012024b71041e70f1d4372f30021b9f9083a7f6a798ffc07c2e44f049fe35af2f90d61f23b82cf5f5af2f90561f22b804ffa025e4b403f214c7e8600326909e80784c98f1040a55a02fa0e61f23d0450999680be41987c0b0154ae6352ae15c1e76b089f0a1d1b28fdb6415c2a20882af544540a71298320ba404f44251017130491d272a73e8e30f90b02e8423d7b48415c2e84201aa727a24a88cb05104417e988e85240692d10c817ebd941e3202e17413ae862cde3739742e2732dadf3e62f58d8d6be68f192a5cb96af58b96af59ab5ebbc1d9d3ec3dfb53eb061a31c9f0b4ac19e6e490c496258122392b84912a3921893c4b824f64862af246e96c43e49ec97c42d92b85512b749e27649dc21893b2591af17d584a8de20aa378aea4da27ab3a8ee12d55b44f55651bd4d546f17d53b8a10a5e3db01593abe03b2255fa7639a8e6f05c4e9f83608a0493a06ea78172051c7b740004dd63153c7370142757c3304d0141d63757c032057c73742004dd53159c7d703a2759c800032eb18aedb0108d7ed84e0b1e898aedb0648d76d87e0b1ea18afdb0288d76d85e0b1e998afeb03e4ebfa2178ec3a06ec7a0101bbcd103c0e1d13767140c2ae0782a74ac7885d1410b18b41f03875ccd8450019bb4d103c2e1d43762140c82e0cc1e3d6f3c6d905717143104dd3135115c4c50941345d4f4476888b038268869e88ac10171b04d14c3d1199212e1608a2597a229a0271990a41345b4f4493202e932188aa754cdd7543005d0701e4d1b387aa212e1e08a21a3d11cd82b8cc8620aad513d10c88cb4c08a23a3d114d83b84c8720aad713511dc4a51e82a8414f443510975a08a2461d115d06282d0881dca4670735405c1a211dd4a479f0ee3248f02ed81d0a47364563f19edecd7dfd5bb66edbbe63275fcf09be816fe49bf866dec5b7f0ad7c1bdfce77644278c3de74c4b7cff29d85d6d1612fc2aaee2a745555e622aceaee4257e5f5176155f714ba2ab77d8438d981f6268fd551455f95f888ef54c477a57fef4effdea368aea2398a9a1535296a54d4a0a85e519da25a45358a3c8aaa15cd56344bd14c4533144d57344d915b914b91535195228722bb229b22ab228b22b3a2a98aa6289aac6892a28d8a36280a285aafa84b915f91a1c8a7a853518722afa2758ad62a5aa368b5a2558a562a5aa168b9a2658a962a5aa268b1a2458ada15b5295aa86881a2f98ae6296a55d4a23211b94c882e13b3cb04f13251bd4c982f13f7cb04023391c14ca830133bcc041369a7a21d8ab62bdaa668aba22d8afa15f529daaca857518fa2b8a298a2a8a24d8a228ac28a428aba150555fa33ce494e31f100efe63d7c2fdfc7f7f303fc203fc47bf9617e841fe5c7f8717e82f7f120efe703fc241fe443fc141fe6a7f9083fc3cf9efa6ef4d4a9af224ffb6636314b61ef3c278776c2826cf8dfedb4001ba6537b72de363cec3198a70def1efe74c8cb86f79cf988c9c386ef3dfb3995b30ddf37d2c32e471bbe7fe427664e36fcc0688fdd1c6cf8c1d19fdd59dbf043d20090a50def95a788ac6cf8e1b146912c6cf891b1e799316df8d16c86a2316cf8b1ec262bd1861fcf763c136cf889ec67bc516d785f2e83e228363c98dbb439a20defcf75641dc1860fe43ef79e65c34fe6333c9f61c307f39bc087d9f0a17cc7f8d36cf8a9fccf02ffdaf0e1420e14276cf8e9c24e25ffd8f091428f36691b7e06f1ff409f2dfc80944cee4dec6b0df752fae4b3bf361c8ac5a9240538171e6e08478d40572833e80e3cd71935bc71a3c59a3e215a5a8d58ccdb65a412879a0c6fc4138d7afba9d4944a1c6933ba02b1b8116d0ef98c3ed3c9d594235673a42610f246fb1b0246d0373fb2bb629fc7e72b2d4f0cb684bd3e2aab28eabf75a07e538f37182b2b4f1c98d3d31d69f653c5b8c145516f243198799dba68b03d1e8e0c249385374432f937", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } diff --git a/yarn-project/noir-contracts/src/examples/public_private_contract.json b/yarn-project/noir-contracts/src/examples/public_private_contract.json index 0e34292d30c..c73fe8715bf 100644 --- a/yarn-project/noir-contracts/src/examples/public_private_contract.json +++ b/yarn-project/noir-contracts/src/examples/public_private_contract.json @@ -28,9 +28,7 @@ "visibility": "private" } ], - "returnTypes": [ - null - ], + "returnTypes": [null], "bytecode": "b590414ec24018855b685de8424f801e013c812da18a296a800b4c3abfcdc471a6ceb406967383ce1476ee285563484cbc8007e0025e861816ee0c9beadbbd7cc97b2f6f763257ef3e45d19dcf2741c6a22ea2542d87ded5794f1bc7de01dd5d70ef37f87203188404561873b8de98a3f5c632ad63f5ec0b422989e75a5523c2620a45aecdd759bb9e3aadda11ed3c7f528b017f34b6a5965dce646a2c5d3f56bd055c0089d9f697e223128052084fc73cec0c404a148356af1780124f0834350d5babd510622253107d866162ffac71fe62cdca270c89694080e2eb64e62e3c8c1b8e2a438eb069baffda55f51e324465d351d565769ff46f8dbb5f8e054a54b9f5faa01ca53cf9ccf36f", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, @@ -158,9 +156,7 @@ "visibility": "private" } ], - "returnTypes": [ - null - ], + "returnTypes": [null], "bytecode": "b5904f4ec24018c529b42e74a137406f8037b06da862fc17f00293f6b399389da9d3a981e57783ce1476ee28556348388207e0025e861816ee0c9beadbbdfc92f75edef464862b8f91f0d113e320e7a14f18c3c5d0bd39ef6b635b3ba0b30beefd06dfee200299012f8d395c6fccd17ad332dd637cf524658cc6338df588f298415968f375d66ba6d36ee3885e51bce0fc5a3c1bab850b5ff04c99966e1e8b1f81904063befda55c851288025f2409550970a5f1fd0248ea4a4926a66d695c0e21a6990239e0118cad9f29f65f4c597a9413390928b0e8369d3a73378ada3656578244a6e3fc6b57dd7fca09cb3a36d69779920e1e8cb35fdd4b9262b5f5faa01a29917e16c537", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } diff --git a/yarn-project/sequencer-client/src/block_builder/index.ts b/yarn-project/sequencer-client/src/block_builder/index.ts index 0620f18c8e6..fac474f867f 100644 --- a/yarn-project/sequencer-client/src/block_builder/index.ts +++ b/yarn-project/sequencer-client/src/block_builder/index.ts @@ -15,5 +15,9 @@ export interface BlockBuilder { * @param newL1ToL2Messages - L1 to L2 messages to be part of the block. * @returns The new L2 block along with its proof from the root circuit. */ - buildL2Block(globalVariables: GlobalVariables, txs: ProcessedTx[], newL1ToL2Messages: Fr[]): Promise<[L2Block, Proof]>; + buildL2Block( + globalVariables: GlobalVariables, + txs: ProcessedTx[], + newL1ToL2Messages: Fr[], + ): Promise<[L2Block, Proof]>; } diff --git a/yarn-project/sequencer-client/src/sequencer/sequencer.ts b/yarn-project/sequencer-client/src/sequencer/sequencer.ts index 5f9a17de630..709035085d3 100644 --- a/yarn-project/sequencer-client/src/sequencer/sequencer.ts +++ b/yarn-project/sequencer-client/src/sequencer/sequencer.ts @@ -275,7 +275,12 @@ export class Sequencer { * @param globalVariables - Global variables to use in the block. * @returns The new block. */ - protected async buildBlock(txs: ProcessedTx[], newL1ToL2Messages: Fr[], emptyTx: ProcessedTx, globalVariables: GlobalVariables) { + protected async buildBlock( + txs: ProcessedTx[], + newL1ToL2Messages: Fr[], + emptyTx: ProcessedTx, + globalVariables: GlobalVariables, + ) { // Pad the txs array with empty txs to be a power of two, at least 4 const txsTargetSize = Math.max(ceilPowerOfTwo(txs.length), 4); const emptyTxCount = txsTargetSize - txs.length; From 0f253c134b87c87a85fd3e7715d8c2e8da2c1795 Mon Sep 17 00:00:00 2001 From: LHerskind Date: Fri, 30 Jun 2023 09:26:18 +0000 Subject: [PATCH 06/14] chore: lint --- yarn-project/sequencer-client/src/client/sequencer-client.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/yarn-project/sequencer-client/src/client/sequencer-client.ts b/yarn-project/sequencer-client/src/client/sequencer-client.ts index 2ec855b5b1e..68459ab2afd 100644 --- a/yarn-project/sequencer-client/src/client/sequencer-client.ts +++ b/yarn-project/sequencer-client/src/client/sequencer-client.ts @@ -8,7 +8,6 @@ import { getL1Publisher, getVerificationKeys, Sequencer } from '../index.js'; import { EmptyRollupProver } from '../prover/empty.js'; import { PublicProcessorFactory } from '../sequencer/public_processor.js'; import { WasmRollupCircuitSimulator } from '../simulator/rollup.js'; -import { Fr } from '@aztec/circuits.js'; /** * Encapsulates the full sequencer and publisher. From b9177674444466eec4ac1a0567b49eac3f45c09c Mon Sep 17 00:00:00 2001 From: LHerskind Date: Fri, 30 Jun 2023 09:46:00 +0000 Subject: [PATCH 07/14] chore: compile noir --- .../src/examples/ecdsa_account_contract.json | 2 +- .../src/examples/gullible_account_contract.json | 2 +- .../src/examples/non_native_token_contract.json | 12 +++++------- .../src/examples/public_private_contract.json | 8 ++++++-- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/yarn-project/noir-contracts/src/examples/ecdsa_account_contract.json b/yarn-project/noir-contracts/src/examples/ecdsa_account_contract.json index 30dffeb0183..19e9b18e95e 100644 --- a/yarn-project/noir-contracts/src/examples/ecdsa_account_contract.json +++ b/yarn-project/noir-contracts/src/examples/ecdsa_account_contract.json @@ -91,7 +91,7 @@ } ], "returnTypes": [], - "bytecode": "edbd07945555b6f5cfdd7b9fa280a240721211111111c951258a8808484e22398980e4241924e70c92a3a22239898808086703929388888a8a898c20fed7ba7eefffbdc7d76fd1ddce7a6f0d073d46ed1e3d66bb3c67de5df39c5aeb77cf99e453563c95acff801565db3569f64ad90e3d2a746ddfac5c9376ed062caa5ea6cab3cf8c9fe022821848628c24168915c4a292584c128b4b6209492c29894f4ae25392f8b4249692c4d292584612cb4a6239492c2f89cf486205497c56122b4ae273925849129f97c4ca92f882245691c4aa92584d125f94c4ea925843126b4a622d49ac2d897524b1ae24d693c4fa92d840121b4ae24b92d848125f96c4c692d844129b4a6233496c2e892d24b1a524b692c4d692d84612db4ae22b92d84e125f95c4f692d841123b4ae26b92d849123b4b621749ec2a89bd24b1b724f691c4d725b1af24f693c4b0bfa80e10d581a23a4854078bea10511d2aaa6f88ea30511d2eaa234475a4a88e12d5d1a23a4654c78aea38511d2faa134475a2a84e12d5c9a23a4554a78aea34519d1e3be0ad329dda7469fd6a8b2e6d9a4d1c3771c2f1d205f3152958a845d1022df217ccdf245f81e24d8b15ce57a870d322c5f217cb5fb858e1e6058a152cd8a258a162458b372d5e345ff1fc850ab6c8dfb270f1822df345ff933f9c46450ab42c52e82f1599fee791fc9522f97cccbee3a5f3fdc5fffc4383f8b0f2ffdbe736e53f8a34ff0b064d8518b43f010de2c3caf76f9ddba4ff5c24dfbf69d06488419f25b0417c58c5fee5739b704791e22dff0d8326420c3af03f60101d56a196ffd2b98dfb47458afe8b068d871874f07fc6a0e86115fea7cf6dcc7f57a4d0bf60d058884187fe070de2c3caf74f9ddb28a948be7fd2a0d110830eff0f1bc487d5ecaee736e26e458afe13068d841874e47fc1203eac02e2b90dfb678a14bd8b41c321061dfd5f32880fabe87f7b6e43ffd922450583de801874ec7fd1203eac62fff0dc06ff2b458afd37060d811874fc7fd9203eac7cffcfb90dfc178b1469f90f0c1a0431e8840283f8b0f2fd9773ebffef14297087410320069d5462101f5681ff38b7beff6e8d42ffd79f7e107b4e29b2a7608b962df9c8f2f7f94b35feb4e775883d9f27843d7fb1607efad420553e8758745aa7452720554e422cfa42a745c720558e432c3aa3d3a223902a4721167da9d3a243902a8721169dd569d101489583108bbed269d17e4895cf20169dd3764f447745f97b430cda0731e86b9d7be81ca4cad7108bbed169d1594895af20167dabd3a233902a5f422c3aafd3a2d3902a5f402cfa4ea745e72155be8358f4bd4e8bbe8154f91662d10f1a2dea0638b55e10932fe8dc41df43aafc00d941088b96956fd3a945b32e6dbab518b0ac6687ca2daa3769dea6c7c489e3c62336d35f3fbe5389b2f5eadde7f5befdc2fee180706038281c1c0e0987866f84c3c2e1e1887064382a1c1d8e09c786e3c2f1e184706238299c1c4e09a786d3c2e93e924842826688c0d04c519d25aa6f8aea6c519d23aa7345759ea8ce17d505a2ba50541789ea62515d22aa4b457599a8be25aa6f8bea72517d4754df15d5f7447585a8be2faa2b457595a8ae16d535a2ba5654d789ea7a51dd9010d0de7a04b4b70111e08993a984f6d622a0bd751083e254427bab11d0de1a8841c955427b2b11d0de2a8841f12aa1bd150868ef7d88412954427bef22a0bdf72006a55409ed2d47407bef400cba4f25b4f71602da7b1b62502a95d0de5204b4b70c62506a95d0de6204b4b70462501a95d0de4204b4b70862505a95d0de7c04b4b70062503a95d0de5c04b4370f62507a8dd05e381b40ed8573200665d088ed85b300dc5ef826c4a08c2a3bd6893340aa6484589449a745e92055d2432ccaacd3a234902a69211665d169512a4895d4108beed769514a4895fb201665d569513ca44a0a88450fe8b4280e522539c4a26c1ac1bd7026c4a16410871ed4b989b241aa3c08b128bb4e8bb242aa3c00b1e8219d16658154b91f62510e9d16658254c90cb1e8619d16e58054791862514e9d16658754790862d1231a2dea0e38b57006c4e55c3ab7504e489547205b28977274af3b04dd0b678433c359e19be1ec704e38379c17ce0f17840bc345e1e27049b8345c16be15be1d2e0fdf09df0ddf0b5784ef872bc355e1ea704db8365c17ae0f37dc05e0db28c2439b4475b3a87e20aa5b44f54351dd2aaa1f89ea3651fd5854b78bea27a2ba4354778aea2e51fd5454778bea1e510d45d58bea5e51dd27aafb45f533513d20aa0745f590a81e16d523a27a54548f89eaf18400f88e21003ec85788133fab12e03b8200f8205f204e5c5125c0770801f041be3e9cf8399500df0104c007f9f270e24a2a01befd08800ff2d5e1c4cfab04f8f622003ec8578713575609f0850880cf430c7a4125c0b71b01f0ed8118544525c0b70b01f07d0a31a8aa4a806f0702e0db0931a89a4a806f3b02e0fb0462d08b2a01be6d0880ef638841d555027c5b1100df4710836aa804f8b62000be0f2106d55409f06d46007c1f400caaa5b36f5d1352a516c4a2da3a2daa0ea9520362511d9d16558354791162515d9d16558154a90ab1a89e4e8b2a43aabc00b1a8be4e8b2a41aa3c0fb1a8814e8b2a42aa3c07b1a8a14a806f13c4a167210ebda4731335845479096251239d16d587546900b1e8659d16d58554a907b1a8b14e8b6a43aad48158d444a7458d21559a402c6aaad3a246902a2f432c6aa6d1a21e08806f23c4e5e63ab75053489566902dd45c39c0d70303f06d0c37859bc30fc22de187e1d6f0a3705bf871b83dfc24dc11ee0c77859f86bbc33d6118fa706fb82fdc1f7e161e080f8687c2c3e191f068782c3c7e1780ef84080f9d14d553a2fab9a89e16d52f44f58ca87e29aa6745f52b513d27aa5f8bea37a2faada89e17d5ef44f57b51fd41542f88ea8fa2fa93a8fe2caabf88eaafa27a51542f89ea6551bd22aa5745f59aa85e17d51b0901f05d47007c3720313e4825c0771501f05d8318345825c0771901f05d8118344425c0771101f05d8218345425c0f70b02e0fb1562d01b2a01be9f1000dfcf108386a904f82e2000be1f21060d5709f07d8f00f8204f4a4f3c4225c0771e01f041ded79078a44a80ef1b04c007795b43e2512a01be7308800ff2f6a1c4a355027c6711001fe4dd4389c7a804f8ce20003ec89b87128f5509f09d46007c90f70e251ea712e03b8500f820ef854d3c5e67df7a1ca4ca78884513745a340652652cc4a2893a2d1a05a9321a62d1249d168d80541909b168b24e8b8641aa0c87583445a745432155de80583455a74583215586402c9aa612e03b09716810c4a1e93a37d1344895e9108b66e8b4680aa4ca54884533755a3409526532c4a2593a2d9a00a9321162d19b3a2d9a05a982798efc6c9d16619e0d371362d11c8d16211e4b1d9e80b83c57e7169a0da982799dc55ce500df7d1880ef4478323c157e1e9e0ebf08cf845f8667c3afc273e1d7e137e1b7e1f9f0bbf0fbf087f042f863f853f873f84bf86b7831bc145e0eaf8457c36be1f5f0c65d00bedf4478e8a6a8de12d5df45f5b6a8fe21a97446b21c916523cb56969d2c07b21c23cb896539569693c87252594e26cb71b29c5c96e36539852ca794e5fb6439952ca796e534b29c5696d3c9727a59ce20cb191300eda37f2980eda3638344fc871ae13efa5401741f7df8108bb66ac4fbe8d706c0f7d16f17c4a28f34027e944b00c28fe20b62d1368d881f053f80f1a3eb03c4a28f35427e746505507e74018658b45d23e647b72e00ce8fee7020167da211f4a37b4300e947b790108b766844fde8e61bc0fad13d3ac4a29d1a613ffaeb0640fbd11f41108b7669c4fde8cf4700ef477f65422cfa5423f0477f9f03883ffa331e62d16e8dc81f354000cc1ff5492016ed5109fddd46407f7f400c0a55427fb710d0dfef1083bcce5e7708a98279c0f35e9d16ed8654c13ce2799f4e8b7641aa601ef2bc5fa7453b2055308f79fe4ca745db2155300f7a3ea0d3a26d902a98473d1fd469d1564815ccc39e0fa984fe6e421cc23cedf9b0ce4d74085205f3ee9d233a2d3a00a98279fbce519d16ed8754c1bc7fe7984e8bf642aa60dec0735ca745c72055306f923ba1d3a223902a9877c99dd468512a04f4f71bc4e5533ab71086683c09d942a794437fa930d0df6fe1cdf056f87b783bfc83babdd4aaa5b638f5b4697e40cd7f1ab4d094842652344ea2d11dcddd68c649034a1a06d32497a6e634f2f691543e92da47d2f8485a1f49e723e97d24838f649471401fc92423479965398b2cdf2fcb5965f90159ce26cb0fca7276597e489673c8f2c3b29c53961f91e55cb2fca82ce796e5c764398f2c3f2ecb7965f90959ce27cbf965b9802c1794e542b25c58968bc87251592e26cbc513040a2c0681028b432e013775428145205060518845b774428185205060618845bfeb84020b40a0c082108b6eeb8402f341a0c0fc108bfed00905e68540814f202c8a4da4130acc0381021f875814d10905e68640818f412c323aa1c05c1028f0518845562714981302053e02b1c8e984027340a0c0872116053aa1c0ec1028f0218845313aa1c06c1028f041884589354281d461025081d488825814ab110ba4161e800ba44e1fc4a2242afbe1b1b1902a906f02c426d569510ca40ae49b00b1c9745ae4205520df04888dd369918154817c132036b94e8b1241aa40be09101baf737c791b5205f25d80d8143a2dba05a902f936406c4a8d60204d3e2116dd8458749fce2c4a09a902f9b6766c2a9d16c543aa40bead1d9b5aa74571902a906f6bc7a6d16951524815c8b7b563d3eab4280da40ae4f923b1e9745a940a5205f2fc91d8f41a2d829c5a2413c4e60c3af7503a4815c89390201625241a981a8206d286a29b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbf7da4808f14f491423e52d8478af848511f29e623c5ef06089690f1a392b2fca42c3f25cb4fcb7229592e2dcb6564b9ac2c9793e5f2b2fc8c2c5790e56765b9a22c3f27cb9564f97959ae2ccb2fc8721559ae2acbd564f94559ae2ecb3564b9a62cd792e5dab25c4796ebca72bd040104eb4200c17a900b41519d80606d082058076251319d80604d0820580b6251719d806075082058036251099d8060350820f822c4a2923a01c12a1040b02ac4a227750282952180e00b108b9ed2090856820082cf432c7a5a2720581102083e07b1a8944e40b00204107c166251699d8060790820f80cc4a2323a01c1b21040b01cc4a2b23a01c1d21040b00cc4a2723a01c1a7218060298845e57502824f4200c1a720163da3b32b5e1e520513d715745a5416520513d7cfeab4a834a40a26ae2beab4e86948154c5c3fa7d3a227215530715d49a7452520554a422c7a5ea745c5205520dfff8fadac13102c09b108f2fdffd81774eea2ca902a98965a159d16558254c1b4d4aaeab4a822a40aa6a5564da745152055302db517755a540d52053324aaaed3a22a902a9821510d8d16a581008298dbcf9a3af750754815ccb8baa67240300d08102c4137a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7ffb48751fa9e123357da4968fd4f6913a3e52d747eadd0d10ac2fe3470d64b9a12cbf24cb8d64f965596e2ccb4d64b9a92c3793e5e6b2dc42965bca722b596e2dcb6d64b9ad2cbf22cbed64f955596e2fcb1d64b9a32cbf26cb9d64b9b32c7791e5aeb2dc4d96bbcb720f59ee992080600f0820d8137221e8ac1310ec060104bb432ceaa21310ec020104bb422ceaaa1310ec0401043b432ceaa61310ec0801045f8358d45d2720d81e0208768058d4432720d80e0208be0ab1a8a74e40b02d04107c0562512f9d80606b0820d80662516f9d80604b0820d80a62511f9d8060730820d80262d1eb3a01c1a61040b019c4a2be3a01c1c61040b009c4a27e3a01c1461040f0658845fd7502820d2180e04b108b06e8ec8af787541900b168a04e8bfa42aaf483583448a7457d20555e87583458a745bd20557a432c1aa2d3a21e902a98c6ec509d16758354c13466dfd069511748154c6376984e40b001c4224c6376b8ce5d340c526538c4a2113a2d1a0aa9f206c4a2913a2d1a0ca9320462d1289d160d84541904b168b44e8b4641aa8c86583446a74523205546422c1aabd122c8f32323f521368fd3b987c640aa8c85eca171ca01c1b42040b03edd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced239d7ca4b38f74f191ae3ed2cd47bafb480f1fe9793740b0978c1ff596e53eb2fcba2cf795e57eb2dc5f9607c8f240591e24cb836579882c0f95e5376479982c0f97e511b23c529647c9f268591e23cb6365799c2c8f97e509b23c519627c9f264599e22cb5365799a2c4f4f1040701a04109c0eb910bca713109c020104a7422c5aa113109c04010427432c7a5f2720380102084e8458b4522720380e02088e8758b44a27203806020862eedb57eb0404474100414c07618d4e4070040410c47410d6ea0404874100414c4f7c9d4e4070280410c4f4c4d7eb0404074300414c4f7c834e4070200410c4f4c437ea0404fb4300410cb7b4492720d817020862b8a5cd3a01c13e104010c32d7da0b32bbe1952e50388455b745ab411526513c4a20f755ab41e526503c4a2ad3a2d5a0ba9b20e62d1473a2d5a0da9b20662d1369d16ad84545905b1e8639d16ad8054791f62d1769d80606f8845ef412cfa44e72eda0ea9f209c4a21d3a2dda06a9f231c4a29d3a2dda0aa9f211c4a25d3a2dda02a9f221c4a24f755ab40b52e5538845bb755ab403526527c4a23d1a2d4a07010431df720a75eea1dd902a7b207b28540e08a6030182bde86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f1f61ccc94726f9c8641f99e223537d649a8f4cbf1b203843c68f66caf22c597e539667cbf21c599e2bcbf36479be2c2f90e585b2bc489617cbf212595e2acbcb64f92d597e5b9697cbf23bb2fcae2cbf27cb2b64f97d595e29cbab6479b52caf91e5b5b2bc4e96d7cbf286040104d74300414c37f3079d80e05a082088e9665ed00908ae860082986ee68f3a01c195104010d3cdfc492720b802020862ba993feb0404df850082986ee62f3a01c1e51040f01d8845bfea0404df8200826f432cbaa813105c0a010497412cbaa413105c0c010497402cbaac13105c08010417412cbaa213109c0f010417402cbaaa13109c0b0104e7412cbaa613109c0d0104e7402cbaae13109c050104df845874436757fc3aa4ca0d8845bfe9b4e82aa4ca35884537755a741952e50ac4a25b3a2dba08a9720962d1ef3a2dfa0552e5578845b7755af413a4cacf108bfed069d10548951f11162549a413109c09b1e80788451195bb284922489508c422a3f317ed36a4ca1f108bac4e8b6e41aafc0eb1c8e9b4e83748959b108b029d59e42055028845313a2d32902a166251628d16a5870082332036c7eadc4331902a89217b28563920981e0408cea09b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbf7d64a58facf291d53eb2c647d6fac83a1f59ef231bee06086e94f1a34db2bc59963f90e52db2fca12c6f95e58f64799b2c7f2ccbdb65f91359de21cb3b6579972c7f2acbbb65798f2c87b2ec6579af2cef93e5fdb2fc992c1f90e583b27c48960fcbf211593e2acbc764f978820082c72080e071c885e0119d80e0110820781462512e9d80e0210820781862d1a33a01c1031040f020c4a2dc3a01c1fd1040f03388458fe90404f74200c17d108bf2e80404430820e821163dae1310dc0d0104215f0f4b92572720b80b020842bea89ae4099d80e00e082008f9a26a927c3a01c1ed104010f2e88524f9750282db208020e4d10b490ae80404b7420041c8a3179214d409086e81008290472f2429a41310dc0c0104218fc74b52586757bc10a44a61884545745a540052a520c4a2a23a2dca07a9921f6251319d16e5855479026251719d16e58154791c6251099d16e58654790c6251499d16e58254791462d1933a01c14d108b1e8158f494ce5df424a4ca53108b9ed6695109489592108b4ae9b4a818a44a718845a5755a540452a528c4a2323a2d2a0da952066251599d163d0da9520a6251398d16658000829087e92729af730f9585542907d943e5950382194080e046ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8db470ef8c8411f39e423877de4888f1cf591633e72fc6e80e009193f3a29cba764f973593e2dcb5fc8f21959fe5296cfcaf257b27c4e96bf96e56f64f95b593e2fcbdfc9f2f7b2fc832c5f90e51f65f92759fe59967f91e55f65f9a22c5f92e5cbb27c4596afcaf23559be2ecb37120410bc0e0104215f9a4fd24c27207815020842be349fa4b94e40f0320410847c693e490b9d80e045082008f9d27c92963a01c15f208020e44bf3495ae904047f820082902fcd2769ad1310bc000104315f9a6fa31310fc1e020862be34df562720781e02087e07b1e8159d80e0371040f05b8845ed740282e72080e0d7108b5ed509089e8500825f412c6aaf13103c030104bf8458d4412720781a02087e01b1a8a34e40f0140410fc1c62d16b3abbe21d21555e8358d449a745ed21553a402ceaacd3a276902aaf422ceaa2d3a2b6902aaf402ceaaad3a2d6902a6d201675d369514b489556108bbaebb4a839a44a0b88453d740282272116358358d453e72eea01a9d21362512f9d16758354e90eb1a8b74e8bba40aa748558d447a7459d20553a432c7a5da7457d20555e8758d457a7459077df26e90db1a89f468b324200c113109bfbebdc437d2155fa41f6507fe5806046102078826e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef6918b3e72c9472efbc8151fb9ea23d77ce4ba8fdcb81b20f89b8c1fdd94e55bb2fcbb2cdf96e53f44d92492e5882c1b59b6b2ec643990e518594e2ccbb1b29c449693ca7232598e93e5e4b21c2fcb296439a52cdf27cba96439b52ca791e5b4b29c4e96d3cb720659ce981080a0c98000040de48a9b648e4a40d0a443008206f258e32473550282260d021034692116cd5309089a540840d0a48658345f25206852220041731fc4a2052a0141138f00044d0a88450b550282260e01089ae4108b16a904044d5204206892412c5aac121034b10840d0248158b444252068621080a0c1bc8560a94a40d03804206830ef4359a61210340601081accfb50de5209089a440840d060def0f5b64e40f0360410c4bce16bb94e40f0160410c4bce1eb1d9d5df1e5902aef402c7a57a7456f41aabc0db1e83d9d162d85545906b168854e8b1643aa2c8158f4be4e8b1642aa2c8258b452a745f3215516402c5aa5d3a2b9902af32016add60908de8458340762d11a9dbb6835a4ca1a88456b755ab412526515c4a2753a2d5a01a9f23ec4a2f53a2d7a1752e53d88451b745ab41e526503c4a28d3a2d5a0ba9b20e62d1268d166582008290f78127d9ac730f611e8fb809b287362b0704338100c1dfe86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f6f527993da9b34dea4f5269d37e9bdc9e04dc6bb008226938c1f6596e52cb27cbf2c6795e50764399b2c3f28cbd965f92159ce21cb0fcb724e597e449673c9f2a3b29c5b961f93e53cb2fcb82ce795e52764399f2ce797e502b25c50960bc97261592e22cb4565b9982c174f1040b0180410c43cf7fba44e40b0080410c43cf7fb944e40b0100410c4bc9be9739d8060010820887937d3699d80603e0820887937d3173a01c1bc104010f36ea6333a01c13c104010f36ea62f750282b9218020e6dd4c67750282b9208020e6dd4c5fe9040473420041ccbb99cee90404734000c18721167dad1310cc0e01041f8258f48d4e40301b04107c1062d1b72a0141931501089a0720169d5709089a2c0840d0dc0fb1e83b9d5df1f3902a98c7067fafd3a26f2055308f0dfe41a745e72055308f0dbea0d3a2b3902a98c706ffa8d3a233902a98c706ffa4d3a2d3902a98c706ffacd3a253902a98c706ffa21210349921169d8458f4abce5df40ba40ae6d52e17755af413a40ae6d52e97745a74015205f36a97cb3a2dfa1e5205f36a972b3a2dba0ca9827959d9559d165d8454c1bcacec9a468b32234ecd6482d87c5de71eba0aa982796de275e58060660c206832d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde14f0a6a03785bc29ec4d116f8a7a53cc9be27703044bc8f85149597e52969f92e5a765b9942c9796e532b25c5696cbc97279597e46962bc8f2b3b25c51969f93e54ab2fcbc2c5796e51764b98a2c5795e56ab2fca22c5797e51ab25c53966bc9726d59ae23cb7565b95e820082752180603dc48520697a9d80606d082058076251069d80604d0820580b6251469d806075082058036251269d8060350820f822c4a2cc3a01c12a1040b02ac4a22c3a01c1ca1040f0058845f7eb04042b4100c1e7211665d5090856840082cf412c7a402720580102083e0bb1289b4e40b03c04107c0662d1833a01c1b21040b01cc4a2ec3a01c1d21040b00cc4a2877402824f4300c152108b72e804049f8400824f412c7a5865573c690e481508cf9d34a74e8bb243aa4078eea48fe8b4281ba40a84e74e9a4ba745592155203c77d247755a94055205c27327cdadd322c8843629645a9cf4319d1665805481bc2028691e9d8060498845901704257d5ce72eca03a902f9ce6dd2bc3a2dca0da902f9ce6dd227745a940b5205f29ddba4f9745a94135205f29ddba4f9755a940f5205f21489a405745a94175205f21489a405355a940502089680d85c48e71e2a00a902799e0dc4a2840404b38000c11274334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b737d5bda9e14d4d6f6a7953db9b3aded4f5a6dedd00c1fa327ed440961bcaf24bb2dc48965f96e5c6b2dc44969bca7233596e2ecb2d64b9a52cb792e5d6b2dc4696dbcaf22bb2dc4e965f95e5f6b2dc41963bcaf26bb2dc49963bcb721759ee2acbdd64b9bb2cf790e59e090208f68000823d2117821a3a01c16e1040b03bc4a29a3a01c12e1040b02bc4a25a3a01c14e1040b033c4a2da3a01c18e1040f035884575740282ed21806007884575750282ed2080e0ab108beae90404db4200c1572016d5d70908b68600826d201635d00908b6840082ad201635d40908368700822d2016bda413106c0a01049b412c6aa413106c0c01049b402c7a592720d8080208be0cb1a8b14e40b02104107c096251139d5df1c6902a985fb4a63a2d6a04a982f9456ba6d3a286902a985fb4e63a2daa0fa9d20062510b9d16d58554c17c73bba54e8b6a43aa60beb9dd4aa74535215530dfdc6ead13106c00b108f3cded363a77516b48154c33a4ad4e8b5a42aa609a21afe8b4a839a40aa619d24ea7454d215530cd9057755ad40e5205d3de6fafd3a2b6902a98f67e078d1641be3663307fc474d4b987da43aa60068d1d950382f78300c1fa74334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b7379dbce9ec4d176fba7ad3cd9beedef4f0a6e7dd00c15e327ed45b96fbc8f2ebb2dc5796fbc9727f591e20cb036579902c0f96e521b23c5496df90e561b23c5c9647c8f248591e25cba365798c2c8f95e571b23c5e9627c8f244599e24cb9365798a2c4f95e569b23c3d4100c1691040703ae44230562720380502084e8558344e2720380902084e8658345e2720380102084e845834412720380e02088e875834512720380602088e855834492720380a02088e865834592720380202088e845834452720380c02080e87583455272038140208be01b1689a4e40703004101c02b168ba4e40702004101c04b168864e40b03f04101c00b168a64e40b02f0410ec07b168964e40b00f04107c1d62d19b3abbe2b32055de8458345ba74533205566422c9aa3d3a269902a9896da5c9d164d8154c1b4d4e6e9b46812a40aa6a5365fa745132055302db5053a2d1a07a98269a92dd40908f686588469a92dd2b98b1642aa2c8258b458a745f3215516402c5aa2d3a2b9902af320162dd569d16c489539108b96e9b46829a4ca3288456fe9b46831a4ca1288456f6bb4282b0410ec05b179b9ce3df416a4cadb903db45c392098150408f6a29b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbd61ccc99b49de4cf6668a3753bd99e6cdf4bb01823364fc68a62ccf92e5376579b62ccf91e5b9b23c4f96e7cbf202595e28cb8b6479b12c2f91e5a5b2bc4c96df92e5b76579b92cbf23cbefcaf27bb2bc4296df97e595b2bc4a9657cbf21a595e2bcbeb6479bd2c6f481040703d0410dc00b910ecd10908ae850082eb2016853a01c1d51040700dc422af13105c09010457412cdaab13105c010104df8758b44f2720f82e04107c0f62d17e9d80e0720820f80ec4a2cf7402826f410041cc5f7f077402824b218020a60f75502720b818020862fa50877402820b21802066b272582720381f020862262b477402827321802066b272542720381b020862262bc7740282b3208020867e3baeb32b7e0c52e538c4a2133a2d3a02a9721462d1499d161d8254390cb1e8944e8b0e40aa1c8458f4b94e8bf643aa7c06b1e8b44e8bf642aaec8358f4854e8b4248150fb1e88c4e407026c4a23d108bbed4b98bce40aa7c09b1e8ac4e8b4e43aa7c01b1e82b9d169d8254f91c62d1399d169d80543909b1e86b9d169d8354f91a62d1373a2d3a0ba9f215c4a26f355af4000410c47c57eebcce3df40da4cab7903d745e3920f80008109c4137a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7bb3d29b55deacf6668d376bbd59e7cd7a6f36dc0d10dc28e3479b6479b32c7f20cb5b64f94359de2acb1fc9f23659fe5896b7cbf227b2bc439677caf22e59fe549677cbf21e590e65d9cbf25e59de27cbfb65f933593e20cb0765f9902c1f96e523b27c54968fc9f2f10401048f410041484f3c59629d80e011082008e989278bd509081e820082909e78b2243a01c103104010d2134f96542720b81f0208427ae2c992e90404f7420041484f3c599c4e4030840082909e78b2e43a01c1dd104010d2134f16af1310dc0501043f855894422720b8030208ee845894522720b81d02087e02b1e83e9d80e0360820f831c4a2543a01c1ad1040f0238845a97502825b2080e087108bd2e80404374300c10f2016a555d9154f960652252dc4a2743a2d4a05a9921a62517a9d16a58454b90f6251069d16c543aaa480589451a74571902ac9211665d2695152489564108b32ebb42816522509c4a22c3a01c14d108b12432cba5fe72eca02a90279b163b2ac3a2dca04a9921962d1033a2dca00a992116251369d16a58354490fb1e8419d1665835479106251769d16658554815074c91ed26851360820b81162730e9d7b283ba4ca43903d94433920980d04086ea49b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbd39e0cd416f0e7973d89b23de1cf5e69837c7ef06089e90f1a393b27c4a963f97e5d3b2fc852c9f91e52f65f9ac2c7f25cbe764f96b59fe4696bf95e5f3b2fc9d2c7f2fcb3fc8f20559fe51967f92e59f65f91759fe55962fcaf22559be2ccb5764f9aa2c5f93e5ebb27c234100c1eb1040f006e442504e2720781502085e8358545e2720781902085e8158f48c4e40f0220410bc04b1a8824e40f0170820f82bc4a2677502823f4100c19f211655d409085e8000823f422c7a4e2720f83d0410fc016251259d80e0790820f81dc4a2e7750282df400041c8970c9355d609089e83008290af3b277b4127207816020842beee9cac8a4e40f00c0410843cc02359559d80e069082008798047b26a3a01c153104010f2008f642feaec8a57835479116251759d16558154a90ab1a8864e8b2a43aabc00b1a8a64e8b2a41aa3c0fb1a8964e8b2a42aa3c07b1a8b64e8b2a40aa3c0bb1a88e4e8bca43aa3c03b1a8ae4e40f024c4a272108beae9dc45752155ea412caaafd3a2da902a75201635d069514d48955a108b1aeab4a83aa44a0d88452fe9b4a821a4ca4b108b1ae9b4a83ea44a0388452f6bb40882871ac8e33e9335d6b9871a41aabc0cd9438d9503820f8200c11374334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b73717bdb9e4cd656fae7873d59b6bde5cf7e6c6dd00c1df64fce8a62cdf92e5df65f9b62cff21ca36912c4764d9c8b2956527cb812cc7c87262598e95e524b29c549693c9729c2c2797e578594e21cb2965f93e594e25cba965398d2ca795e574b29c5e9633c872c68400046d06042068315febe9a71210b4e91080a0c57cada7bf4a40d0a641008216f3e885012a01419b0a01085acca31706aa04046d4a042068318f5e18a41210b4f10840d0621ebd3058252068e31080a0c53c7a61884a40d02645008216f3e885a12a01411b8b00042de6d10b6fa804046d0c0210b498472f0c5309085a8700046d00b168b84a40d01a0420682dc4a2112a01419b080108da08c4a2913a01c1db1040f00f8845a3740282b72080e0ef108b46ebec8a8f8254190db1688c4e8b4640aa8c84583456a745c3205586432c1aa7d3a2a1902a6f402c1aafd3a2c1902a4320164dd069d140489541108b26eab4a83fa4ca00884593740282372116f583583459e72e9a04a9321962d1149d164d80549908b168aa4e8bc641aa8c8758344da745632055c6422c9aaed3a269902ad32116cdd069d1144895a9108b666ab4283b0410fc0d62f32c9d7b08f2fee46433217b68967240303b0810fc8d6e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef63695b7a9bd4de36d5a6fd3799bdedb0cde66bc0b206833c9f8516659ce22cbf7cb7256597e4096b3c9f283b29c5d961f92e51cb2fcb02ce794e5476439972c3f2acbb965f93159ce23cb8fcb725e597e4296f3c9727e592e20cb0565b9902c1796e522b25c54968bc972f10401048b4100c1e2900bc1269d8060110820581462d1669d8060210820581862d1073a01c1021040b020c4a22d3a01c17c1040303fc4a20f750282792180e013108bb6ea0404f34000c1c721167da41310cc0d01041f8358b44d2720980b02083e0ab1e8639d80604e0820f808c4a2ed3a01c11c1040f06188459fe80404b3430041ccbb2c76e80404b3410041cc5b7576aa04046d56042068316fd5d9a51210b4591080a0c5bc27ee539d5df15d902a9f422cdaadd3a21d902a3b2116edd169d17648954f2016853a2dda06a9f231c422afd3a2ad902a1f412cdaabd3a22d902a1f422cdaa7d3a2cd902a1f402cdaaf1210b49921166d8258f499ce5db41f52e533884507745ab41752651fc4a2833a2d0a21553cc4a2433a2dda0da9b20762d1619d161d8254390cb1e8884e8b0e40aa1c84587454a345906ea1c5bc55fe98ce3d740452e528640f1d530e083e8401046d26ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbdb02de16f4b690b785bd2de26d516f8b795bfc6e806009193f2a29cb4fcaf253b2fcb42c9792e5d2b25c4696cbca7239592e2fcbcfc87205597e56962bcaf273b25c49969f97e5cab2fc822c5791e5aab25c4d965f94e5eab25c43966bca722d59ae2dcb7564b9ae2cd74b1040b02e0410c43c3dfe9a4e40b0360410c43c3dfeba4e40b0260410c43c3dfe864e40b03a0410c43c3dfe379d80603508208879c3d74d9d80601508208879c3d72d9d80606508208879c3d7ef3a01c14a104010f386afdb3a01c18a104010f386af3f74028215208020e40d5f7189740282e5218020e40d5f71119d80605908200879c3579cd1090896860082652016599d80e0d31040b014c422a713107c1202083e05b12850d9158f73902a9007bec6c5e8b4c840aa401ef81a9758a745892055200f7c8d8bd5397eba0da90279e06b5c129d16dd8254813cf0352ea94e8b308f70b909b128994e8bae43aadc805814a713102c09b1e81ac4a2e43aaf6871902a909772c4c5ebb42829a40ae4a51c7129745a140ba9027929475c4a9d16c540aa405eca11779f4e8b5242aa405e3315974aa745f1902a90d74cc5a5d668510e0820580262731a9d7b2815a40ae48577108b121210cc0102044bd0cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde56f7b686b735bdade56d6d6feb785bd7db7a770304ebcbf85103596e28cb2fc97223597e59961bcb7213596e2acbcd64b9b92cb790e596b2dc4a965bcb721b596e2bcbafc8723b597e5596dbcb720759ee28cbafc9722759ee2ccb5d64b9ab2c7793e5eeb2dc43967b260820d8030208f6845c080aea0404bb4100c1ee108b0ae90404bb4000c1ae108b0aeb04043b4100c1ce108b8ae804043b4200c1d7201615d50908b68700821d201615d30908b6830082af422c2aae13106c0b01045f815854422720d81a0208b6815854522720d8120208b68258f4a44e40b03904106c01b1e8299d8060530820d80c62d1d33a01c1c61040b009c4a2523a01c1461040f0658845a57502820d2180e04b108bcae8ec8a978654c190b865755af434a40a86c42da7d3a227215530246e799d1661666b2521163da3d3a262902a9057bbc455d06951114815c8ab5de29ed56951214815c8ab5de22aea04041b402c82bcda25ee399dbba822a40ae4db927195745a54015205f36dc9e7755a541e5205f36dc9ca3a2d2a0ba982f9b6e40b3a2daa0ca902f9fe7f5c159d16558254817cff3faeaa468b20af64b1f5213657d3b987aa40aa409e4402b1282101c1874180607dba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbdb4ede76f6b68bb75dbdede66d776f7b78dbf36e80602f193fea2dcb7d64f97559ee2bcbfd64b9bf2c0f90e581b23c489607cbf210591e2acb6fc8f230591e2ecb236479a42c8f92e5d1b23c4696c7caf238591e2fcb136479a22c4f92e5c9b23c4596a7caf234599e9e2080e0340820381d7221e8a013109c020104a7422ceaa813109c04010427432c7a4d2720380102084e8458d4492720380e02088e8758d4592720380602088e8558d4452720380a02088e8658d4552720380202088e8458d44d2720380c02080e8758d45d272038140208be01b1a8874e40703004101c02b1a8a74e40702004101c04b1a8974e40b03f04101c00b1a8b74e40b02f0410ec07b1a88f4e40b00f04107c1d62d1eb3abbe27d20553016f5d569512f4895de108bfae9b4a807a40ae63bb7fd755ad40d5205f39ddb013a2dea02a982f9ceed409d16758254c17ce776904e8b3a42aa60be733b582720d81b6211e63bb74374eea2c1902a983f6387eab46820a40ae6cfd837745ad41f5205f367ec309d16f58554c1fc193b5ca745c32055308dd9113a2d1a0aa98269cc8ed468514e082088f9537894ce3d3402520533221aa51c10cc0902047bd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde32e6e4ed246f277b3bc5dba9de4ef376fadd00c119327e34539667c9f29bb23c5b96e7c8f25c599e27cbf36579812c2f94e545b2bc589697c8f252595e26cb6fc9f2dbb2bc5c96df91e57765f93d595e21cbefcbf24a595e25cbab65798d2caf95e575b2bc5e9637240820b81e02086e805c08ded60908ae850082eb20162dd70908ae8600826b2016bda313105c09010457412c7a572720b8020208be0fb1e83d9d80e0bb1040f03d88452b740282cb2180e03b108bded70908be050104df8658b4522720b81402082e8358b44a2720b81802082e8158b45a2720b81002082e8258b4462720381f02082e8058b456272038170208ce8358b44e2720381b0208ce8158b45e2720380b0208be09b16883ceaef87a48154c3364a34e8bd642aa609a219b745ab41a5205d30cd9acd3a295902a9866c8073a2d5a01a98269866cd169d1bb902a9866c8873a2d5a0ea98269866cd50908ce84588469867ca473176d8554f90862d1369d166d8154f91062d1c73a2dda0ca9f201c4a2ed3a2dda08a9b20962d1273a2dda0ea9f209c4a21d3a2dda06a9f231c4a29d1a2d7a040208ce80d8bc4be71eda01a9b213b287762907041f01018233e86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f6f577abbcadbd5deaef176adb7ebbc5defed86bb01821b65fc68932c6f96e50f64798b2c7f28cb5b65f92359de26cb1fcbf27659fe449677c8f24e59de25cb9fcaf26e59de23cba12c7b59de2bcbfb6479bf2c7f26cb0764f9a02c1f92e5c3b27c44968fcaf231593e9e2080e0310820781c7221f8562720780402081e8558745e2720780802081e8658f49d4e40f00004103c08b1e87b9d80e07e0820f819c4a21f7402827b2180e03e884517740282210410f4108b7ed40908ee8600827b2016fda41310dc0501043f8558f4b34e4070070410c4f4107ed109086e870082986ee6af3a01c16d104010d3cdbca81310dc0a010431f3b94b3a01c12d104010339fbbac1310dc0c010431f3b92b3abbe2972155ae402cbaaad3a28b902a9720165dd369d12f902abf422cbaaed3a29f20557e86587443a7451720557e8458f49b4e8bbe8754f90162d14d9d169d8754f90e62d12d9d80e0268845df422cfa5de72eba05a9f23bc4a2db3a2dfa0d52e526c4a23f745a741d52e506c2a2e489745a741552e51ac4a2884a8b9227825489402c323a77d16d48953f2016598d16e5820082109a37b9d3f96b6620552c640f39e580602e1020b8916e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef6f680b707bd3de4ed616f8f787bd4db63de1ebf1b207842c68f4ecaf22959fe5c964fcbf217b27c4696bf94e5b3b2fc952c9f93e5af65f91b59fe5696cfcbf277b2fcbd2cff20cb1764f94759fe49967f96e55f64f95759be28cb9764f9b22c5f91e5abb27c4d96afcbf28d040104af430041cc5dfb433a01c1ab10401073d79e4327207819020842262bc91fd609085e84008290c94af29c3a01c15f20802064b292fc119d80e04f1040103259499e4b27207801020842262bc91fd509087e0f0104219395e4b9750282e721802064b292fc319d80e0371040103259499e472720780e02087e0db1e8719d80e0590820f815c4a2bc3a01c1331040f04b88454fe804044f4300c12f2016e5d309089e8200829f432ccaafb32b9e0f52253fc4a2023a2dca0ba9f204c4a2823a2dca03a9f238c4a2423a2dca0da9f218c4a2c23a2dca05a9f228c4a2223a2dca09a902799c4cf2a23a2dca01a9f230c4a2623a01c193108b1e8258545ce72e2a06a9521c6251099d16158154290ab1a8a44e8b0a41aa148658f4a44e8b0a40aa148458f4944e8b9e8454790a62d1d33a2d2a01a952126251298d1641ee8aed0988cda575eea1a721554a41f65069e580e0a32040f004dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fceded456f2f797bd9db2bde5ef5f69ab7d7bdbd713740f037193fba29cbb764f97759be2dcb7f88b24b24cb115936b26c65d9c97220cb31b29c5896636539892c2795e564b21c27cbc965395e9653c8724a59be4f9653c9726a594e23cb6965399d2ca797e50cb29c3121004197010108ba8c900bc1cb2a0141970e0108baf4108b1aab04045d1a0420e8d2422c6aa2121074a91080a04b0db1a8a94a40d0a5440082ee3e8845cd5402822e1e0108ba14108b9aab04045d1c021074c92116b5500908baa40840d0258358d4522520e8621180a04b02b1a8954a40d0c5200041971862516b9580a0730840d005108bdaa804049d4100820ef355d5b62a0141970801083acc97e65fd10908de860082982fcdb7d30908de82008290c7c0247f556757bc1da4caab108bdaebb4a82da4ca2b108b3ae8b4a835a44a1b88451d755ad41252a515c4a2d7745ad41c52a505c4a24e3a2d6a0aa9d20c6251679d163586546902b1a88b4e40f026c4a297211675d5b98bba40aa748558d44da7459d20553a432ceaaed3a28e902aaf412ceaa1d3a2f6902a1d2016f5d469510f48959e108b7ae9b4a81ba44a778845bd355a941b0208421e1a9bbc8fce3dd40b52a537640ff5510e08e6060182bfd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfdea5f22eb57769bc4beb5d3aefd27b97c1bb8c7701045d26193fca2ccb5964f97e59ce2acb0fc87236597e5096b3cbf243b29c43961f96e59cb2fc882ce792e5476539b72c3f26cb7964f97159ce2bcb4fc8723e59ce2fcb0564b9a02c1792e5c2b25c44968bca7231592e9e20806031082088f972d84c9d806011082088f972d82c9d806021082088f972d89b3a01c102104010f3e5b0d93a01c17c104010f3008f393a01c1bc104010f3008fb93a01c13c104010f3008f793a01c1dc104010f3008ff93a01c15c104010f3008f053a01c19c104010f3008f853a01c11c104010f3008f453a01c1ec104010f3008fc53a01c16c1040f04188454b5402822e2b0210740f402c5aaa121074591080a0bb1f62d1329d5df1a5902acb2016bda5d3a2c5902a4b2016bdadd3a285902a8b20162dd769d17c489505108bded169d15c489579108bded569d16c489539108bded369d12c4895372116ad500908bacc108b66422c7a5fe72e5a01a9f23ec4a2953a2d7a1752e53d8845ab745ab41c52e51d8845ab755af416a4cadb108bd6e8b46835a4ca1a88456b755ab412526515c4a2751a2d824c2e5c2688cdeb75eea1b5902aeb207b68bd7240f0310c20e832d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde15f0aea07785bc2bec5d11ef8a7a57ccbbe27703044bc8f85149597e52969f92e5a765b9942c9796e532b25c5696cbc97279597e46962bc8f2b3b25c51969f93e54ab2fcbc2c5796e51764b98a2c5795e56ab2fca22c5797e51ab25c53966bc9726d59ae23cb7565b95e820082752180603dc885e0a84e40b0360410ac03b1e8984e40b0260410ac05b1e8b84e40b03a0410ac01b1e8844e40b01a04107c1162d1499d8060150820581562d1299d8060650820f802c4a2cf750282952080e0f3108b4eeb04042b4200c1e720167da11310ac0001049f855874462720581e02083e03b1e84b9d8060590820580e62d1599d8060690820580662d1573a01c1a7218020e68d28e77402824f420041ccbb99bed6d9153f07a9827923fc373a2d3a0ba9827923fcb73a2d3a03a9827923fc799d169d8654c1bc11fe3b9d169d8254c1bc11fe7b9d1661def1761262d10f3a2d3a06a9721c62d1059d8060498845472116fda873175d8054f91162d14f3a2dfa1e52e50788453febb4e83ca4ca77108b7ed169d137902adf422cfa55a745bf40aafc0ab1e8a24e8b7e8254f91962d1258d16e58100829837395fd6b9872e42aa5c82eca1cbca01c13c2040b004dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced5d75ef6a7857d3bb5aded5f6ae8e7775bdab773740b0be8c1f3590e586b2fc922c3792e59765b9b12c3791e5a6b2dc4c969bcb720b596e29cbad64b9b52cb791e5b6b2fc8a2cb793e55765b9bd2c7790e58eb2fc9a2c7792e5ceb2dc4596bbca723759ee2ecb3d64b9678200823d208020e489cdf1a9750282dd208020e489cdf1697402825d208020e41d04f1697502829d208020e41d04f1e97402821d218020e41d04f1e9750282ed218020e41d04f119740282ed208020e43d71f1197502826d218020e43d71f199740282ad218020e43d71f1997502822d218020e43d71f159740282cd218020e43d71f1f7eb04049b420041c87be2e2b3ea04041b430041c87be2e21fd009083682008290f7c4c567d30908368400822f412c7a5065573c3e1ba40ae4519df1d9755a94155205f2a8cef887745a94055205f2a8cef81c3a2d823c7c233e33c4a287755a9401522523c4a29c3a2d4a07a9921e62d1233a2d4a03a9921662512e9d8060038845a921163daa7317e5825481bc4e213eb74e8b7242aa405ea710ff984e8b7240aa405ea7109f47a745d9215520af53887f5ca745792055202f088acfabd3a2dc902a90c7ecc53fa1d122c8a7efea436ccea7730fe5855481bcaa0c62514202828f8300c1fa74334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b7779dbcebec5d17efba7ad7cdbbeedef5f0aee7dd00c15e327ed45b96fbc8f2ebb2dc5796fbc9727f591e20cb036579902c0f96e521b23c5496df90e561b23c5c9647c8f248591e25cba365798c2c8f95e571b23c5e9627c8f244599e24cb9365798a2c4f95e569b23c3d4100c1691040703ae44250552720380502084e8558544d2720380902084e8658f4a24e40700204109c08b1a8ba4e40701c04101c0fb1a8864e40700c04101c0bb1a8a64e40701404101c0db1a8964e40700404101c09b1a8b64e40701804101c0eb1a88e4e40702804107c0362515d9d80e0600820380462513d9d80e0400820380862517d9d80607f082038006251039d80605f0820d80f6251439d80601f0820f83ac4a2977476c51b42aa6018ca463a2dc24c451a402c7a59a745752155202fe5886facd3a2da902a909772c437d169514d4815c84b39e29beab4a83aa40ae4a51cf1cd745a540d5205f2528ef8e63a01c1de108b202fe5886fa17317358754c17ccfada54e8b9a42aa60bee7d64aa7458d215530df736badd3a246902a98efb9b5d169516b4815cc37b7dbeab4a825a40ae69bdbaf68b4282f0410ec05b1b99dce3dd4165205f30c8976ca01c1bc2040b017dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced1d634ede4df26eb27753bc9beadd34efa6df0d109c21e347336579962cbf29cbb365798e2ccf95e579b23c5f9617c8f242595e24cb8b6579892c2f95e565b2fc962cbf2dcbcb65f91d597e5796df93e515b2fcbe2caf94e555b2bc5a96d7c8f25a595e27cbeb657943820082eb2180e006c88560a44e40702d04105c07b168944e40703504105c03b168b44e40702504105c05b1688c4e40700504107c1f62d1589d80e0bb1040f03d8845e3740282cb2180e03b108bc6eb0404df8200826f432c9aa013105c0a010497412c9aa813105c0c010497402c9aa413105c08010417412c9aac13109c0f010417402c9aa213109c0b0104e7412c9aaa13109c0d0104e7402c9aa613109c050104df8458345d67577c1aa40ae6db9233745a34055205f36dc9993a2d9a04a982f9b6e42c9d164d8054c17c5bf24d9d168d8354c17c5b72b64e8bc640aa60be2d3947a745a3205530df969cab13109c09b108f36dc9793a77d15c4815cc1f20f3755a341b5205f307c8029d16cd8254c1fc01b250a74533205566422c5aa4d3a285902a9896da629d16cd8754c1b4d49668b408f2603b87f9655daa730f2d8654c134f7972a07049f00018233e86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36fef567ab7cabbd5deadf16ead77ebbc5befdd86bb01821b65fc68932c6f96e50f64798b2c7f28cb5b65f92359de26cb1fcbf27659fe449677c8f24e59de25cb9fcaf26e59de23cba12c7b59de2bcbfb6479bf2c7f26cb0764f9a02c1f92e5c3b27c44968fcaf231593e9e2080e0310820781c7221d8a913103c0201048f422cdaa513103c0401040f432cfa542720780002081e8458b45b2720b81f02087e06b1688f4e40702f0410dc07b128d40908861040d0432cf23a01c1dd1040700fc4a2bd3a01c15d1040f0538845fb7402823b2080e04e8845fb750282db2180e027108b3ed309086e8300821f432c3aa01310dc0a01043f825874502720b80502087e08b1e8904e4070330410fc0062d1619d5df143902a983f638fe8b4e800a40ae6cfd8a33a2dda0fa982f933f6984e8bf642aa60fe8c3daed3a2105205f367ec099d16ed8654c1fc197b52a745bb2055307fc69ed209086e825884f933f6739dbbe814a4cae7108b4eebb4e804a4ca4988455fe8b4e818a40a66d47846a74547205530a3c62f755a740652e54b884567755a741a52e50b88455f69b4281f0410dc08b1f99cce3d741652e52bc81e3aa71c10cc07020437d2cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde1df0eea07787bc3becdd11ef8e7a77ccbbe37703044fc8f8d149593e25cb9fcbf26959fe4296cfc8f297b27c5696bf92e573b2fcb52c7f23cbdfcaf27959fe4e96bf97e51f64f9822cff28cb3fc9f2cfb2fc8b2cff2acb1765f9922c5f96e52bb27c5596afc9f27559be912080e0750820780371214861750282572180e03588454e2720781902085e815814e804042f4200c14b108b62740282bf4000c15f211625d60908fe0401047f865814ab1310bc0001047f845894442720f83d0410fc016251529d80e0790820f81dc4a2643a01c16f2080e0b7108be2740282e72080e0d7108b92eb0404cf42004148272a45bc4e40f00c041084f4c453a4d009089e860082909e788a943a01c15310401032e54d719fcaae788a94902af7412c4aa5d3a278489514108b52ebb4280e522539c4a2343a2d4a0aa9920c62515a9d16c542aa248158944ea74531902a892116a5d76991835409201665d009089e845864211665d4b98b3240aa6484589449a745e92055d2432ccaacd3a234902a69211665d169512a4895d4108beed76951164895fb211665d56951264895cc108b1ed068517e08200861c25364d3b987b242aa3c00d943d9940382f94180e009ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbbb8bde5df2eeb27757bcbbeadd35efae7b77e36e80e06f327e7453966fc9f2efb27c5b96ff10e520912c4764d9c8b2956527cb812cc7c87262598e95e524b29c549693c9729c2c2797e578594e21cb2965f93e594e25cba965398d2ca795e574b29c5e9633c872c6840004830c084030c0fced574a252018a443008201e66fbfd22a01c1200d02100c307ffb9551090806a910806080f9dbafac4a40304889000403cc7cae9c4a40308847008201663e575e252018c42100c100339f7b462520182445008201663e5741252018c42200c100339f7b56252018c42000c100339faba812100c1c02100c30f3b9e75402828141008201663e574925201824420082410462d1f33a01c1db1040f00f884595750282b72080e0ef108b5ed0d915af0ca9f202c4a22a3a2daa04a9f23cc4a2aa3a2daa08a9f21cc4a26a3a2daa00a9f22cc4a217755a541e52e5198845d5755a541652a51cc4a21a3a2d2a0da9520662514d9d80e04d8845a52016d5d2b98b6a42aad48258545ba745d521556a402caaa3d3a26a902a2f422caaabd3a22a902a552116d5d369515d48957a108beaebb4a836a44a1d88450d345a54000208fe06b1b9a1ce3d541f52a501640f35540e0816000182bfd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3e48e583d43e48e383b43e48e783f43ec8e0838c770104834c327e945996b3c8f2fdb29c55961f90e56cb2fca02c6797e5876439872c3f2ccb3965f91159ce25cb8fca726e597e4c96f3c8f2e3b29c57969f90e57cb29c5f960bc87241592e24cb8565b9882c1795e562b25c3c4100c1621040b038e442d05b272058040208168558d447272058080208168658f4ba4e40b00004102c08b1a8af4e40301f0410847c3d28453f9d80605e0820f804c4a2fe3a01c13c1040f071884503740282b92180e063108b06ea0404734100c14721160dd20908e68400828f402c1aac1310cc0101041f865834442720981d02083e04b168a84e40301b04107c1062d11b2a01c1202b02100c305f781ea612100cb22000c100f3e885e13abbe2c3205586432c1aa1d3a2a1902a6f402c1aa9d3a2c1902a4320168dd269d140489541108b46ebb4a83fa4ca00884563745ad41752a51fc4a2b13a2dea03a9f23ac4a2712a01c12033c4a2de108bc6ebdc45e32055c6432c9aa0d3a231902a6321164dd469d1284895d1108b26e9b46804a4ca48884593755a3409526532c4a2293a2d9a00a9321162d1548d1641a6a801e6418dd374eea129902a53217b689a7240b02006100c32d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3e28e083823e28e483c23e28e283a23e28e683e27703044bc8f85149597e52969f92e5a765b9942c9796e532b25c5696cbc97279597e46962bc8f2b3b25c51969f93e54ab2fcbc2c5796e51764b98a2c5795e56ab2fca22c5797e51ab25c53966bc9726d59ae23cb7565b95e82008275218020e60b19eb740282b5218020e60b19eb75028235218020e62b861b740282d5218020e62b861b750282d5208020e62b869b74028255208020e62b869b75028295218020e631301fe804042b410041cc6360b6e804042b420041cc63603ed409085680008298c7c06cd509089687008298c7c07ca413102c0b0104318f81d9a613102c0d0104318f81f9582720f8340410c43c0666bb4e40f0490820f814c4a24f7476c5b743aa7c02b168874e8bb641aa7c0cb168a74e8bb642aa7c04b168974e8bb640aa7c08b1e8539d166d8654f90062d16e9d166d8454d904b1688f4e8bd643aa6c805814ea04044b422c5a07b1c8ebdc4521a48a8758b457a745bb2155f6402cdaa7d3a25d902a9f422cdaafd3a21d902a3b21167da6d3a2fd902a9f412c3aa0d3a2bd902afb20161dd46851210820580262f3219d7be800a4ca41c81e3aa41c102c0402044bd0cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3ea8ee831a3ea8e9835a3ea8ed833a3ea8eb837a770304ebcbf85103596e28cb2fc97223597e59961bcb7213596e2acbcd64b9b92cb790e596b2dc4a965bcb721b596e2bcbafc8723b597e5596dbcb720759ee28cbafc9722759ee2ccb5d64b9ab2c7793e5eeb2dc43967b260820d8030208f6845c082ee90404bb4100c1ee108b2eeb0404bb4000c1ae108baee804043b4100c1ce108baeea04043b4200c1d720165dd30908b68700821d20165dd70908b6830082af422cbaa113106c0b01045f8158f49b4e40b03504106c03b1e8a64e40b02504106c05b1e8964e40b03904106c01b1e8779d8060530820d80c62d16d9d8060630820d80462d11f3a01c1461040f06584452913e904041b4200c1972016455476c55326825481bccb3ba5d13938b80da9027997774aabd3a25b902a907779a7743a2dc2bc9deb26c4a240a745d721556e402c8ad169d15548956b108b12ebb4e832a4ca158845b13a01c106108b2e412c4aa2f3be2816522509c4a2a43a2d8a8154490cb128994e8b1ca44a00b1284ea7450652c5422c4aaed3a2384895e4108be2755a9414522519c4a2141a2d82bcaa2e80bc8537654a9d7b281e522505640fa5540e0816060182f5e96694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f1f74f241671f74f141571f74f341771ff4f041cf7f0c082eae51b14c81c245269c7273278437622784d7e9e71afd5ca59f2bf473997e2ed1cf45faf9957e7ea19f9fe9e727faf9917e2ed0cf0ff4f33dfd7c473fe7e9e75bfaf9867ebea69f73f4f315fd9ca59f2fe9e70cfd7c413fa7e9e773fa39453f27e9e744ec041fc9c84b065ed2f3928e97b4bca4e125352fa978b98f9794bca4e0259e97e4bcc4f1928c97a4bc24e1259697c4bcc4f012f0e278b1bc185e22bc24a2a3f8837e6ed3cfeff4738b7e6ed2cf6f2c16e7a5182f457929c24b615e0af152909702bce4e7251f2f4ff0929797c779c9c3cb63bce4e6e5515e72f1f2082f39797998971cbc3cc44b765e1ee4251b2f0ff0929597fb79c9c24b665e32f1528f97babcd4e1a5362fb578a9c94b0d5eaaf3f2222fd578a9ca4b155e5ee0a5322fcff3528997e778a9c8cbb3bc54e0e5195ecaf3528e97b2bc94e1a5342fa578799a97a77879929792bc94e0a5272f3d78e9ce4b375ebaf2d28597cebc74e2e5355e3af2d28197f6bcbcca4b3b5e5ee1a52d2f6d7869cd4b2b5e5af2d28297e6bc34e3a5292f4d7869cccbcbbc34e2e5255e1af2d28097fabc4ce7651a2f537999c2cb645e26f132919709bc8ce7651c2f637919c3cb685e46f132929711bc0ce765182f6ff032949721bc0ce665102f037919c04b7f5efaf1d29797d779e9c34b6f5e7af1b28197f5bcace3652d2f6b7859cdcb2a5e56f2f23e2f2b78798f977779798797e5bcbccdcb5bbc2ce365292f4b7859cccb225e16f2b28097f9bccce3652e2f737899cdcb9bbccce265262f337839cecb315e8ef2728497c3bc1ce2e5202f0778f98c97fdbcece3652f2f9e9790973dbcece6e5535e76f1b293971dbc7cc2cb765e3ee6651b2f1ff1b295970f79d9c2cb07bc6ce665132f1b79b9c1cb755eaef17295972bbc5ce6e5122f1779f995975f78f999979f78f991970bbcfcc0cbf7bc7cc7cb795ebee5e51b5ebee6e51c2f5ff17296972f7939c3cb17bc9ce6e5735e4ef17292174e3ec3c96738f90c279fe1e4339c7c8693cf70f2194e3ec3c96738f90c279fe1e4339c7c8693cf70f2194e3ec3c96738f90c279fe1e4339c7c8693cf70f2194e3ec3c96712f161fcc1cb6d5e7ee7e5162f3779e1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf70fe19ce3fc3f96738ff0ce79fe1fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf72fe59ce3fcbf96739ff2ce79fe5fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02ce3fc7f9e738ff1ce79fe3fc739c7f8ef32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebfa07e6cb4fbdecb07bd7dd0c707affba0af0ffaf9a0bf0f06f860a00f06f960b00f86f860a80fdef0c1301f0cf7c1081f8cf4c1281f8cf6c1181f8cf5c1381f8cf701559ce883493e98ec83293e98ea83693e98fe0f5aefef3ed3ac79e726355a34eb480df857f24fa6a39840fb8af617ed33da6fe41bf9473e929fe42bf94b3e93dfe43bf94f9f037d1ef4b9d0e7439f137d5ef4b9d1e7479f237d9ef4b9d2e74b9f337ddef4b9d3e74ffba0169fe804da1ab44568abd096a1e8270bc80ab284ac218bc82ab28cac230bc94ab294ac258bc96ab29caca78f803e0afa48e8a3a18f883e2afac8e8a3a38f903ecaaef4af283d21a40b4948d791902e23215d4542ba8884740d09e91212d21524a40b4848d78f902e1f215d3d42ba788474ed08e9d211d29523a40b4748d78d902e1b215d3542ba688474cd08e99211d21523a40b065d2ee86241970aba50d065822e12215d1e42ba3a84747108e9da10d2a521a42b4348178690ae0b215d1642ba2a84745108e99a10d22521a42b4248178490ae07215d0e42ba1a84743108e95a10d2a520a42b4148178290ae03215d0642ba0a84741108e91a10d22520a42b4048178090a23f3c1af5977612ef2abe74057c110bf87216f0852de04b5cc017bb802f7b015f0003be14067c510cf8f218f08532e04b66c017cf802fa3015f5003beb4067c910df8721bf08537e04b70c017e3802fcb015fa003be54077cd10ef8f21df0853ce04b7ac017f7607aac0f66fcd77921e47d73c10cc84875e65f2f326049d94e6ddab56bd36af2781a6eb569dfaa5d0bcc942f7a747f75ce173da6573bb6a349deac7193062cabd4f5d58ecfb5acd2a1cb844476c0a2721dda77ee3221f2d7df239b7fc03b65dbb46fd2a96785362dda35afda7152a205e5db748b245a58a34b878e13c78d03fc0bfef31e1a3f11622f7982f9a0de046ca30439bf37e16f51d6635842fdde1584fed6cdbef75bf75fcc2547305b688ec2df393abb3988dfb8ff7f6b4f54b7b5b107941f70408bca74ead4a4e7a94429318774df5f3f24cc81a4d27220a9b51c481a2d079256cb81a4d37220e9b51c48062d079251cb8164d2722099b51c48162d0772bf9603c9aae5401ed07220d9107f05fcc7ad09751ae6fa609e0fe6fb60810f16fa60910f16fb60890f96fa60990fdef2c1db3e58ee83777cf0ae0fdef3c10a1fbcef83953e58e583d53e58e383b53e58e783f53ed8e0838d3ed8e483cd3ef8c0075b7cf0a10fb6fae0231f6cf3c1c73ed8ee834f7cb0c3073b7db0cb079ffa60b70ff6f820f481f7c15e1fec1b3763c082173a749b60cd9fff6d227ffe7724d17ffc7992e82fff79923fdf80b72b74e8d4a24dabf6dc7e9cb8aa19add53ab5e9d6a44b0bee497669d3a1fdf801cb2ab668d2316ad304976fe28077aab768d5a67397169d9e6bdfbc458fc81dffdbfce7ffbb4df9e73107eeff1c7b306021ffa1353ef6cfff9d28f27ffe0e1a0f6915cd01fc35f59fa0f0a52f76edd0a54d8bf65d26a3fea69e8ff8d5f9eb7fbd14f0c1673ed8bf557cb6e4fe88287f16fe8efbe6e5fffd08e7437c063c319c3dc27ec700bf9d16a8d94e077d7040de4e07e4ed743061b6d30288cf0720dbe9a0f6edb444cd763aec8343f2763a246fa7c309b39d96407c3e04d94e87b56fa7a56ab6d3511f1c91b7d311793b1d4d98edb414e2f311c8763aaa7d3b2d53b39d8efbe098bc9d8ec9dbe978c26ca765109f8f41b6d371eddb699f9aed74d20727e4ed7442de4e2713663bed83f87c02b29d4e6afc46744188cd7321554e21475a704ae214745efbf9bd79ed1df69227980feab44a4a82ceef349c929880693941aa7ca1725b9da6038334e6523ea1f28116a00fef0ce4b1184fa8c6dcce4003fccb7b017e87bde409e6833aab32c0e9fcce2ac5dcd08641a2293f2498e641aa7ca5facef22b68309dbb174c77d84b9e603ea8af5506139ddfd77feb3bcb6f546eabafe9c0307796f9ffce7796df42ee2cf3abbeb3fc161ae0e7ef05f81df69227980fea3b95014ee7f79dd23bcbef54ffde9d80fede7d7feff7ee0e7bc913cc07f583cadf3b3abf1ffed6374e17546eab1fe8c030374e05ffce374e3f426e9c0aaa0ef01fa101fed3bd00bfc35ef204f341fdac32c0e9fc7e567ae3f4b3eadfbb43d0dfbb5feefddedd612f7982f9a07e55f97b47e7f7ebdffac6e9a2ca6df52b1d18e6c6a9f0dff9c6e912e4c6a9b0ea00bf040df0cbf702fc0e7bc913cc0775456580d3f95d517ae37445f5efdd11e8efddd57bbf7777d84b9e603ea86b2a7fefe8fcaefdad6f9caeabdc56d7e8c030374e45ffce374e3720374e455507f80d6880ff762fc0efb0973cc17c50375506389ddf4da5374e3755ffde1d83fededdbaf77b7787bde409e683fa5de5ef1d9ddfef7feb1ba7db2ab7d5ef7460981ba7e27fe71ba73f20374ec55507f81fc8008f49742fc0efb0973c817c50311195014ee717d179e30431ecfffd6aebd26a2d9ab7e8d4b945fb891327f8605e789b1f47135d0f84b7134df031c6c758f19f3b95e831fa7f2f8cfe338ba2ebe2e87a28ba1e89aec7a2eb5bd1f5ede8ba3cbabe135ddf8daeef45d715d1f5fde8ba32baae8aaeaba3eb9ae8ba36baae8baeeba3eb86e8ba31ba6e8aae9ba3eb07d1754b74fd30ba6e8dae1f45d76dd1f5e3e8ba3dba7e125d7744d79dd1755774fd34baee8eae7ba26b185d7d74ddfba753cec7047775782eff133126baba3fffb9181f9358ed153f261690430915f785a0619fe45ed8ff1773c9114c72255518f5747649353f9b18b0b5b1075440dfb3891fd4f274c4ec5a0ee4212d079243cb813cace540726a399047b41c482e2d07f2a89603c9ade5401ed3722079b41cc8e35a0e24af96037942cb81e4c33d9b78a68f49e663e27c4c721f13ef6352f898943ee63e1f93cac7a4f631697c4cdaff8d47056f68d1feb5ae2dbab6a8d6b569bb36cdfee361c12cfdd707062753fcc060fe23e0af7ed009fa94b298e45a9e521693dec7a4139f5216934e7c4a594cfa04794a594c7288cfe926403c52fed0bb987835db29a38fc9206fa70cf276ca9830db291ee27306c876caa87d3ba552b39d32fb984cf276ca246fa7cc09b39d52417cce04d94e99b56fa7d46ab6d3fd3e268bbc9db2c8dbe9fe84d94ea9213e67816ca7fbb56fa7346ab6d3033e26abbc9db2cadbe98184d94e69203e67856ca70734420e852036278354c9a6f9395c31d9a053af07ef4dbdeeb0973cc17c50d935220e7c7ed975326a314921551e52b9adb2d3816118b5922a1935d0879703c2a895d4cca8c5e48006f8c3f702fc0e7bc913cc0795536580d3f9e554caa8e5d4f884d70290608a83547944f59de523d060ca752f98eeb0973cc17c508faa0c263abf47ffd67796b9556eab47e9c03077964ffd9def2c1f83dc593ea5facef2316880e7b917e077d84b9e603ea8c75506389ddfe34aef2c1f57fd7b9709fa7b97f7deefdd1df69227980fea0995bf77747e4ffcad6f9cf2a9dc564fd081616e9c4afd9d6f9cf2436e9c4aa90ef0fcd0002f702fc0efb0973cc17c50055506381f98d21b27d54f568ec902fdbd2b74eff7ee0e7bc913cc075558e5ef1d9d5fe1bff58d531195dbaa301d18e6c6a9ccdff9c6a928e4c6a98cea002f0a0df062f702fc3f17247bc913cc07555c6580d3f915577ae3a4fa39373159a1bf7725eefddedd612f7982f9a04aaafcbda3f32bf9b7be717a52e5b62a490786b9712af777be717a0a72e3544e75803f050df0a7ef05f81df69227980faa94ca00a7f32ba5f4c6a954c23fa82c262efa00ad74d135c39f8fd12aed63cafcbfa7f3d7c3a86c42b8fcd70fab9ccec32aaff3b09ed1795815741ed6b33a0faba2cec37a4ee76155d27958cfeb3cacca3a0feb059d875545e76155d57958d5741ed68b3a0fabbacec3aaa1f3b06aea3cac5a3a0fabb6cec3aaa3f3b0eaea3cac7a3a0fabbecec36aa0f3b01aea3cac97741e56239d87f5b2cec36aacf3b09ae83caca63a0fab99cec36aaef3b05ae83cac963a0fab95cec36aadf3b0dae83cacb63a0feb159d87d54ee761bd0a382cf9e53405693494223a274a195def8bae99a26b96e89a35baa68dae65a36bb9e85a3eba3e135d2b44d767a36bc5e8fa5c74ad145d9f8fae95a3eb0bd1b54a74ad1a5dab45d717a36bf5e85a23bad68caeb5a26bede85a27bad68daef5a26bfde8da20ba368cae2f45d746d1f5e5e8da38ba3689ae4da36bb3e8da3cbab688ae2da36babe8da3abab689ae6da3eb2bd1b55d747df5cf695a7b1fd3e1ae53b864d17fa274746dffe73fd7d1c7bca6970ae9a472561de3636231bf4e9dc1bfe5daceafcbdf1959ea0ade9ca088eea6f3cad15de761f5d079583d751e562f9d87d55be761f5d17958afeb3cacbe3a0fab9fcec3eaaff3b006e83cac813a0f6b90cec31aacf3b08624f8df9e29e90fa26ed1bf8eba47d71ed1b56774ed155d7b47d73ed1f5f5e8da37baf68baefda3eb80e83a30ba0e8aae83a3eb903fffe21aea63de48087b86e9fcd486eb3cac113a0f6ba4cec31aa5f3b046eb3cac313a0f6baccec31aa7f3b0c6eb3cac093a0f6ba2cec39aa4f3b026eb3cac293a0f6baacec39aa6b2779b949aae986f2c3ea3f2fc3a51d31c737e1512e21b997f7d5b4d877c97f2194815a55f7799a1f3b066ea3cac592a7f8f69eed815737e6feab47db6cec39aa3f3b0e6ea3cac793a0f6b7e428c55ffeaef7404726a0b349e9a819cda428da76621a7b648e3a939c8a92dd6786a01e4d496683cb518c8a92dd5786ad4a3879cdc329d27371c72726fe93cb91190937b5be7c98d849cdc729d27370a7272efe83cb9d190937b57e7c98d819cdc7b3a4f6e2ce4e456e83cb97190937b5fe7c961fe865ba9f3e43080ed2a9d2787e9d0aed67972932027b746e7c94d869cdc5a9d2737057272eb749edc54c8c9add77972d32027b741e7c94d879cdc469d27370372729b749edc4cc8c96dd67972b32027f781ce937b1372725b749edc6cc8c97da8f3e4e6404e6eabce939b0b39b98f749edc3cc8c96dd37972f32127f7b1c6934b0c39b5ed1a4f2d16726a9f683cb5249053dba1f1d4305f2bdea9f1d492414e6d97c6538b839cdaa71a4f2d39e4d4766b3cb578c8a9edd1786a2920a7166a3cb5949053f37ffdd44e25ea1931d60531896393244d16973c3e45cafb52a54e93365dfa0c193365ce727fd607b23d98fda11c0fe77c24d7a3b91fcbf378de27f2e52f50b050e122458b152f51f2c9a79e2e55ba4cd972e59fa9f06cc5e72a3d5ff9852a55abbd58bd46cd5ab5ebd4ad57bf41c3971abddcb849d366cd5bb46cd5ba4ddb57dabddabe43c7d73a75eed2b55bf71e3d4f257accc72cf0310b7dcc221fb3d8c72cf1314b69aa4fb36f9a10d31c95a68d3493a3c915cd77680a42b302eaa853df99bab3d4c3a44e1ff5c3a86b44bd15ea40d0dfe9f4d72cfdcd477f19d1df0f74974df7a274c7467736740740574abaa250f25242d16f32ed78da19e4e0ff07", + "bytecode": "edbd07945555b6f5cfdd7b9fa280a240721211111111c951258a8808484e22398980e4241924e70c92a3a22239898808086703929388888a8a898c20fed7ba7eefffbdc7d76fd1ddce7a6f0d073d46ed1e3d66bb3c67de5df39c5aeb77cf99e453563c95acff801565db3569f64ad90e3d2a746ddfac5c9376ed062caa5ea6cab3cf8c9fe022821848628c24168915c4a292584c128b4b6209492c29894f4ae25392f8b4249692c4d292584612cb4a6239492c2f89cf486205497c56122b4ae273925849129f97c4ca92f882245691c4aa92584d125f94c4ea925843126b4a622d49ac2d897524b1ae24d693c4fa92d840121b4ae24b92d848125f96c4c692d844129b4a6233496c2e892d24b1a524b692c4d692d84612db4ae22b92d84e125f95c4f692d841123b4ae26b92d849123b4b621749ec2a89bd24b1b724f691c4d725b1af24f693c4b0bfa80e10d581a23a4854078bea10511d2aaa6f88ea30511d2eaa234475a4a88e12d5d1a23a4654c78aea38511d2faa134475a2a84e12d5c9a23a4554a78aea34519d1e3be0ad329dda7469fd6a8b2e6d9a4d1c3771c2f1d205f3152958a845d1022df217ccdf245f81e24d8b15ce57a870d322c5f217cb5fb858e1e6058a152cd8a258a162458b372d5e345ff1fc850ab6c8dfb270f1822df345ff933f9c46450ab42c52e82f1599fee791fc9522f97cccbee3a5f3fdc5fffc4383f8b0f2ffdbe736e53f8a34ff0b064d8518b43f010de2c3caf76f9ddba4ff5c24dfbf69d06488419f25b0417c58c5fee5739b704791e22dff0d8326420c3af03f60101d56a196ffd2b98dfb47458afe8b068d871874f07fc6a0e86115fea7cf6dcc7f57a4d0bf60d058884187fe070de2c3caf74f9ddb28a948be7fd2a0d110830eff0f1bc487d5ecaee736e26e458afe13068d841874e47fc1203eac02e2b90dfb678a14bd8b41c321061dfd5f32880fabe87f7b6e43ffd922450583de801874ec7fd1203eac62fff0dc06ff2b458afd37060d811874fc7fd9203eac7cffcfb90dfc178b1469f90f0c1a0431e8840283f8b0f2fd9773ebffef14297087410320069d5462101f5681ff38b7beff6e8d42ffd79f7e107b4e29b2a7608b962df9c8f2f7f94b35feb4e775883d9f27843d7fb1607efad420553e8758745aa7452720554e422cfa42a745c720558e432c3aa3d3a223902a4721167da9d3a243902a8721169dd569d101489583108bbed269d17e4895cf20169dd3764f447745f97b430cda0731e86b9d7be81ca4cad7108bbed169d1594895af20167dabd3a233902a5f422c3aafd3a2d3902a5f402cfa4ea745e72155be8358f4bd4e8bbe8154f91662d10f1a2dea0638b55e10932fe8dc41df43aafc00d941088b96956fd3a945b32e6dbab518b0ac6687ca2daa3769dea6c7c489e3c62336d35f3fbe5389b2f5eadde7f5befdc2fee180706038281c1c0e0987866f84c3c2e1e1887064382a1c1d8e09c786e3c2f1e184706238299c1c4e09a786d3c2e93e924842826688c0d04c519d25aa6f8aea6c519d23aa7345759ea8ce17d505a2ba50541789ea62515d22aa4b457599a8be25aa6f8bea72517d4754df15d5f7447585a8be2faa2b457595a8ae16d535a2ba5654d789ea7a51dd9010d0de7a04b4b70111e08993a984f6d622a0bd751083e254427bab11d0de1a8841c955427b2b11d0de2a8841f12aa1bd150868ef7d88412954427bef22a0bdf72006a55409ed2d47407bef400cba4f25b4f71602da7b1b62502a95d0de5204b4b70c62506a95d0de6204b4b70462501a95d0de4204b4b70862505a95d0de7c04b4b70062503a95d0de5c04b4370f62507a8dd05e381b40ed8573200665d088ed85b300dc5ef826c4a08c2a3bd6893340aa6484589449a745e92055d2432ccaacd3a234902a69211665d169512a4895d4108beed769514a4895fb201665d569513ca44a0a88450fe8b4280e522539c4a26c1ac1bd7026c4a16410871ed4b989b241aa3c08b128bb4e8bb242aa3c00b1e8219d16658154b91f62510e9d16658254c90cb1e8619d16e58054791862514e9d16658754790862d1231a2dea0e38b57006c4e55c3ab7504e489547205b28977274af3b04dd0b678433c359e19be1ec704e38379c17ce0f17840bc345e1e27049b8345c16be15be1d2e0fdf09df0ddf0b5784ef872bc355e1ea704db8365c17ae0f37dc05e0db28c2439b4475b3a87e20aa5b44f54351dd2aaa1f89ea3651fd5854b78bea27a2ba4354778aea2e51fd5454778bea1e510d45d58bea5e51dd27aafb45f533513d20aa0745f590a81e16d523a27a54548f89eaf18400f88e21003ec85788133fab12e03b8200f8205f204e5c5125c0770801f041be3e9cf8399500df0104c007f9f270e24a2a01befd08800ff2d5e1c4cfab04f8f622003ec8578713575609f0850880cf430c7a4125c0b71b01f0ed8118544525c0b70b01f07d0a31a8aa4a806f0702e0db0931a89a4a806f3b02e0fb0462d08b2a01be6d0880ef638841d555027c5b1100df4710836aa804f8b62000be0f2106d55409f06d46007c1f400caaa5b36f5d1352a516c4a2da3a2daa0ea9520362511d9d16558354791162515d9d16558154a90ab1a89e4e8b2a43aabc00b1a8be4e8b2a41aa3c0fb1a8814e8b2a42aa3c07b1a8a14a806f13c4a167210ebda4731335845479096251239d16d587546900b1e8659d16d58554a907b1a8b14e8b6a43aad48158d444a7458d21559a402c6aaad3a246902a2f432c6aa6d1a21e08806f23c4e5e63ab75053489566902dd45c39c0d70303f06d0c37859bc30fc22de187e1d6f0a3705bf871b83dfc24dc11ee0c77859f86bbc33d6118fa706fb82fdc1f7e161e080f8687c2c3e191f068782c3c7e1780ef84080f9d14d553a2fab9a89e16d52f44f58ca87e29aa6745f52b513d27aa5f8bea37a2faada89e17d5ef44f57b51fd41542f88ea8fa2fa93a8fe2caabf88eaafa27a51542f89ea6551bd22aa5745f59aa85e17d51b0901f05d47007c3720313e4825c0771501f05d8318345825c0771901f05d8118344425c0771101f05d8218345425c0f70b02e0fb1562d01b2a01be9f1000dfcf108386a904f82e2000be1f21060d5709f07d8f00f8204f4a4f3c4225c0771e01f041ded79078a44a80ef1b04c007795b43e2512a01be7308800ff2f6a1c4a355027c6711001fe4dd4389c7a804f8ce20003ec89b87128f5509f09d46007c90f70e251ea712e03b8500f820ef854d3c5e67df7a1ca4ca78884513745a340652652cc4a2893a2d1a05a9321a62d1249d168d80541909b168b24e8b8641aa0c87583445a745432155de80583455a74583215586402c9aa612e03b09716810c4a1e93a37d1344895e9108b66e8b4680aa4ca54884533755a3409526532c4a2593a2d9a00a9321162d19b3a2d9a05a982798efc6c9d16619e0d371362d11c8d16211e4b1d9e80b83c57e7169a0da982799dc55ce500df7d1880ef4478323c157e1e9e0ebf08cf845f8667c3afc273e1d7e137e1b7e1f9f0bbf0fbf087f042f863f853f873f84bf86b7831bc145e0eaf8457c36be1f5f0c65d00bedf4478e8a6a8de12d5df45f5b6a8fe21a97446b21c916523cb56969d2c07b21c23cb896539569693c87252594e26cb71b29c5c96e36539852ca794e5fb6439952ca796e534b29c5696d3c9727a59ce20cb191300eda37f2980eda3638344fc871ae13efa5401741f7df8108bb66ac4fbe8d706c0f7d16f17c4a28f34027e944b00c28fe20b62d1368d881f053f80f1a3eb03c4a28f35427e746505507e74018658b45d23e647b72e00ce8fee7020167da211f4a37b4300e947b790108b766844fde8e61bc0fad13d3ac4a29d1a613ffaeb0640fbd11f41108b7669c4fde8cf4700ef477f65422cfa5423f0477f9f03883ffa331e62d16e8dc81f354000cc1ff5492016ed5109fddd46407f7f400c0a55427fb710d0dfef1083bcce5e7708a98279c0f35e9d16ed8654c13ce2799f4e8b7641aa601ef2bc5fa7453b2055308f79fe4ca745db2155300f7a3ea0d3a26d902a98473d1fd469d1564815ccc39e0fa984fe6e421cc23cedf9b0ce4d74085205f3ee9d233a2d3a00a98279fbce519d16ed8754c1bc7fe7984e8bf642aa60dec0735ca745c72055306f923ba1d3a223902a9877c99dd468512a04f4f71bc4e5533ab71086683c09d942a794437fa930d0df6fe1cdf056f87b783bfc83babdd4aaa5b638f5b4697e40cd7f1ab4d094842652344ea2d11dcddd68c649034a1a06d32497a6e634f2f691543e92da47d2f8485a1f49e723e97d24838f649471401fc92423479965398b2cdf2fcb5965f90159ce26cb0fca7276597e489673c8f2c3b29c53961f91e55cb2fca82ce796e5c764398f2c3f2ecb7965f90959ce27cbf965b9802c1794e542b25c58968bc87251592e26cbc513040a2c0681028b432e013775428145205060518845b774428185205060618845bfeb84020b40a0c082108b6eeb8402f341a0c0fc108bfed00905e68540814f202c8a4da4130acc0381021f875814d10905e68640818f412c323aa1c05c1028f0518845562714981302053e02b1c8e984027340a0c0872116053aa1c0ec1028f0218845313aa1c06c1028f041884589354281d461025081d488825814ab110ba4161e800ba44e1fc4a2242afbe1b1b1902a906f02c426d569510ca40ae49b00b1c9745ae4205520df04888dd369918154817c132036b94e8b1241aa40be09101baf737c791b5205f25d80d8143a2dba05a902f936406c4a8d60204d3e2116dd8458749fce2c4a09a902f9b6766c2a9d16c543aa40bead1d9b5aa74571902a906f6bc7a6d16951524815c8b7b563d3eab4280da40ae4f923b1e9745a940a5205f2fc91d8f41a2d829c5a2413c4e60c3af7503a4815c89390201625241a981a8206d286a29b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbf7da4808f14f491423e52d8478af848511f29e623c5ef06089690f1a392b2fca42c3f25cb4fcb7229592e2dcb6564b9ac2c9793e5f2b2fc8c2c5790e56765b9a22c3f27cb9564f97959ae2ccb2fc8721559ae2acbd564f94559ae2ecb3564b9a62cd792e5dab25c4796ebca72bd040104eb4200c17a900b41519d80606d082058076251319d80604d0820580b6251719d806075082058036251099d8060350820f822c4a2923a01c12a1040b02ac4a227750282952180e00b108b9ed2090856820082cf432c7a5a2720581102083e07b1a8944e40b00204107c166251699d8060790820f80cc4a2323a01c1b21040b01cc4a2b23a01c1d21040b00cc4a2723a01c1a7218060298845e57502824f4200c1a720163da3b32b5e1e520513d715745a5416520513d7cfeab4a834a40a26ae2beab4e86948154c5c3fa7d3a227215530715d49a7452520554a422c7a5ea745c5205520dfff8fadac13102c09b108f2fdffd81774eea2ca902a98965a159d16558254c1b4d4aaeab4a822a40aa6a5564da745152055302db517755a540d52053324aaaed3a22a902a9821510d8d16a581008298dbcf9a3af750754815ccb8baa67240300d08102c4137a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7ffb48751fa9e123357da4968fd4f6913a3e52d747eadd0d10ac2fe3470d64b9a12cbf24cb8d64f965596e2ccb4d64b9a92c3793e5e6b2dc42965bca722b596e2dcb6d64b9ad2cbf22cbed64f955596e2fcb1d64b9a32cbf26cb9d64b9b32c7791e5aeb2dc4d96bbcb720f59ee992080600f0820d8137221e8ac1310ec060104bb432ceaa21310ec020104bb422ceaaa1310ec0401043b432ceaa61310ec0801045f8358d45d2720d81e0208768058d4432720d80e0208be0ab1a8a74e40b02d04107c0562512f9d80606b0820d80662516f9d80604b0820d80a62511f9d8060730820d80262d1eb3a01c1a61040b019c4a2be3a01c1c61040b009c4a27e3a01c1461040f0658845fd7502820d2180e04b108b06e8ec8af787541900b168a04e8bfa42aaf483583448a7457d20555e87583458a745bd20557a432c1aa2d3a21e902a98c6ec509d16758354c13466dfd069511748154c6376984e40b001c4224c6376b8ce5d340c526538c4a2113a2d1a0aa9f206c4a2913a2d1a0ca9320462d1289d160d84541904b168b44e8b4641aa8c86583446a74523205546422c1aabd122c8f32323f521368fd3b987c640aa8c85eca171ca01c1b42040b03edd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced239d7ca4b38f74f191ae3ed2cd47bafb480f1fe9793740b0978c1ff596e53eb2fcba2cf795e57eb2dc5f9607c8f240591e24cb836579882c0f95e5376479982c0f97e511b23c529647c9f268591e23cb6365799c2c8f97e509b23c519627c9f264599e22cb5365799a2c4f4f1040701a04109c0eb910bca713109c020104a7422c5aa113109c04010427432c7a5f2720380102084e8458b4522720380e02088e8758b44a27203806020862eedb57eb0404474100414c07618d4e4070040410c47410d6ea0404874100414c4f7c9d4e4070280410c4f4c4d7eb0404074300414c4f7c834e4070200410c4f4c437ea0404fb4300410cb7b4492720d817020862b8a5cd3a01c13e104010c32d7da0b32bbe1952e50388455b745ab411526513c4a20f755ab41e526503c4a2ad3a2d5a0ba9b20e62d1473a2d5a0da9b20662d1369d16ad84545905b1e8639d16ad8054791f62d1769d80606f8845ef412cfa44e72eda0ea9f209c4a21d3a2dda06a9f231c4a29d3a2dda0aa9f211c4a25d3a2dda02a9f221c4a24f755ab40b52e5538845bb755ab403526527c4a23d1a2d4a07010431df720a75eea1dd902a7b207b28540e08a6030182bde86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f1f61ccc94726f9c8641f99e223537d649a8f4cbf1b203843c68f66caf22c597e539667cbf21c599e2bcbf36479be2c2f90e585b2bc489617cbf212595e2acbcb64f92d597e5b9697cbf23bb2fcae2cbf27cb2b64f97d595e29cbab6479b52caf91e5b5b2bc4e96d7cbf286040104d74300414c37f3079d80e05a082088e9665ed00908ae860082986ee68f3a01c195104010d3cdfc492720b802020862ba993feb0404df850082986ee62f3a01c1e51040f01d8845bfea0404df8200826f432cbaa813105c0a010497412cbaa413105c0c010497402cbaac13105c08010417412cbaa213109c0f010417402cbaaa13109c0b0104e7412cbaa613109c0d0104e7402cbaae13109c050104df845874436757fc3aa4ca0d8845bfe9b4e82aa4ca35884537755a741952e50ac4a25b3a2dba08a9720962d1ef3a2dfa0552e5578845b7755af413a4cacf108bfed069d10548951f11162549a413109c09b1e80788451195bb284922489508c422a3f317ed36a4ca1f108bac4e8b6e41aafc0eb1c8e9b4e83748959b108b029d59e42055028845313a2d32902a166251628d16a5870082332036c7eadc4331902a89217b28563920981e0408cea09b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbf7d64a58facf291d53eb2c647d6fac83a1f59ef231bee06086e94f1a34db2bc59963f90e52db2fca12c6f95e58f64799b2c7f2ccbdb65f91359de21cb3b6579972c7f2acbbb65798f2c87b2ec6579af2cef93e5fdb2fc992c1f90e583b27c48960fcbf211593e2acbc764f978820082c72080e071c885e0119d80e0110820781462512e9d80e0210820781862d1a33a01c1031040f020c4a2dc3a01c1fd1040f03388458fe90404f74200c17d108bf2e80404430820e821163dae1310dc0d0104215f0f4b92572720b80b020842bea89ae4099d80e00e082008f9a26a927c3a01c1ed104010f2e88524f9750282db208020e4d10b490ae80404b7420041c8a3179214d409086e81008290472f2429a41310dc0c0104218fc74b52586757bc10a44a61884545745a540052a520c4a2a23a2dca07a9921f6251319d16e5855479026251719d16e58154791c6251099d16e58654790c6251499d16e58254791462d1933a01c14d108b1e8158f494ce5df424a4ca53108b9ed6695109489592108b4ae9b4a818a44a718845a5755a540452a528c4a2323a2d2a0da952066251599d163d0da9520a6251398d16658000829087e92729af730f9585542907d943e5950382194080e046ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8db470ef8c8411f39e423877de4888f1cf591633e72fc6e80e009193f3a29cba764f973593e2dcb5fc8f21959fe5296cfcaf257b27c4e96bf96e56f64f95b593e2fcbdfc9f2f7b2fc832c5f90e51f65f92759fe59967f91e55f65f9a22c5f92e5cbb27c4596afcaf23559be2ecb37120410bc0e0104215f9a4fd24c27207815020842be349fa4b94e40f0320410847c693e490b9d80e045082008f9d27c92963a01c15f208020e44bf3495ae904047f820082902fcd2769ad1310bc000104315f9a6fa31310fc1e020862be34df562720781e02087e07b1e8159d80e0371040f05b8845ed740282e72080e0d7108b5ed509089e8500825f412c6aaf13103c030104bf8458d4412720781a02087e01b1a8a34e40f0140410fc1c62d16b3abbe21d21555e8358d449a745ed21553a402ceaacd3a276902aaf422ceaa2d3a2b6902aaf402ceaaad3a2d6902a6d201675d369514b489556108bbaebb4a839a44a0b88453d740282272116358358d453e72eea01a9d21362512f9d16758354e90eb1a8b74e8bba40aa748558d447a7459d20553a432c7a5da7457d20555e8758d457a7459077df26e90db1a89f468b324200c113109bfbebdc437d2155fa41f6507fe5806046102078826e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef6918b3e72c9472efbc8151fb9ea23d77ce4ba8fdcb81b20f89b8c1fdd94e55bb2fcbb2cdf96e53f44d92492e5882c1b59b6b2ec643990e518594e2ccbb1b29c449693ca7232598e93e5e4b21c2fcb296439a52cdf27cba96439b52ca791e5b4b29c4e96d3cb720659ce981080a0c98000040de48a9b648e4a40d0a443008206f258e32473550282260d021034692116cd5309089a540840d0a48658345f25206852220041731fc4a2052a0141138f00044d0a88450b550282260e01089ae4108b16a904044d5204206892412c5aac121034b10840d0248158b444252068621080a0c1bc8560a94a40d03804206830ef4359a61210340601081accfb50de5209089a440840d060def0f5b64e40f0360410c4bce16bb94e40f0160410c4bce1eb1d9d5df1e5902aef402c7a57a7456f41aabc0db1e83d9d162d85545906b168854e8b1643aa2c8158f4be4e8b1642aa2c8258b452a745f3215516402c5aa5d3a2b9902af32016add60908de8458340762d11a9dbb6835a4ca1a88456b755ab412526515c4a2753a2d5a01a9f23ec4a2f53a2d7a1752e53d88451b745ab41e526503c4a28d3a2d5a0ba9b20e62d1268d166582008290f78127d9ac730f611e8fb809b287362b0704338100c1dfe86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f6f527993da9b34dea4f5269d37e9bdc9e04dc6bb008226938c1f6596e52cb27cbf2c6795e50764399b2c3f28cbd965f92159ce21cb0fcb724e597e449673c9f2a3b29c5b961f93e53cb2fcb82ce795e52764399f2ce797e502b25c50960bc97261592e22cb4565b9982c174f1040b0180410c43cf7fba44e40b0080410c43cf7fb944e40b0100410c4bc9be9739d8060010820887937d3699d80603e0820887937d3173a01c1bc104010f36ea6333a01c13c104010f36ea62f750282b9218020e6dd4c67750282b9208020e6dd4c5fe9040473420041ccbb99cee90404734000c18721167dad1310cc0e01041f8258f48d4e40301b04107c1062d1b72a0141931501089a0720169d5709089a2c0840d0dc0fb1e83b9d5df1f3902a98c7067fafd3a26f2055308f0dfe41a745e72055308f0dbea0d3a2b3902a98c706ffa8d3a233902a98c706ffa4d3a2d3902a98c706ffacd3a253902a98c706ffa21210349921169d8458f4abce5df40ba40ae6d52e17755af413a40ae6d52e97745a74015205f36a97cb3a2dfa1e5205f36a972b3a2dba0ca9827959d9559d165d8454c1bcacec9a468b32234ecd6482d87c5de71eba0aa982796de275e58060660c206832d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde14f0a6a03785bc29ec4d116f8a7a53cc9be27703044bc8f85149597e52969f92e5a765b9942c9796e532b25c5696cbc97279597e46962bc8f2b3b25c51969f93e54ab2fcbc2c5796e51764b98a2c5795e56ab2fca22c5797e51ab25c53966bc9726d59ae23cb7565b95e820082752180603dc48520697a9d80606d082058076251069d80604d0820580b6251469d806075082058036251269d8060350820f822c4a2cc3a01c12a1040b02ac4a22c3a01c1ca1040f0058845f7eb04042b4100c1e7211665d5090856840082cf412c7a402720580102083e0bb1289b4e40b03c04107c0662d1833a01c1b21040b01cc4a2ec3a01c1d21040b00cc4a2877402824f4300c152108b72e804049f8400824f412c7a5865573c690e481508cf9d34a74e8bb243aa4078eea48fe8b4281ba40a84e74e9a4ba745592155203c77d247755a94055205c27327cdadd322c8843629645a9cf4319d1665805481bc2028691e9d8060498845901704257d5ce72eca03a902f9ce6dd2bc3a2dca0da902f9ce6dd227745a940b5205f29ddba4f9745a94135205f29ddba4f9755a940f5205f21489a405745a94175205f21489a405355a940502089680d85c48e71e2a00a902799e0dc4a2840404b38000c11274334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b737d5bda9e14d4d6f6a7953db9b3aded4f5a6dedd00c1fa327ed440961bcaf24bb2dc48965f96e5c6b2dc44969bca7233596e2ecb2d64b9a52cb792e5d6b2dc4696dbcaf22bb2dc4e965f95e5f6b2dc41963bcaf26bb2dc49963bcb721759ee2acbdd64b9bb2cf790e59e090208f68000823d2117821a3a01c16e1040b03bc4a29a3a01c12e1040b02bc4a25a3a01c14e1040b033c4a2da3a01c18e1040f035884575740282ed21806007884575750282ed2080e0ab108beae90404db4200c1572016d5d70908b68600826d201635d00908b6840082ad201635d40908368700822d2016bda413106c0a01049b412c6aa413106c0c01049b402c7a592720d8080208be0cb1a8b14e40b02104107c096251139d5df1c6902a985fb4a63a2d6a04a982f9456ba6d3a286902a985fb4e63a2daa0fa9d20062510b9d16d58554c17c73bba54e8b6a43aa60beb9dd4aa74535215530dfdc6ead13106c00b108f3cded363a77516b48154c33a4ad4e8b5a42aa609a21afe8b4a839a40aa619d24ea7454d215530cd9057755ad40e5205d3de6fafd3a2b6902a98f67e078d1641be3663307fc474d4b987da43aa60068d1d950382f78300c1fa74334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b7379dbce9ec4d176fba7ad3cd9beedef4f0a6e7dd00c15e327ed45b96fbc8f2ebb2dc5796fbc9727f591e20cb036579902c0f96e521b23c5496df90e561b23c5c9647c8f248591e25cba365798c2c8f95e571b23c5e9627c8f244599e24cb9365798a2c4f95e569b23c3d4100c1691040703ae44230562720380502084e8558344e2720380902084e8658345e2720380102084e845834412720380e02088e875834512720380602088e855834492720380a02088e865834592720380202088e845834452720380c02080e87583455272038140208be01b1689a4e40703004101c02b168ba4e40702004101c04b168864e40b03f04101c00b168a64e40b02f0410ec07b168964e40b00f04107c1d62d19b3abbe2b32055de8458345ba74533205566422c9aa3d3a269902a9896da5c9d164d8154c1b4d4e6e9b46812a40aa6a5365fa745132055302db5053a2d1a07a98269a92dd40908f686588469a92dd2b98b1642aa2c8258b458a745f3215516402c5aa2d3a2b9902af320162dd569d16c489539108b96e9b46829a4ca3288456fe9b46831a4ca1288456f6bb4282b0410ec05b179b9ce3df416a4cadb903db45c392098150408f6a29b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbd61ccc99b49de4cf6668a3753bd99e6cdf4bb01823364fc68a62ccf92e5376579b62ccf91e5b9b23c4f96e7cbf202595e28cb8b6479b12c2f91e5a5b2bc4c96df92e5b76579b92cbf23cbefcaf27bb2bc4296df97e595b2bc4a9657cbf21a595e2bcbeb6479bd2c6f481040703d0410dc00b910ecd10908ae850082eb2016853a01c1d51040700dc422af13105c09010457412cdaab13105c010104df8758b44f2720f82e04107c0f62d17e9d80e0720820f80ec4a2cf7402826f410041cc5f7f077402824b218020a60f75502720b818020862fa50877402820b21802066b272582720381f020862262b477402827321802066b272542720381b020862262bc7740282b3208020867e3baeb32b7e0c52e538c4a2133a2d3a02a9721462d1499d161d8254390cb1e8944e8b0e40aa1c8458f4b94e8bf643aa7c06b1e8b44e8bf642aaec8358f4854e8b4248150fb1e88c4e407026c4a23d108bbed4b98bce40aa7c09b1e8ac4e8b4e43aa7c01b1e82b9d169d8254f91c62d1399d169d80543909b1e86b9d169d8354f91a62d1373a2d3a0ba9f215c4a26f355af4000410c47c57eebcce3df40da4cab7903d745e3920f80008109c4137a3d4a7a3261b3534a91b499d5f6adb528b9cfadb344ba041000d5d686242d3291a2dd1188f667034efa461250d8669aa4b13741a7f7bb3d29b55deacf6668d376bbd59e7cd7a6f36dc0d10dc28e3479b6479b32c7f20cb5b64f94359de2acb1fc9f23659fe5896b7cbf227b2bc439677caf22e59fe549677cbf21e590e65d9cbf25e59de27cbfb65f933593e20cb0765f9902c1f96e523b27c54968fc9f2f10401048f410041484f3c59629d80e011082008e989278bd509081e820082909e78b2243a01c103104010d2134f96542720b81f0208427ae2c992e90404f7420041484f3c599c4e4030840082909e78b2e43a01c1dd104010d2134f16af1310dc0501043f855894422720b8030208ee845894522720b81d02087e02b1e83e9d80e0360820f831c4a2543a01c1ad1040f0238845a97502825b2080e087108bd2e80404374300c10f2016a555d9154f960652252dc4a2743a2d4a05a9921a62517a9d16a58454b90f6251069d16c543aaa480589451a74571902ac9211665d2695152489564108b32ebb42816522509c4a22c3a01c14d108b12432cba5fe72eca02a90279b163b2ac3a2dca04a9921962d1033a2dca00a992116251369d16a58354490fb1e8419d1665835479106251769d16658554815074c91ed26851360820b81162730e9d7b283ba4ca43903d94433920980d04086ea49b51ead351938d1a9ad48da4ce2fb56da9454efd6d9a25d02080862e3431a1e9148d96688c4733389a77d2b09206c334d5a5093a8dbfbd39e0cd416f0e7973d89b23de1cf5e69837c7ef06089e90f1a393b27c4a963f97e5d3b2fc852c9f91e52f65f9ac2c7f25cbe764f96b59fe4696bf95e5f3b2fc9d2c7f2fcb3fc8f20559fe51967f92e59f65f91759fe55962fcaf22559be2ccb5764f9aa2c5f93e5ebb27c234100c1eb1040f006e442504e2720781502085e8358545e2720781902085e8158f48c4e40f0220410bc04b1a8824e40f0170820f82bc4a2677502823f4100c19f211655d409085e8000823f422c7a4e2720f83d0410fc016251259d80e0790820f81dc4a2e7750282df400041c8970c9355d609089e83008290af3b277b4127207816020842beee9cac8a4e40f00c0410843cc02359559d80e069082008798047b26a3a01c153104010f2008f642feaec8a57835479116251759d16558154a90ab1a8864e8b2a43aabc00b1a8a64e8b2a41aa3c0fb1a8964e8b2a42aa3c07b1a8b64e8b2a40aa3c0bb1a88e4e8bca43aa3c03b1a8ae4e40f024c4a272108beae9dc45752155ea412caaafd3a2da902a75201635d069514d48955a108b1aeab4a83aa44a0d88452fe9b4a821a4ca4b108b1ae9b4a83ea44a0388452f6bb40882871ac8e33e9335d6b9871a41aabc0cd9438d9503820f8200c11374334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b73717bdb9e4cd656fae7873d59b6bde5cf7e6c6dd00c1df64fce8a62cdf92e5df65f9b62cff21ca36912c4764d9c8b2956527cb812cc7c87262598e95e524b29c549693c9729c2c2797e578594e21cb2965f93e594e25cba965398d2ca795e574b29c5e9633c872c68400046d06042068315febe9a71210b4e91080a0c57cada7bf4a40d0a641008216f3e885012a01419b0a01085acca31706aa04046d4a042068318f5e18a41210b4f10840d0621ebd3058252068e31080a0c53c7a61884a40d02645008216f3e885a12a01411b8b00042de6d10b6fa804046d0c0210b498472f0c5309085a8700046d00b168b84a40d01a0420682dc4a2112a01419b080108da08c4a2913a01c1db1040f00f8845a3740282b72080e0ef108b46ebec8a8f8254190db1688c4e8b4640aa8c84583456a745c3205586432c1aa7d3a2a1902a6f402c1aafd3a2c1902a4320164dd069d140489541108b26eab4a83fa4ca00884593740282372116f583583459e72e9a04a9321962d1149d164d80549908b168aa4e8bc641aa8c8758344da745632055c6422c9aaed3a269902ad32116cdd069d1144895a9108b666ab4283b0410fc0d62f32c9d7b08f2fee46433217b68967240303b0810fc8d6e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef63695b7a9bd4de36d5a6fd3799bdedb0cde66bc0b206833c9f8516659ce22cbf7cb7256597e4096b3c9f283b29c5d961f92e51cb2fcb02ce794e5476439972c3f2acbb965f93159ce23cb8fcb725e597e4296f3c9727e592e20cb0565b9902c1796e522b25c54968bc972f10401048b4100c1e2900bc1269d8060110820581462d1669d8060210820581862d1073a01c1021040b020c4a22d3a01c17c1040303fc4a20f750282792180e013108bb6ea0404f34000c1c721167da41310cc0d01041f8358b44d2720980b02083e0ab1e8639d80604e0820f808c4a2ed3a01c11c1040f06188459fe80404b3430041ccbb2c76e80404b3410041cc5b7576aa04046d56042068316fd5d9a51210b4591080a0c5bc27ee539d5df15d902a9f422cdaadd3a21d902a3b2116edd169d17648954f2016853a2dda06a9f231c422afd3a2ad902a1f412cdaabd3a22d902a1f422cdaa7d3a2cd902a1f402cdaaf1210b49921166d8258f499ce5db41f52e533884507745ab41752651fc4a2833a2d0a21553cc4a2433a2dda0da9b20762d1619d161d8254390cb1e8884e8b0e40aa1c84587454a345906ea1c5bc55fe98ce3d740452e528640f1d530e083e8401046d26ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbdb02de16f4b690b785bd2de26d516f8b795bfc6e806009193f2a29cb4fcaf253b2fcb42c9792e5d2b25c4696cbca7239592e2fcbcfc87205597e56962bcaf273b25c49969f97e5cab2fc822c5791e5aab25c4d965f94e5eab25c43966bca722d59ae2dcb7564b9ae2cd74b1040b02e0410c43c3dfe9a4e40b0360410c43c3dfeba4e40b0260410c43c3dfe864e40b03a0410c43c3dfe379d80603508208879c3d74d9d80601508208879c3d72d9d80606508208879c3d7ef3a01c14a104010f386afdb3a01c18a104010f386af3f74028215208020e40d5f7189740282e5218020e40d5f71119d80605908200879c3579cd1090896860082652016599d80e0d31040b014c422a713107c1202083e05b12850d9158f73902a9007bec6c5e8b4c840aa401ef81a9758a745892055200f7c8d8bd5397eba0da90279e06b5c129d16dd8254813cf0352ea94e8b308f70b909b128994e8bae43aadc805814a713102c09b1e81ac4a2e43aaf6871902a909772c4c5ebb42829a40ae4a51c7129745a140ba9027929475c4a9d16c540aa405eca11779f4e8b5242aa405e3315974aa745f1902a90d74cc5a5d668510e0820580262731a9d7b2815a40ae48577108b121210cc0102044bd0cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde56f7b686b735bdade56d6d6feb785bd7db7a770304ebcbf85103596e28cb2fc97223597e59961bcb7213596e2acbcd64b9b92cb790e596b2dc4a965bcb721b596e2bcbafc8723b597e5596dbcb720759ee28cbafc9722759ee2ccb5d64b9ab2c7793e5eeb2dc43967b260820d8030208f6845c080aea0404bb4100c1ee108b0ae90404bb4000c1ae108b0aeb04043b4100c1ce108b8ae804043b4200c1d7201615d50908b68700821d201615d30908b6830082af422c2aae13106c0b01045f815854422720d81a0208b6815854522720d8120208b68258f4a44e40b03904106c01b1e8299d8060530820d80c62d1d33a01c1c61040b009c4a2523a01c1461040f0658845a57502820d2180e04b108bcae8ec8a978654c190b865755af434a40a86c42da7d3a227215530246e799d1661666b2521163da3d3a262902a9057bbc455d06951114815c8ab5de29ed56951214815c8ab5de22aea04041b402c82bcda25ee399dbba822a40ae4db927195745a54015205f36dc9e7755a541e5205f36dc9ca3a2d2a0ba982f9b6e40b3a2daa0ca902f9fe7f5c159d16558254817cff3faeaa468b20af64b1f5213657d3b987aa40aa409e4402b1282101c1874180607dba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbdb4ede76f6b68bb75dbdede66d776f7b78dbf36e80602f193fea2dcb7d64f97559ee2bcbfd64b9bf2c0f90e581b23c489607cbf210591e2acb6fc8f230591e2ecb236479a42c8f92e5d1b23c4696c7caf238591e2fcb136479a22c4f92e5c9b23c4596a7caf234599e9e2080e0340820381d7221e8a013109c020104a7422ceaa813109c04010427432c7a4d2720380102084e8458d4492720380e02088e8758d4592720380602088e8558d4452720380a02088e8658d4552720380202088e8458d44d2720380c02080e8758d45d272038140208be01b1a8874e40703004101c02b1a8a74e40702004101c04b1a8974e40b03f04101c00b1a8b74e40b02f0410ec07b1a88f4e40b00f04107c1d62d1eb3abbe27d20553016f5d569512f4895de108bfae9b4a807a40ae63bb7fd755ad40d5205f39ddb013a2dea02a982f9ceed409d16758254c17ce776904e8b3a42aa60be733b582720d81b6211e63bb74374eea2c1902a983f6387eab46820a40ae6cfd837745ad41f5205f367ec309d16f58554c1fc193b5ca745c32055308dd9113a2d1a0aa98269cc8ed468514e082088f9537894ce3d3402520533221aa51c10cc0902047bd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde32e6e4ed246f277b3bc5dba9de4ef376fadd00c119327e34539667c9f29bb23c5b96e7c8f25c599e27cbf36579812c2f94e545b2bc589697c8f252595e26cb6fc9f2dbb2bc5c96df91e57765f93d595e21cbefcbf24a595e25cbab65798d2caf95e575b2bc5e9637240820b81e02086e805c08ded60908ae850082eb20162dd70908ae8600826b2016bda313105c09010457412c7a572720b8020208be0fb1e83d9d80e0bb1040f03d88452b740282cb2180e03b108bded70908be050104df8658b4522720b81402082e8358b44a2720b81802082e8158b45a2720b81002082e8258b4462720381f02082e8058b456272038170208ce8358b44e2720381b0208ce8158b45e2720380b0208be09b16883ceaef87a48154c3364a34e8bd642aa609a219b745ab41a5205d30cd9acd3a295902a9866c8073a2d5a01a98269866cd169d1bb902a9866c8873a2d5a0ea98269866cd50908ce84588469867ca473176d8554f90862d1369d166d8154f91062d1c73a2dda0ca9f201c4a2ed3a2dda08a9b20962d1273a2dda0ea9f209c4a21d3a2dda06a9f231c4a29d1a2d7a040208ce80d8bc4be71eda01a9b213b287762907041f01018233e86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f6f577abbcadbd5deaef176adb7ebbc5defed86bb01821b65fc68932c6f96e50f64798b2c7f28cb5b65f92359de26cb1fcbf27659fe449677c8f24e59de25cb9fcaf26e59de23cba12c7b59de2bcbfb6479bf2c7f26cb0764f9a02c1f92e5c3b27c44968fcaf231593e9e2080e0310820781c7221f8562720780402081e8558745e2720780802081e8658f49d4e40f00004103c08b1e87b9d80e07e0820f819c4a21f7402827b2180e03e884517740282210410f4108b7ed40908ee8600827b2016fda41310dc0501043f8558f4b34e4070070410c4f4107ed109086e870082986ee6af3a01c16d104010d3cdbca81310dc0a010431f3b94b3a01c12d104010339fbbac1310dc0c010431f3b92b3abbe2972155ae402cbaaad3a28b902a9720165dd369d12f902abf422cbaaed3a29f20557e86587443a7451720557e8458f49b4e8bbe8754f90162d14d9d169d8754f90e62d12d9d80e0268845df422cfa5de72eba05a9f23bc4a2db3a2dfa0d52e526c4a23f745a741d52e506c2a2e489745a741552e51ac4a2884a8b9227825489402c323a77d16d48953f2016598d16e5820082109a37b9d3f96b6620552c640f39e580602e1020b8916e46a94f474d366a685237923abfd4b6a51639f5b769964083001abad0c484a653345aa2311ecde068de49c34a1a0cd3549726e834fef6f680b707bd3de4ed616f8f787bd4db63de1ebf1b207842c68f4ecaf22959fe5c964fcbf217b27c4696bf94e5b3b2fc952c9f93e5af65f91b59fe5696cfcbf277b2fcbd2cff20cb1764f94759fe49967f96e55f64f95759be28cb9764f9b22c5f91e5abb27c4d96afcbf28d040104af430041cc5dfb433a01c1ab10401073d79e4327207819020842262bc91fd609085e84008290c94af29c3a01c15f20802064b292fc119d80e04f1040103259499e4b27207801020842262bc91fd509087e0f0104219395e4b9750282e721802064b292fc319d80e0371040103259499e472720780e02087e0db1e8719d80e0590820f815c4a2bc3a01c1331040f04b88454fe804044f4300c12f2016e5d309089e8200829f432ccaafb32b9e0f52253fc4a2023a2dca0ba9f204c4a2823a2dca03a9f238c4a2423a2dca0da9f218c4a2c23a2dca05a9f228c4a2223a2dca09a902799c4cf2a23a2dca01a9f230c4a2623a01c193108b1e8258545ce72e2a06a9521c6251099d16158154290ab1a8a44e8b0a41aa148658f4a44e8b0a40aa148458f4944e8b9e8454790a62d1d33a2d2a01a952126251298d1641ee8aed0988cda575eea1a721554a41f65069e580e0a32040f004dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fceded456f2f797bd9db2bde5ef5f69ab7d7bdbd713740f037193fba29cbb764f97759be2dcb7f88b24b24cb115936b26c65d9c97220cb31b29c5896636539892c2795e564b21c27cbc965395e9653c8724a59be4f9653c9726a594e23cb6965399d2ca797e50cb29c3121004197010108ba8c900bc1cb2a0141970e0108baf4108b1aab04045d1a0420e8d2422c6aa2121074a91080a04b0db1a8a94a40d0a5440082ee3e8845cd5402822e1e0108ba14108b9aab04045d1c021074c92116b5500908baa40840d0258358d4522520e8621180a04b02b1a8954a40d0c5200041971862516b9580a0730840d005108bdaa804049d4100820ef355d5b62a0141970801083acc97e65fd10908de860082982fcdb7d30908de82008290c7c0247f556757bc1da4caab108bdaebb4a82da4ca2b108b3ae8b4a835a44a1b88451d755ad41252a515c4a2d7745ad41c52a505c4a24e3a2d6a0aa9d20c6251679d163586546902b1a88b4e40f026c4a297211675d5b98bba40aa748558d44da7459d20553a432ceaaed3a28e902aaf412ceaa1d3a2f6902a1d2016f5d469510f48959e108b7ae9b4a81ba44a778845bd355a941b0208421e1a9bbc8fce3dd40b52a537640ff5510e08e6060182bfd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfdea5f22eb57769bc4beb5d3aefd27b97c1bb8c7701045d26193fca2ccb5964f97e59ce2acb0fc87236597e5096b3cbf243b29c43961f96e59cb2fc882ce792e5476539b72c3f26cb7964f97159ce2bcb4fc8723e59ce2fcb0564b9a02c1792e5c2b25c44968bca7231592e9e20806031082088f972d84c9d806011082088f972d82c9d806021082088f972d89b3a01c102104010f3e5b0d93a01c17c104010f3008f393a01c1bc104010f3008fb93a01c13c104010f3008f793a01c1dc104010f3008ff93a01c15c104010f3008f053a01c19c104010f3008f853a01c11c104010f3008f453a01c1ec104010f3008fc53a01c16c1040f04188454b5402822e2b0210740f402c5aaa121074591080a0bb1f62d1329d5df1a5902acb2016bda5d3a2c5902a4b2016bdadd3a285902a8b20162dd769d17c489505108bded169d15c489579108bded569d16c489539108bded369d12c4895372116ad500908bacc108b66422c7a5fe72e5a01a9f23ec4a2953a2d7a1752e53d8845ab745ab41c52e51d8845ab755af416a4cadb108bd6e8b46835a4ca1a88456b755ab412526515c4a2751a2d824c2e5c2688cdeb75eea1b5902aeb207b68bd7240f0310c20e832d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde15f0aea07785bc2bec5d11ef8a7a57ccbbe27703044bc8f85149597e52969f92e5a765b9942c9796e532b25c5696cbc97279597e46962bc8f2b3b25c51969f93e54ab2fcbc2c5796e51764b98a2c5795e56ab2fca22c5797e51ab25c53966bc9726d59ae23cb7565b95e820082752180603dc885e0a84e40b0360410ac03b1e8984e40b0260410ac05b1e8b84e40b03a0410ac01b1e8844e40b01a04107c1162d1499d8060150820581562d1299d8060650820f802c4a2cf750282952080e0f3108b4eeb04042b4200c1e720167da11310ac0001049f855874462720581e02083e03b1e84b9d8060590820580e62d1599d8060690820580662d1573a01c1a7218020e68d28e77402824f420041ccbb99bed6d9153f07a9827923fc373a2d3a0ba9827923fcb73a2d3a03a9827923fc799d169d8654c1bc11fe3b9d169d8254c1bc11fe7b9d1661def1761262d10f3a2d3a06a9721c62d1059d8060498845472116fda873175d8054f91162d14f3a2dfa1e52e50788453febb4e83ca4ca77108b7ed169d137902adf422cfa55a745bf40aafc0ab1e8a24e8b7e8254f91962d1258d16e58100829837395fd6b9872e42aa5c82eca1cbca01c13c2040b004dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced5d75ef6a7857d3bb5aded5f6ae8e7775bdab773740b0be8c1f3590e586b2fc922c3792e59765b9b12c3791e5a6b2dc4c969bcb720b596e29cbad64b9b52cb791e5b6b2fc8a2cb793e55765b9bd2c7790e58eb2fc9a2c7792e5ceb2dc4596bbca723759ee2ecb3d64b9678200823d208020e489cdf1a9750282dd208020e489cdf1697402825d208020e41d04f1697502829d208020e41d04f1e97402821d218020e41d04f1e9750282ed218020e41d04f119740282ed208020e43d71f1197502826d218020e43d71f199740282ad218020e43d71f1997502822d218020e43d71f159740282cd218020e43d71f1f7eb04049b420041c87be2e2b3ea04041b430041c87be2e21fd009083682008290f7c4c567d30908368400822f412c7a5065573c3e1ba40ae4519df1d9755a94155205f2a8cef887745a94055205f2a8cef81c3a2d823c7c233e33c4a287755a9401522523c4a29c3a2d4a07a9921e62d1233a2d4a03a9921662512e9d8060038845a921163daa7317e5825481bc4e213eb74e8b7242aa405ea710ff984e8b7240aa405ea7109f47a745d9215520af53887f5ca745792055202f088acfabd3a2dc902a90c7ecc53fa1d122c8a7efea436ccea7730fe5855481bcaa0c62514202828f8300c1fa74334a7d3a6ab2514393ba91d4f9a5b62db5c8a9bf4db3041a04d0d0852626349da2d1128df1680647f34e1a56d26098a6ba3441a7f1b7779dbcebec5d17efba7ad7cdbbeedef5f0aee7dd00c15e327ed45b96fbc8f2ebb2dc5796fbc9727f591e20cb036579902c0f96e521b23c5496df90e561b23c5c9647c8f248591e25cba365798c2c8f95e571b23c5e9627c8f244599e24cb9365798a2c4f95e569b23c3d4100c1691040703ae44250552720380502084e8558544d2720380902084e8658f4a24e40700204109c08b1a8ba4e40701c04101c0fb1a8864e40700c04101c0bb1a8a64e40701404101c0db1a8964e40700404101c09b1a8b64e40701804101c0eb1a88e4e40702804107c0362515d9d80e0600820380462513d9d80e0400820380862517d9d80607f082038006251039d80605f0820d80f6251439d80601f0820f83ac4a2977476c51b42aa6018ca463a2dc24c451a402c7a59a745752155202fe5886facd3a2da902a909772c437d169514d4815c84b39e29beab4a83aa40ae4a51cf1cd745a540d5205f2528ef8e63a01c1de108b202fe5886fa17317358754c17ccfada54e8b9a42aa60bee7d64aa7458d215530df736badd3a246902a98efb9b5d169516b4815cc37b7dbeab4a825a40ae69bdbaf68b4282f0410ec05b1b99dce3dd4165205f30c8976ca01c1bc2040b017dd8c529f8e9a6cd4d0a46e24757ea96d4b2d72ea6fd32c8106013474a189094da768b444633c9ac1d1bc9386953418a6a92e4dd069fced1d634ede4df26eb27753bc9beadd34efa6df0d109c21e347336579962cbf29cbb365798e2ccf95e579b23c5f9617c8f242595e24cb8b6579892c2f95e565b2fc962cbf2dcbcb65f91d597e5796df93e515b2fcbe2caf94e555b2bc5a96d7c8f25a595e27cbeb657943820082eb2180e006c88560a44e40702d04105c07b168944e40703504105c03b168b44e40702504105c05b1688c4e40700504107c1f62d1589d80e0bb1040f03d8845e3740282cb2180e03b108bc6eb0404df8200826f432c9aa013105c0a010497412c9aa813105c0c010497402c9aa413105c08010417412c9aac13109c0f010417402c9aa213109c0b0104e7412c9aaa13109c0d0104e7402c9aa613109c050104df8458345d67577c1aa40ae6db9233745a34055205f36dc9993a2d9a04a982f9b6e42c9d164d8054c17c5bf24d9d168d8354c17c5b72b64e8bc640aa60be2d3947a745a3205530df969cab13109c09b108f36dc9793a77d15c4815cc1f20f3755a341b5205f307c8029d16cd8254c1fc01b250a74533205566422c5aa4d3a285902a9896da629d16cd8754c1b4d49668b408f2603b87f9655daa730f2d8654c134f7972a07049f00018233e86694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36fef567ab7cabbd5deadf16ead77ebbc5befdd86bb01821b65fc68932c6f96e50f64798b2c7f28cb5b65f92359de26cb1fcbf27659fe449677c8f24e59de25cb9fcaf26e59de23cba12c7b59de2bcbfb6479bf2c7f26cb0764f9a02c1f92e5c3b27c44968fcaf231593e9e2080e0310820781c7221d8a913103c0201048f422cdaa513103c0401040f432cfa542720780002081e8458b45b2720b81f02087e06b1688f4e40702f0410dc07b128d40908861040d0432cf23a01c1dd1040700fc4a2bd3a01c15d1040f0538845fb7402823b2080e04e8845fb750282db2180e027108b3ed309086e8300821f432c3aa01310dc0a01043f825874502720b80502087e08b1e8904e4070330410fc0062d1619d5df143902a983f638fe8b4e800a40ae6cfd8a33a2dda0fa982f933f6984e8bf642aa60fe8c3daed3a2105205f367ec099d16ed8654c1fc197b52a745bb2055307fc69ed209086e825884f933f6739dbbe814a4cae7108b4eebb4e804a4ca4988455fe8b4e818a40a66d47846a74547205530a3c62f755a740652e54b884567755a741a52e50b88455f69b4281f0410dc08b1f99cce3d741652e52bc81e3aa71c10cc07020437d2cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6dfde1df0eea07787bc3becdd11ef8e7a77ccbbe37703044fc8f8d149593e25cb9fcbf26959fe4296cfc8f297b27c5696bf92e573b2fcb52c7f23cbdfcaf27959fe4e96bf97e51f64f9822cff28cb3fc9f2cfb2fc8b2cff2acb1765f9922c5f96e52bb27c5596afc9f27559be912080e0750820780371214861750282572180e03588454e2720781902085e815814e804042f4200c14b108b62740282bf4000c15f211625d60908fe0401047f865814ab1310bc0001047f845894442720f83d0410fc016251529d80e0790820f81dc4a2643a01c16f2080e0b7108be2740282e72080e0d7108b92eb0404cf42004148272a45bc4e40f00c041084f4c453a4d009089e860082909e788a943a01c15310401032e54d719fcaae788a94902af7412c4aa5d3a278489514108b52ebb4280e522539c4a2343a2d4a0aa9920c62515a9d16c542aa248158944ea74531902a892116a5d76991835409201665d009089e845864211665d4b98b3240aa6484589449a745e92055d2432ccaacd3a234902a69211665d169512a4895d4108beed76951164895fb211665d56951264895cc108b1ed068517e08200861c25364d3b987b242aa3c00d943d9940382f94180e009ba19a53e1d35d9a8a149dd48eafc52db965ae4d4dfa659020d0268e84213139a4ed16889c6783483a379270d2b69304c535d9aa0d3f8dbbb8bde5df2eeb27757bcbbeadd35efae7b77e36e80e06f327e7453966fc9f2efb27c5b96ff10e520912c4764d9c8b2956527cb812cc7c87262598e95e524b29c549693c9729c2c2797e578594e21cb2965f93e594e25cba965398d2ca795e574b29c5e9633c872c6840004830c084030c0fced574a252018a443008201e66fbfd22a01c1200d02100c307ffb9551090806a910806080f9dbafac4a40304889000403cc7cae9c4a40308847008201663e575e252018c42100c100339f7b462520182445008201663e5741252018c42200c100339f7b56252018c42000c100339faba812100c1c02100c30f3b9e75402828141008201663e574925201824420082410462d1f33a01c1db1040f00f884595750282b72080e0ef108b5ed0d915af0ca9f202c4a22a3a2daa04a9f23cc4a2aa3a2daa08a9f21cc4a26a3a2daa00a9f22cc4a217755a541e52e5198845d5755a541652a51cc4a21a3a2d2a0da9520662514d9d80e04d8845a52016d5d2b98b6a42aad48258545ba745d521556a402caaa3d3a26a902a2f422caaabd3a22a902a552116d5d369515d48957a108beaebb4a836a44a1d88450d345a54000208fe06b1b9a1ce3d541f52a501640f35540e0816000182bfd1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3e48e583d43e48e383b43e48e783f43ec8e0838c770104834c327e945996b3c8f2fdb29c55961f90e56cb2fca02c6797e5876439872c3f2ccb3965f91159ce25cb8fca726e597e4c96f3c8f2e3b29c57969f90e57cb29c5f960bc87241592e24cb8565b9882c1795e562b25c3c4100c1621040b038e442d05b272058040208168558d447272058080208168658f4ba4e40b00004102c08b1a8af4e40301f0410847c3d28453f9d80605e0820f804c4a2fe3a01c13c1040f071884503740282b92180e063108b06ea0404734100c14721160dd20908e68400828f402c1aac1310cc0101041f865834442720981d02083e04b168a84e40301b04107c1062d11b2a01c1202b02100c305f781ea612100cb22000c100f3e885e13abbe2c3205586432c1aa1d3a2a1902a6f402c1aa9d3a2c1902a4320168dd269d140489541108b46ebb4a83fa4ca00884563745ad41752a51fc4a2b13a2dea03a9f23ac4a2712a01c12033c4a2de108bc6ebdc45e32055c6432c9aa0d3a231902a6321164dd469d1284895d1108b26e9b46804a4ca48884593755a3409526532c4a2293a2d9a00a9321162d1548d1641a6a801e6418dd374eea129902a53217b689a7240b02006100c32d1cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3e28e083823e28e483c23e28e283a23e28e683e27703044bc8f85149597e52969f92e5a765b9942c9796e532b25c5696cbc97279597e46962bc8f2b3b25c51969f93e54ab2fcbc2c5796e51764b98a2c5795e56ab2fca22c5797e51ab25c53966bc9726d59ae23cb7565b95e82008275218020e60b19eb740282b5218020e60b19eb75028235218020e62b861b740282d5218020e62b861b750282d5208020e62b869b74028255208020e62b869b75028295218020e631301fe804042b410041cc6360b6e804042b420041cc63603ed409085680008298c7c06cd509089687008298c7c07ca413102c0b0104318f81d9a613102c0d0104318f81f9582720f8340410c43c0666bb4e40f0490820f814c4a24f7476c5b743aa7c02b168874e8bb641aa7c0cb168a74e8bb642aa7c04b168974e8bb640aa7c08b1e8539d166d8654f90062d16e9d166d8454d904b1688f4e8bd643aa6c805814ea04044b422c5a07b1c8ebdc4521a48a8758b457a745bb2155f6402cdaa7d3a25d902a9f422cdaafd3a21d902a3b21167da6d3a2fd902a9f412c3aa0d3a2bd902afb20161dd46851210820580262f3219d7be800a4ca41c81e3aa41c102c0402044bd0cd28f5e9a8c9460d4dea4652e797dab6d422a7fe36cd1268104043179a98d0748a464b34c6a3191ccd3b69584983619aead2049dc6df3ea8ee831a3ea8e9835a3ea8ed833a3ea8eb837a770304ebcbf85103596e28cb2fc97223597e59961bcb7213596e2acbcd64b9b92cb790e596b2dc4a965bcb721b596e2bcbafc8723b597e5596dbcb720759ee28cbafc9722759ee2ccb5d64b9ab2c7793e5eeb2dc43967b260820d8030208f6845c082ee90404bb4100c1ee108b2eeb0404bb4000c1ae108baee804043b4100c1ce108baeea04043b4200c1d720165dd30908b68700821d20165dd70908b6830082af422cbaa113106c0b01045f8158f49b4e40b03504106c03b1e8a64e40b02504106c05b1e8964e40b03904106c01b1e8779d8060530820d80c62d16d9d8060630820d80462d11f3a01c1461040f06584452913e904041b4200c1972016455476c55326825481bccb3ba5d13938b80da9027997774aabd3a25b902a907779a7743a2dc2bc9deb26c4a240a745d721556e402c8ad169d15548956b108b12ebb4e832a4ca158845b13a01c106108b2e412c4aa2f3be2816522509c4a2a43a2d8a8154490cb128994e8b1ca44a00b1284ea7450652c5422c4aaed3a2384895e4108be2755a9414522519c4a2141a2d82bcaa2e80bc8537654a9d7b281e522505640fa5540e0816060182f5e96694fa74d464a386267523a9f34b6d5b6a91537f9b66093408a0a10b4d4c683a45a3251ae3d10c8ee69d34aca4c1304d7569824ee36f1f74f241671f74f141571f74f341771ff4f041cf7f0c082eae51b14c81c245269c7273278437622784d7e9e71afd5ca59f2bf473997e2ed1cf45faf9957e7ea19f9fe9e727faf9917e2ed0cf0ff4f33dfd7c473fe7e9e75bfaf9867ebea69f73f4f315fd9ca59f2fe9e70cfd7c413fa7e9e773fa39453f27e9e744ec041fc9c84b065ed2f3928e97b4bca4e125352fa978b98f9794bca4e0259e97e4bcc4f1928c97a4bc24e1259697c4bcc4f012f0e278b1bc185e22bc24a2a3f8837e6ed3cfeff4738b7e6ed2cf6f2c16e7a5182f457929c24b615e0af152909702bce4e7251f2f4ff0929797c779c9c3cb63bce4e6e5515e72f1f2082f39797998971cbc3cc44b765e1ee4251b2f0ff0929597fb79c9c24b665e32f1528f97babcd4e1a5362fb578a9c94b0d5eaaf3f2222fd578a9ca4b155e5ee0a5322fcff3528997e778a9c8cbb3bc54e0e5195ecaf3528e97b2bc94e1a5342fa578799a97a77879929792bc94e0a5272f3d78e9ce4b375ebaf2d28597cebc74e2e5355e3af2d28197f6bcbcca4b3b5e5ee1a52d2f6d7869cd4b2b5e5af2d28297e6bc34e3a5292f4d7869cccbcbbc34e2e5255e1af2d28097fabc4ce7651a2f537999c2cb645e26f132919709bc8ce7651c2f637919c3cb685e46f132929711bc0ce765182f6ff032949721bc0ce665102f037919c04b7f5efaf1d29797d779e9c34b6f5e7af1b28197f5bcace3652d2f6b7859cdcb2a5e56f2f23e2f2b78798f977779798797e5bcbccdcb5bbc2ce365292f4b7859cccb225e16f2b28097f9bccce3652e2f737899cdcb9bbccce265262f337839cecb315e8ef2728497c3bc1ce2e5202f0778f98c97fdbcece3652f2f9e9790973dbcece6e5535e76f1b293971dbc7cc2cb765e3ee6651b2f1ff1b295970f79d9c2cb07bc6ce665132f1b79b9c1cb755eaef17295972bbc5ce6e5122f1779f995975f78f999979f78f991970bbcfcc0cbf7bc7cc7cb795ebee5e51b5ebee6e51c2f5ff17296972f7939c3cb17bc9ce6e5735e4ef17292174e3ec3c96738f90c279fe1e4339c7c8693cf70f2194e3ec3c96738f90c279fe1e4339c7c8693cf70f2194e3ec3c96738f90c279fe1e4339c7c8693cf70f2194e3ec3c96712f161fcc1cb6d5e7ee7e5162f3779e1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fc339c7f86f3cf70fe19ce3fc3f96738ff0ce79fe1fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf70fe19ce3fc3f96738ff0ce79fe1fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fcb39c7f96f3cf72fe59ce3fcbf96739ff2ce79fe5fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf72fe59ce3fcbf96739ff2ce79fe5fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc739c7f8ef3cf71fe39ce3fc7f9e738ff1ce79fe3fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02ce3fc7f9e738ff1ce79fe3fc739c7f8ef32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebf80f32fe0fc0b38ff02cebfa07e6cb4fbdecb07bd7dd0c707affba0af0ffaf9a0bf0f06f860a00f06f960b00f86f860a80fdef0c1301f0cf7c1081f8cf4c1281f8cf6c1181f8cf5c1381f8cf701559ce883493e98ec83293e98ea83693e98fe0f5aefef3ed3ac79e726355a34eb480df857f24fa6a39840fb8af617ed33da6fe41bf9473e929fe42bf94b3e93dfe43bf94f9f037d1ef4b9d0e7439f137d5ef4b9d1e7479f237d9ef4b9d2e74b9f337ddef4b9d3e74ffba0169fe804da1ab44568abd096a1e8270bc80ab284ac218bc82ab28cac230bc94ab294ac258bc96ab29caca78f803e0afa48e8a3a18f883e2afac8e8a3a38f903ecaaef4af283d21a40b4948d791902e23215d4542ba8884740d09e91212d21524a40b4848d78f902e1f215d3d42ba788474ed08e9d211d29523a40b4748d78d902e1b215d3542ba688474cd08e99211d21523a40b065d2ee86241970aba50d065822e12215d1e42ba3a84747108e9da10d2a521a42b4348178690ae0b215d1642ba2a84745108e99a10d22521a42b4248178490ae07215d0e42ba1a84743108e95a10d2a520a42b4148178290ae03215d0642ba0a84741108e91a10d22520a42b4048178090a23f3c1af5977612ef2abe74057c110bf87216f0852de04b5cc017bb802f7b015f0003be14067c510cf8f218f08532e04b66c017cf802fa3015f5003beb4067c910df8721bf08537e04b70c017e3802fcb015fa003be54077cd10ef8f21df0853ce04b7ac017f7607aac0f66fcd77921e47d73c10cc84875e65f2f326049d94e6ddab56bd36af2781a6eb569dfaa5d0bcc942f7a747f75ce173da6573bb6a349deac7193062cabd4f5d58ecfb5acd2a1cb844476c0a2721dda77ee3221f2d7df239b7fc03b65dbb46fd2a96785362dda35afda7152a205e5db748b245a58a34b878e13c78d03fc0bfef31e1a3f11622f7982f9a0de046ca30439bf37e16f51d6635842fdde1584fed6cdbef75bf75fcc2547305b688ec2df393abb3988dfb8ff7f6b4f54b7b5b107941f70408bca74ead4a4e7a94429318774df5f3f24cc81a4d27220a9b51c481a2d079256cb81a4d37220e9b51c48062d079251cb8164d2722099b51c48162d0772bf9603c9aae5401ed07220d9107f05fcc7ad09751ae6fa609e0fe6fb60810f16fa60910f16fb60890f96fa60990fdef2c1db3e58ee83777cf0ae0fdef3c10a1fbcef83953e58e583d53e58e383b53e58e783f53ed8e0838d3ed8e483cd3ef8c0075b7cf0a10fb6fae0231f6cf3c1c73ed8ee834f7cb0c3073b7db0cb079ffa60b70ff6f820f481f7c15e1fec1b3763c082173a749b60cd9fff6d227ffe7724d17ffc7992e82fff79923fdf80b72b74e8d4a24dabf6dc7e9cb8aa19add53ab5e9d6a44b0bee497669d3a1fdf801cb2ab668d2316ad304976fe28077aab768d5a67397169d9e6bdfbc458fc81dffdbfce7ffbb4df9e73107eeff1c7b306021ffa1353ef6cfff9d28f27ffe0e1a0f6915cd01fc35f59fa0f0a52f76edd0a54d8bf65d26a3fea69e8ff8d5f9eb7fbd14f0c1673ed8bf557cb6e4fe88287f16fe8efbe6e5fffd08e7437c063c319c3dc27ec700bf9d16a8d94e077d7040de4e07e4ed743061b6d30288cf0720dbe9a0f6edb444cd763aec8343f2763a246fa7c309b39d96407c3e04d94e87b56fa7a56ab6d3511f1c91b7d311793b1d4d98edb414e2f311c8763aaa7d3b2d53b39d8efbe098bc9d8ec9dbe978c26ca765109f8f41b6d371eddb699f9aed74d20727e4ed7442de4e2713663bed83f87c02b29d4e6afc46744188cd7321554e21475a704ae214745efbf9bd79ed1df69227980feab44a4a82ceef349c929880693941aa7ca1725b9da6038334e6523ea1f28116a00fef0ce4b1184fa8c6dcce4003fccb7b017e87bde409e6833aab32c0e9fcce2ac5dcd08641a2293f2498e641aa7ca5facef22b68309dbb174c77d84b9e603ea8af5506139ddfd77feb3bcb6f546eabafe9c0307796f9ffce7796df42ee2cf3abbeb3fc161ae0e7ef05f81df69227980fea3b95014ee7f79dd23bcbef54ffde9d80fede7d7feff7ee0e7bc913cc07f583cadf3b3abf1ffed6374e17546eab1fe8c030374e05ffce374e3f426e9c0aaa0ef01fa101fed3bd00bfc35ef204f341fdac32c0e9fc7e567ae3f4b3eadfbb43d0dfbb5feefddedd612f7982f9a07e55f97b47e7f7ebdffac6e9a2ca6df52b1d18e6c6a9f0dff9c6e912e4c6a9b0ea00bf040df0cbf702fc0e7bc913cc0775456580d3f95d517ae37445f5efdd11e8efddd57bbf7777d84b9e603ea86b2a7fefe8fcaefdad6f9caeabdc56d7e8c030374e45ffce374e3720374e455507f80d6880ff762fc0efb0973cc17c50375506389ddf4da5374e3755ffde1d83fededdbaf77b7787bde409e683fa5de5ef1d9ddfef7feb1ba7db2ab7d5ef7460981ba7e27fe71ba73f20374ec55507f81fc8008f49742fc0efb0973c817c50311195014ee717d179e30431ecfffd6aebd26a2d9ab7e8d4b945fb891327f8605e789b1f47135d0f84b7134df031c6c758f19f3b95e831fa7f2f8cfe338ba2ebe2e87a28ba1e89aec7a2eb5bd1f5ede8ba3cbabe135ddf8daeef45d715d1f5fde8ba32baae8aaeaba3eb9ae8ba36baae8baeeba3eb86e8ba31ba6e8aae9ba3eb07d1754b74fd30ba6e8dae1f45d76dd1f5e3e8ba3dba7e125d7744d79dd1755774fd34baee8eae7ba26b185d7d74ddfba753cec7047775782eff133126baba3fffb9181f9358ed153f261690430915f785a0619fe45ed8ff1773c9114c72255518f5747649353f9b18b0b5b1075440dfb3891fd4f274c4ec5a0ee4212d079243cb813cace540726a399047b41c482e2d07f2a89603c9ade5401ed3722079b41cc8e35a0e24af96037942cb81e4c33d9b78a68f49e663e27c4c721f13ef6352f898943ee63e1f93cac7a4f631697c4cdaff8d47056f68d1feb5ae2dbab6a8d6b569bb36cdfee361c12cfdd707062753fcc060fe23e0af7ed009fa94b298e45a9e521693dec7a4139f5216934e7c4a594cfa04794a594c7288cfe926403c52fed0bb987835db29a38fc9206fa70cf276ca9830db291ee27306c876caa87d3ba552b39d32fb984cf276ca246fa7cc09b39d52417cce04d94e99b56fa7d46ab6d3fd3e268bbc9db2c8dbe9fe84d94ea9213e67816ca7fbb56fa7346ab6d3033e26abbc9db2cadbe98184d94e69203e67856ca70734420e852036278354c9a6f9395c31d9a053af07ef4dbdeeb0973cc17c50d935220e7c7ed975326a314921551e52b9adb2d3816118b5922a1935d0879703c2a895d4cca8c5e48006f8c3f702fc0e7bc913cc0795536580d3f9e554caa8e5d4f884d70290608a83547944f59de523d060ca752f98eeb0973cc17c508faa0c263abf47ffd67796b9556eab47e9c03077964ffd9def2c1f83dc593ea5facef2316880e7b917e077d84b9e603ea8c75506389ddfe34aef2c1f57fd7b9709fa7b97f7deefdd1df69227980fea0995bf77747e4ffcad6f9cf2a9dc564fd081616e9c4afd9d6f9cf2436e9c4aa90ef0fcd0002f702fc0efb0973cc17c50055506381f98d21b27d54f568ec902fdbd2b74eff7ee0e7bc913cc075558e5ef1d9d5fe1bff58d531195dbaa301d18e6c6a9ccdff9c6a928e4c6a98cea002f0a0df062f702fc3f17247bc913cc07555c6580d3f915577ae3a4fa39373159a1bf7725eefddedd612f7982f9a04aaafcbda3f32bf9b7be717a52e5b62a490786b9712af777be717a0a72e3544e75803f050df0a7ef05f81df69227980faa94ca00a7f32ba5f4c6a954c23fa82c262efa00ad74d135c39f8fd12aed63cafcbfa7f3d7c3a86c42b8fcd70fab9ccec32aaff3b09ed1795815741ed6b33a0faba2cec37a4ee76155d27958cfeb3cacca3a0feb059d875545e76155d57958d5741ed68b3a0fabbacec3aaa1f3b06aea3cac5a3a0fabb6cec3aaa3f3b0eaea3cac7a3a0fabbecec36aa0f3b01aea3cac97741e56239d87f5b2cec36aacf3b09ae83caca63a0fab99cec36aaef3b05ae83cac963a0fab95cec36aadf3b0dae83cacb63a0feb159d87d54ee761bd0a382cf9e53405693494223a274a195def8bae99a26b96e89a35baa68dae65a36bb9e85a3eba3e135d2b44d767a36bc5e8fa5c74ad145d9f8fae95a3eb0bd1b54a74ad1a5dab45d717a36bf5e85a23bad68caeb5a26bede85a27bad68daef5a26bfde8da20ba368cae2f45d746d1f5e5e8da38ba3689ae4da36bb3e8da3cbab688ae2da36babe8da3abab689ae6da3eb2bd1b55d747df5cf695a7b1fd3e1ae53b864d17fa274746dffe73fd7d1c7bca6970ae9049e55ab3ab9ce2a07f1313e261693155dc011a6edfcbaea8ce86e3a0fabbbcec3eaa1f3b07aea3cac5e3a0fabb7cec3eaa3f3b05ed779587d751e563f9d87d55fe7610dd0795803751ed6209d873558e7610d49f0bf3d53d21f44dda27f1d758fae3da26bcfe8da2bbaf68eae7da2ebebd1b56f74ed175dfb47d701d17560741d145d0747d7217ffec535d4c7bc9110f60cd3f9a90dd7795823741ed6489d87354ae7618dd6795863741ed6589d87354ee7618dd7795813741ed6449d873549e7614dd6795853741ed6549d87354d657b3329f52531df587c46e5f975a6be32e6fc2a24c43732fffab69a0ef92ee533902a4abfee3243e761cdd47958b354fe1ed3dcb113e6fcded469fb6c9d873547e761cdd57958f3741ed6fc847812c45ffd9d8e404e6d81c6533390535ba8f1d42ce4d416693c350739b5c51a4f2d809cda128da7160339b5a51a4f8d7af490935ba6f3e486434eee2d9d27370272726feb3cb99190935baef3e446414eee1d9d27371a7272efea3cb93190937b4fe7c98d859cdc0a9d27370e7272efeb3c39ccdf702b759e1c06905ea5f3e4301ddad53a4f6e12e4e4d6e83cb9c990935babf3e4a6404e6e9dce939b0a39b9f53a4f6e1ae4e436e83cb9e99093dba8f3e466404e6e93ce939b0939b9cd3a4f6e16e4e43ed079726f424e6e8bce939b0d39b90f759edc1cc8c96dd57972732127f791ce939b0739b96d3a4f6e3ee4e43ed678728921a7b65de3a9c5424eed138da79604726a3b349e1ae66be13b359e5a32c8a9edd2786a719053fb54e3a925879cda6e8da7160f39b53d1a4f2d05e4d4428da79612726afeaf9fdaa9443d23c6ba2026716c92a4c9e292c7a748795faad469d2a64b9f2163a6cc59eecffa40b607b33f94e3e19c8fe47a34f763791ecffb44befc050a162a5ca468b1e2254a3ef9d4d3a54a97295baefc33159eadf85ca5e72bbf50a56ab517abd7a859ab769dbaf5ea3768f852a3971b3769daac798b96ad5ab769fb4abb57db77e8f85aa7ce5dba76ebdea3e7a9448ff998053e66a18f59e46316fb98253e66294df569f64d13629aa3d2b491667234b9a2f90e4d416856401d75ea3b5377967a98d4e9a37e18758da8b7421d08fa3b9dfe9aa5bff9e82f23fafb81eeb2e95e94eed8e8ce86ee00e84a4957144a5e4a28fa4da61d4f3b831cfcff00", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/examples/gullible_account_contract.json b/yarn-project/noir-contracts/src/examples/gullible_account_contract.json index 878db4fc8c1..c4704e0f404 100644 --- a/yarn-project/noir-contracts/src/examples/gullible_account_contract.json +++ b/yarn-project/noir-contracts/src/examples/gullible_account_contract.json @@ -71,7 +71,7 @@ } ], "returnTypes": [], - "bytecode": "ed5d677454d516ce4d41104be8bda8f43a930209358dd021f45e526ec2c06426994c422822238a8888c94c40045ff1418080b4072104458a888867101111107befbd0bbe7d6e60f9ee63adeb8fd9b3deb7668d6bedcd6265327cdf3edfdef9ce3d936399575976598977ed4eb2a667ce4bb217a716da3293d3ad5657f9d8c451830795bac315832f46187db196e2da92e4b058ad969c35a5aecde32cb61cabea2929755f4c30f9f69f39dae7b730698872f3ac6a7c4999ab6258616eded0ec5176a73b24cc559e6cb71538dd4aa9ef405d3b922cb674c782548b6acd1a9d5716b231c552a4846c1ae7b4e7794a4a18fe816d890e8b734eaeeab4647a4a3d0ca58de758a03e1713a24dbd6262d4de51aa39da9c6e8a8acf888b35c5c466f48a33c79963e362b3a2e2a2a3d5b898b8def119f1bd4df1e69868d59c1d1b1f9d7ded3df899f5f1bddea63f25ed8193342f203303a0f24487237dc1e590481e48f57c87c403a43e0a900628401aa200698402a4310a902628409aa200698602a4390a901628405aa200698502a4350a90362840da72b8ffebd6c4d4b75fff0103131293925306a50e1e3274d8f01123478d4e1b3376dcf80913274d9e3275daf4193367cd4ecfc8cc52b373e658e696ac776d1c692f728785d6fc19aad4fca9845cdf3884f8bc71309b5cdb53ed0ed59263935b2acfde4cca690e4b51ba5395fb2ca7c56e2b75550c51d3f3341aee7093c7b563ac9a632970aa8ea1b62cb558f99fbf87fef7cbc3226b3047845fc31ee1da24b740a5b56bfe1ea25cdba1c8e5f2d5c8f761d8e554a4581c2ad12e525d5bc714da9d16d5e65cc3a3a6fe1cb2f67d6711659d77c460333dcf68a76d155774bba5120fc3b2f567a8ed3c37435d18f6217e94cf0010f9d8728de4936b241f9b3fe43380a1b6b90cf2b161cb2709443e797623f9d88de493e70ff92431d4d6ce209f3c6cf92483c8c7916f249f7c23f938fc219f6486dae633c8c7812d9f1410f9380b8ce45360241fa73fe493c250db0206f938b1e53317443e458546f22934924f913fe43397a1b6850cf2296290cf0dc5f19558344381fb32bcc77ccec320e6f3cdf98ce79bc5c1f34d5d698b39166801e0f9e6fc0525dcfdeee678fcc3f01e0b0185b46021c7c331af32177148732cda22061c5a797cee347f8de9458c637a71704ceb4abb986381ee061cd38bee661fd388a5621943668631d48fe13d96007bc5258c43e89ee010d295f61e8e05124b01a7d012b13460dda270016a492c152e1ec3680d54c328ee65718c5660c728ee659cd66259705ceb8b2b96b12cd27d80039bc8dd07691c59aae5af7e2be46cb7fb83eda6abadb89f453fcb01bbad502c0f5c7bf400e2ec5e2e1ee0b147b680b5472b58ec910dd91eade09cd70f06e7b5beb8e24196455a89688f56889598f6682570bfd939dbeda160bbe96a2b1e62d1cf2ac06eb38b55816b8f1e469cddabc4c33cf6282f60edd16a167b94876c8f5673ceeb4782f35a5f5cf108cb229520daa3d5a204d31e9500f75b3e67bb9506db4d575b51caa21f3760b7e50b77e0da230fe2ec760b0f8f3d7204ac3d2a63b1470e647b54c639afd704e7b5beb8620dcb22ad45b44765622da63d5a0bdc6f059cedf668b0dd74b5158fb2e8671d60b7158875816b8f1e439cddebc4633cf6c819b0f6683d8b3d7222dba3f59cf37a43705eeb8b2b36b02cd2e388f668bd781cd31e7154ebc65f0edd9aa666a98e02d5e6f1b8fb89abee7914b9e26a885bfc4dfcddf0f59743baba07d2ab13281229ec14f91405148328522906530ca1184a318c6238c5088a9114a3284653a4518ca1184b318e623cc5048a8914932826534ca1984a318d623ac50c8a9914b3286653a453645064526451a814d914391473282c1aa37f887ffe4505fad26b89f855f95af91d4f887f81feecddc83018fc357d633887efa6e0f0d5d5566c629926e580b3374694235f5bcb206b5e405178d7d6de817271de9d2840ee4201d20e05487b14201d5080744401d20905486714205d5080744501d20d05487714203d5080f4440162e2bbb67683d82cb688ada2426c13dbc5936287d8297689ddff8fab69ab555b7ea15aa8a61566582d99d72fa7955fd25f505b17f7825ae9fb7d5d5c7f5eb325b682dcb325fe2df618ddb425f6185db545dfed87bbb6c4568e0aef71735407fbb636518122a37d62afa18cf61aca689f5f6454c151e1bd1c32da072ea31d2832da2f2a0d65546928a3fd7e91d10e8e0a5772c8683fb88c76a2c8e880a832945195a18c0ef845463b392a5cc521a303e032da8522a383a2da5046d586323ae81719ede2a87035878c0e227e702086a3c69b39dee429e00ba638c0fd7974f574f0e84a5f5cf134cb221d42fcdcc053e210e427bd4439c79b3c83a8a743e2199e8f7a415e1ecdb37087593eeb5584fc59afc39c33fb487066eb8b2b8eb02cd251c4997d581cc5fcacd751c41b4aa338e6d1168e3739866c218f718ea36783e3485f5cf12ccb221d471c47c7c4f100b690cf21eae9b8788ec7421607ae853cc162218b912de409ce99fd7c7066eb8b2b9e6759a4938833fb84388969214f22f75b2567bfbd10ec377d71c50b2c8b740ab1df2ac5a900f6482f22eae9947891c7232d0c5c8f24583cd242e4992d3867b63738b3f5c5155e96453a8d38b385388de9914e23f75b1567bfbd14ec377d71c54b2c8b7406b1dfaac49900f6482f23eae98c7899c7232d0e5c8f7496c5232d469ed9673967f62bc199ad2fae78856591ce21ceecb3e21ca6473a87dc6fd59cfdf66ab0dff4c515afb22cd279c47eab16e703d823bd86a8a7f3e2351e8fb424703dd205168fb40479665fe09cd91783335b5f5c719165912e21ceec0be212a647bae4f7abb9c4167929d51e99f66a3753bd2e2edf48c4e7f1f3863fcaeb33aa372151bd0589ea6d4854ef40a27a1712d57b90a8de8744f50124aa0f21517d0489ea6348549f40a2fa1412d56790a83e8744f50524aa2f21517d0589ea6b4854df40a2fa1612d57790a8be8744f50324aa1f2151fd0489ea674854bf40a2fa1512d56f90a87e8744750512d55548547f20a2f22a2198b0144c58a198b0c230618563c28ac084550b13d64d98b06a33c032fedfad44bbc5367900b45da62765aa94a94aa66a9976cbf4864c6fcaf4964c6fcbf48e4cefcaf49e4cefcbf4814c1fcaf4914c1fcbf4894c9fcaf4994c9fcbf4854c5fcaf4954c5fcbf48d4cdfcaf49d4cdfcbf4834c3fcaf4934c3fcbf48b4cbfcaf49b4cbfcb7445a6ab32fd4189e6bd96152d876a394ccbe15a8ed0722d2ddfa4e5daf2f8cbabd4f12a37ffd599d966f9afbcae7d579d9aefaaeb556e01fdcc8657b915f140f909b191a73f6e636e5b2c76b707ec6789bc4a24b32e99066e3dcc9f03f5316135c084d5101356234c588d316135c184d5141356334c58cd3161b5c084d51213562b4c58ad3161b5c184d5d6ef3bc948da0ad5d3f645f5b5dc40cb0db5dc48cb8db5dc44cb4db5dc4ccbcdb5dc42cb2db5dc4acbadb5dc46cb6d6bf65a7778953bfd519ebb3057ad1d26acf698b03a60c2ea8809ab1326acce98b0ba60c2ea8a09ab1b26acee98b07a60c2ea8909cb8409cb8c092b0a135634e283db727ae4ca436f29203d3a0ba007e63cfc5cfef86549df61c5b0fca2e35296777161365e2c26ac5e98b07a43f6311d3846f2f08bc32c7b3c26ac3e98b0fa62c2ea8709abbf3f0e557ded698585da00446aa12cd40622520b63a19680482d9c855a2222b508166a4988d46ab1504b46a4468fe859c8a560926bc7426e1026b9f62ce45231c97560213718935c4716724330c97562213714935c671672c330c9756121371c935c5716722330c97563213712935c771672a330c9f56021371a935c4f16726998e44c2ce4c6609233b3901b8b492e8a85dc384c72d12ce4c663928b61213701935c2c0bb98998e47ab1909b8449ae370bb9c998e4e258c84dc12417cf426e2a26b93e2ce4a66192ebcb426e3a26b97e2ce4666092ebcf426e2622b99b58a8cd42a4569b85da6c446a7558a8a52352bb99855a0622b5ba2cd43211a9ddc2422d0b91daad2cd454446ab7b150cb46a4763b0bb51c446a912cd4e6f84eade4724857af32c0ab0cf42a095e25d1ab247995643a5aa703683aa6a5c34c3af2a383313a3ea243163a8aa007f6f4589b1efed223527a90488fdbe8a1143dbaa1071cf4188036cbb4a5a48d176d4fc8c493d5254348b689ec05fd18a61f5734d669fcd198a07622d9d1f2108dff00", + "bytecode": "ed5d677454d516ce4da18828bd37955e675220a1a6113a84de4bca4d1898cc24934908456444111131990988e02b3e081090f62084a0481111f10c22220262efbd77c1b7cf0d2cdf7dac75fd317bd6fbd6ac71adbd59ac4c86efdbe7db3bdfb967722cf52acbaf2871ae3d89d6b48cf989f6a294025b46529ad5ea2a1b97307ac8e01277b862f0c508a32fd6505c5b131d16abd592bdb6c4b565bcc5966d553dc525ee4bf126dffe3347f9fc16260d514eae558d2b2e75950f2fc8c91d9635daee748784b9ca92ecb67ca75b29f11da86b67a2c596e658986251ad9963724b4336255b0a9590cde39df65c4f7131c33fb03dc16171cecd519d960c4f8987a1b4711c0bd4f7527c94a97774b4da2752354799d34c9171e9b131a6e898f4deb1e658734c6c4c66646c54941a1b1ddb272e3dae8f29ce1c1da59ab362e2a2b2aebf073fb3bebed7dbf4a7a43d7092e6056466005496e070a42dbc12528f07527ddf21f100698002a4210a904628401aa300698202a4290a906628409aa300698102a4250a905628405aa300698302a42d0a90761ceeff863531f5eb3f60e0a0f884c4a4e4c12943860e1b3e62e4a8d16352c78e1b3f61e2a4c953a64e9b3e63e6acd973d2d23332d5acecb99679c51b5c9b46d90bdd61a1d57f862ad57f2a2137360e213e6f1ccc26d78e14bb43b564dbe496cab32f8372aac35298e654e53ecb69b1db4a5ce543d5b45c8d863bdce471ed1ca7665bf29daa63982d532d52fee7efa1fffdf2b07ad59823c2af638f706d965ba0925ad57f0f51aeef50e472f96ae4fb32ec72ca932d0e956817aaae6d630bec4e8b6a73aee551d3000e59fbbeb388b4ce3f6ab0999e6fb4d3b68aabbadd52b18761d90630d476be9ba12e0cfb103fca6720887c6c3946f2c931928fcd1ff219c850db1c06f9d8b0e59308229f5cbb917cec46f2c9f5877c12196a6b67904f2eb67c9240e4e3c833924f9e917c1cfe904f12436df318e4e3c0964f32887c9cf946f2c937928fd31ff24966a86d3e837c9cd8f29907229fc20223f91418c9a7d01ff299c750db0206f91432c8e7a6e2f84a2c8aa1c0fd18de6301e76110f3f9e602c6f3cda2e0f9a6aeb4451c0bb410f07c73c1c262ee7e77733cfe61788f4580425ab888e3e19857998738a439166d31030ead3c3e779abfc6f462c631bd2438a675a55dc2b14077038ee9c577b38f69c452b18c2133c318eacff01e4b81bde252c621744f7008e94a7b0fc7028965805368a95816b06e51b800b5249609178f61b406aa6114f7b238462bb06314f7324e6bb13c38aef5c515cb5916e93ec0814de4ee83348e2cd5f257bf1570b6dbfdc176d3d556dccfa29f1580dd56205604ae3d7a007176af100ff0d8235bc0daa3952cf6c8866c8f5672ceeb0783f35a5f5cf120cb22ad42b4472bc52a4c7bb40ab8dfec9cedf650b0dd74b5150fb1e8673560b7d9c5eac0b5470f23ceeed5e2611e7b941bb0f6680d8b3dca45b6476b38e7f523c179ad2fae788465918a11edd11a518c698f8a81fb2d8fb3dd4a82eda6abad2861d18f1bb0dbf2843b70ed91077176bb8587c71e3902d61e95b2d82307b23d2ae59cd76b83f35a5f5cb1966591d621daa352b10ed31ead03eeb77cce767b34d86ebada8a4759f4b31eb0dbf2c5fac0b5478f21ceeef5e2311e7be40c587bb481c51e3991edd106ce79bd3138aff5c5151b5916e971447bb4413c8e698f38aa75f32f876e4b55335547be6af378dcfdc535f77c8a1c712dc42dfe26fe6ef8fa2b21dddc83e8d5f1140914768a3c8a7c8ac1142914432886520ca3184e31826224c5288ad11463285229c6528ca3184f31816222c5248ac9145328a6524ca3984e31836226c52c8ad9147328d228d22932283229548a2c8a6c8ab914168dd13fc43fffa202fde8b544fc9a7cadfc8e27c4bf407ff66e62180cfe9abed19cc3777370f8ea6a2b36b34c9332c0d91b2dca90afad6590352fa048bc6b6bef40b938ef4e142077a100698f02a4030a908e28403aa100e98c02a40b0a90ae2840baa100e98e02a4070a909e28407aa10031f15d5bbb516c115bc536512eb68b1de249b153ec12bbc59effc7d5b455aa2daf402d50530bd2ad968c1b97d3ca2fe92fa8ad837b41adf4fdbe2eae3fafd912db40eed912ff167b8d6eda127b8daedaa2eff6c35d5b621b4785f7ba39aa837d5b9b284791d17eb1cf5046fb0c65b4df2f322ae7a8f03e0e19ed0797d14e14191d10158632aa3094d101bfc8682747852b386474005c46bb50647450541acaa8d2504607fd22a35d1c15aee490d1417019ed4691d121516528a32a43191df28b8c767354b88a434687103f3810cd51e32d1c6ff214f005531ce0fe3cba7a3a7874a52fae789a65910e237e6ee0297118f2935ea28ce34d9e41d4d361f10ccf47bd202f8fe659b8232c9ff52a44feacd711ce997d3438b3f5c515475916e918e2cc3e228e617ed6eb18e20da5911cf3682bc79b1c47b690c739c7d1b3c171a42fae789665914e208ea3e3e244005bc8e710f574423cc763218b02d7429e64b19045c816f224e7cc7e3e38b3f5c515cfb32cd229c4997d529cc2b490a790fbad82b3df5e08f69bbeb8e20596453a8dd86f15e274007ba41711f5745abcc8e3911605ae47122c1e6911f2cc169c33db1b9cd9fae20a2fcb229d419cd9429cc1f4486790fbad92b3df5e0af69bbeb8e22596453a8bd86f95e26c007ba49711f57456bccce3919604ae473ac7e2919620cfec739c33fb95e0ccd61757bcc2b248e71167f639711ed3239d47eeb72ace7e7b35d86ffae28a575916e90262bf55890b01ec915e43d4d305f11a8f475a1ab81ee9228b475a8a3cb32f72ceec4bc199ad2faeb8c4b248971167f6457119d3235df6fbd55c62abbc946aaf4cfbb49ba95e17576e26e2f3f879c31fe5f519d59b90a8de8244f53624aa772051bd0b89ea3d4854ef43a2fa0012d58790a83e8244f53124aa4f20517d0a89ea3348549f43a2fa0212d59790a8be8244f53524aa6f20517d0b89ea3b4854df43a2fa0112d58f90a87e8244f53324aa5f2051fd0a89ea374854bf43a2ba0a89ea1a24aa3f10517995104c580a26ac504c586198b0c231614560c2aa8109ab2626ac5a0cb08cff772b516eb15d1e00ed90e949992a64aa94a94aa63d32bd21d39b32bd25d3db32bd23d3bb32bd27d3fb327d20d387327d24d3c7327d22d3a7327d26d3e7327d21d397327d25d3d7327d23d3b7327d27d3f732fd20d38f32fd24d3cf32fd22d3af32fd26d3ef325d95e99a4c7f50a279af6545cba15a0ed372b89623b45c43cb35b55c4b1e7f7995da5ee596bf3a33db22ff95d7b5efaa5dfd5d75bccaada09fd9f02a75990f9491b8dd867858fe84d8c4d3fbb7338f242c76f530076e7d4c580d306135c484d5081356634c584d306135c584d50c1356734c582d3061b5c484d50a13566b4c586d3061b5c584d5ceef3bc97ab415aaafed8b1a68b9a1961b69b9b1969b68b9a9969b69b9b9965b68b9a5965b69b9b596db68b9ad96db55efb5eef02a77faa33c7761ae5a7b4c581d306175c484d5091356674c585d306175c584d50d1356774c583d3061f5c484d50b13960913961913562426ac28c4879b65f4589287de32407af4bc9c1e2af3f073f9e397257d8715cdf28b8ecb58dec585d9783198b07a63c2ea03d9c774e05897875f2c66d9e33061f5c584d50f13567f4c5803fc714183af3dadb0501b88482d9485da20446a612cd4e211a985b3504b40a416c1422d11915a0d166a4988d4e8113d0bb9644c72ed59c80dc624d781855c0a26b98e2ce4866092ebc4426e2826b9ce2ce4866192ebc2426e3826b9ae2ce4466092ebc6426e2426b9ee2ce4466192ebc1426e3426b99e2ce4c66092ebc5422e15939c8985dc584c72661672e330c945b2901b8f492e8a85dc044c72d12ce42662928b61213709935c6f16729331c9f561213705935c2c0bb9a998e4e258c84dc324d79785dc744c72fd58c8cdc024d79f85dc4c4c720358c8cd4224579385da6c446ab558a8cd41a4569b855a1a22b55b58a8a52352abc3422d0391daad2cd43211a9d565a1a62252bb8d855a1622b5db59a8652352abc7426daeefd48aaf8474f32a03bdca20af12ef5512bc4aa25749a2a3753a80a6635a3acca4233f3a18a3e3233a64a1a3087a604f8fb5e9e12f3d22a50789f4b88d1e4ad1a31b7ac0418f0168b34c5b4ada78d1f6844c3c595d3284649bc85ed08f61fa7145639dc61f8d096a27921d2d0fd1f80f", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } ] diff --git a/yarn-project/noir-contracts/src/examples/non_native_token_contract.json b/yarn-project/noir-contracts/src/examples/non_native_token_contract.json index 45076f69c67..e8768fde684 100644 --- a/yarn-project/noir-contracts/src/examples/non_native_token_contract.json +++ b/yarn-project/noir-contracts/src/examples/non_native_token_contract.json @@ -228,11 +228,7 @@ "kind": "field" } ], -<<<<<<< HEAD - "bytecode": "ed9d777454c5fbc673c982d7de2bbd77c8a6879ed07bef3565131642129250adb1779309202252430769f60a2a8a3817e935f45e45444444fcbdf702bf2ff88517489e85f78fafe7cc7b84e79c87bb9f9dbd7b77e699991196eb4cae7fb58c795189d1b1fda39287361a94145b3f3a3131634abbc8568d1b662997c1880539b11027163619b1082716e5c4629c589c134b7062494e2cc589a539b10c2796e5c4729c589e132b7062454eacc4899539b10a2756e5c46a9c589d130338d1cd89819c18c489c19c18c289a19c18c689e19c18c18935cc8c9991a9def4be033ce9ded8eccc6cb5b15e50406850b0272cd0e30e7247070446c48487040487c48486bbc3dd21e1217181e141419ef0e0f0b0889888b08008777090c71d1f1211141fe0fce78e208fc0f8d0e0fc78d438771df9f108b08c5f36d60bc8e77f97c5635f963baf2f2dec82475cdef18443f01cf3211efbb202f2f2d2422ef608c81b9e50089e5f7d8cc7beacf0eb7d6941fff28888bf7e3cc1103cc76f001ebaace0f8eb7969eecb79845d1f9e40089edf6e0c1ee7b242aef5a555bf9247f0b5e30980e0397103f1d89715702d2fad2ae711706d78aa41f0fc7e83f1d897157bb59756f96a1e6157c7530582e7e44dc0635f5620f7d22a5e8b47188fa71204cf1f37098f7d5961577a69e5afd523ecca782a40f09cba8978eccb0abfdc4b2b7b3d1ee197c7530e82e7cf9b8cc7beac807fbfb4d2d7e9111affdf78ca40f09c1680c7beac808b5f5ac9bc78045e8aa71404cf5f42f0d8971578e1a515cfab47f07ff09480e03923084f90273edebe3277d17c799cc3530c82e76f5fe0c9a7a19bde3588cbdf10446765223a0d71f90b82e81f99884e415cfe44202ae02713d14988cb1f1044864c4427202ebf4310159089e838c4e53708227f99888e415c7e852072497b26a2a722771108a05f20800a8aec43055c10978210448564222a0071f18720ba4526223f888b014164cabc599f85b8fc034174abcc5e64425c6e8520ba4d26a24210975b20886e9788e876c04b2b0c817c87cc1e741bc4e576480f42209ad1c09bea894df70ef664cce890dcc2d32e3ace3b343b3b330bd199f27f7db97e250a17295aac788992a54a97295bae7c858a952a57a95aad3a4d5107058784868547d4b00c3f26dd53938bfed4e2c4da9c588713eb72623d4e8ce4c4284eaccf890d38b1212736e2c4c69cd884139b7262334e6cce892d38b12527b6e2c4d69cd88613db72623b4e6ccf891d38b1232776e2c4ce9cd88513bb7262371f04ecba020276dd2037e1ca1203769d0101bb2e103c552406ec3a0202769d2078aa4a0cd8b50704ec3a40f0549318b06b0b08d8b583e0a92e3160d71a10b06b03c113203160d71210b06b05c1e39618b06b0e08d8b580e0099418b06b0a08d83583e0099218b06b0c08d83581e0099618b06b0808d83582e0099118b0ab0f08d83580e0099518b08b0404eca22078c22406ecea020276f52078c22506ec6a03027675207822648e2c87435c2220886ac844140a71098320aa29135130c4250482a8964c448110972008a2da321105405cdc1044756422aa0671a90e41545726a22a1097aa1044f52406ec6a41005586008a94d987ea415c222188a26422aa0371a90b41545f2622cc07ad3604510399886a405c6a4210359489a801c4a5210451239988a2202ef521881a4b447407e0a5d584406e22b3073582b83486f4a026c2037677400276356bd5ae53b75e6454fd060d1b356ed2b459f3162d5bb56ed3b65dfb0e1d3b75eed2b51b1fb0ebce457f7a70624f4eecc589bd39b10f274673620c27c672621c277a38319e131338b12f277a39b11f27f6e7c4444e1cc089499c98cc89299c3890135339318d13d3397110270ee6c4219c3894138771e2701f04ec86010276c32137e1048901bb218080dd50089ebe120376830001bbc1103c5e8901bb3440c02e1d82a79fc480dd4040c02e1582a7bfc4805d3220609702c193283160370010b04b82e019203160d71f10b04b84e0499218b0f3020276fd2078922506ec120001bbbe103c291203761e40c02e1e8267a0c4805d2c20601707c1932a3160170d08d8c540f0a4490cd8f50604ecfa40f0a44b0cd8f50404ec7a41f00c9239b29c0e71190441345826a254884b1a04d110998852202e03218886ca449404714986201a26135122c4650004d1709988fa415cfa43103d2e13515f888b1782e8098901bb1e10400910404fcaec434f405c9e84207a4a26a2e11097c721889e96896828c4651804d13332110d86b80c8120ca9089e819884b0604d1b332113d0571791a82e8398988ee06bcb4ee10c8cfcbec41cf425c9e83f4a0e78507ecee8604ecbaf7e8d9ab779fe898d8384f7c425f6fbffe890392925306a6a6a50f1a3c64e8b0e176c0ee92373a0b0037df3f593c1efc45e5fb47424c18fea2f2fd601e1480bfa87c3f0a87b92f93189bdabe49646048a8caf58b538f9bea09533d69aaa74c55c35411a60a375598a9424d1562aa605305992ad0546e530598aabaa9aa99aaaaa9aa98aab2a92a99aaa2a92a98aabca9ca99aaaca9ca98aab4a94a99aaa4a94a98aab8a98a99aaa8a98a98aab0a9ba99aaaba9ba98aab3a93a99aaa3a93a98aabda9da99aaada9da98aab5a95a99aaa5a95a98aab9a99a99aaa9a99a98aab1a91a99aaa1a91a98aabea9a24c1569aa7aa6aa6baa3aa6aa6daa5aa6aa69aae1a61a66aaa1a61a62aac1a61a64aa7453a5992ad554034d9562aa645325996a80a9124dd5df54fd4ce535555f5325982ade541e53c5992ad65431a68a36551f53f536552f53f534550f537537e933fcb47e4667e867f573fa79fd827e51bfa45fd6afe857f56bfa75fd867e53bfa5337596563a5b8fd023f528fdb61eaddfd163f4bb7aac7e4f8fcb981695ea4d4cf4268ccca237c19b9490e8c1dca1eeccff1d2a2b634a646a6af4b05cbffbf4783d414fd493f4649da3a7e8a97a9a9eae67e8997a969eade7e8f7f55c3d2f7374c6e496c98315ddb4a6d44f4e4a4b577e5980dbf8ac46c9a91e6f4292dd4fb3e72578d25bb8e96e1ed8d29396169de0c9ca98d1c4139de25ca72a705f56c69c769e046f5aba27b569529c67a871ee92fc0b9cbf34ff8c9c668306a464153af7673f23a77d7a72caa28bbf2ba6b71d949ceef524a58fc4bc117a4afe21646766e6d9c47de17ff4023d7f119316d5f34b70ea02bd15370e73e16ea6a72008cf57083ad8470e78379a7a73ba91fbdf7fa13fd00bd96eb4b01ea77ea0bff241379a8a20bc5021e8481aeebcc007b139b59e8778a33e04e0f1d55726e2e29c4b1a9092e8d11f658ec898617fd9348d6f954cdf85fe17be158dfc7f2bba33e6447993a2538735f27a12e35aa78cf09bdcc03bd8f073becdf2f365f19f7fe0e23e98958d80ab3f82bc491fe7bf17fae2c57d9c89fee08ba405b91d214e7ed11311b7a34f24df8e3e41de8e3efddfede852b8fa53c89bf499c4dbd127fa3399b7a3cf7c713bcaf7554d46dc4a3e870c7c4e96385baedf43001a070194230bd0f91ef42e20a7a9c742004d1103e8a278ad7e0790f3d5632080a68a00f4af78b67e1b9013d7a32180a6dd6c40978bf7eb918075067a1404d0f49b0ae80acb4334629d8a1e010134e3a601629617e92cc03a27ad208066de144057599ea6df02ac93d3991040b36e38a06b58dea8df00acb3d46f4200cdbea180ae7179ac7e0db04e57bf0e0134e78601ba8ee5d5fa15c03a6ffd2a04d0fb3704d0752ecfd72f01f609d02f4300cdf535a0bc6cefa05f00ec33a15f84009ae7534079dc1e443f07d8a7443f0f0134df6780f2b1bd8cce00ec73a39f85005a20330a371fe2b2008268a14c4473212ef320883e9089680ec4e57d08a20f65229a0571990d41f4914c4433202e3321883e9689681ac4653a04d12732114d81b84c8520fa5426a2c910971c08a2cf6422fa14e2f21904d1e732117d0c71f90482e80b99883e84b87c0441f4a54c440b212e1f40107d2513d1971097af2088be9689e87388cb1710448b7c8128bf1b113f0dd810596316a72e96d985be86b82c8274a1c592c37a9f23c37a5ffc2fac77295cfd05e44dfa526258ef73fda5ccb01e9a1664fda3cef7e3883bf832eb53a6b7f1c47952d33c49d94ae9aff45975973eeba7f4d77a910ff28688df88fa6b8489e85bea62e42df59bffdd522f85abbf81bc49df4abca52ed6dfcabca52268318bebbee34e03d14b58f57b56fd815597b2ea8facba8c557f6255cdaa16ab2e67d59f597505abae64d555acba9a55d7b0ea5a565dc7aaeb597503ab6e64d54dacba99557359750bab6e65d56dacba9d5577b0ea4e56dde5832379f44ec04f61bd0bf21b6d87c44379f476446c620704d04e89c7f2e8ad88e0cd3608a05d120fe6d1b988e8d61608a0dd128fe6d19b10e1bfcd10407b241ecea33720e2a31b2180f64a3c9e47af430490d74300ed9378408f5e8388b0af8500da2ff1881ebd0ab108623504d0018987f4e8158865342b21800e4a3ca6472f472cc4fa1902e890c4837ab4462ce5b320800e4b3caa472f432c06fd0902e888c4c37af452c472e21f21808e4a3cae477f8f5890fe0304d02f3227a58f425c7e81203a2613d16188cb1108a25f65223a0871390441745c26a2fd1097031044bfc944b417e2b20f82e8844c44bb212e7b20887e97896827c40533847f52e416444b20843063f87fc8ec4427212e7f40109d9289e804c4e57708a23f65223a0e71f90d82e8b44c44c7202ebf4210fd2513d16988cb5f10446764223a0571f91382e86f8988f47844c4f13b08e6b332fbd01988cbdf903e7456f8993d7a3ce4d01efd9d5ea2bfd73fe8a5fa47bd4cffa4b5b6f472fdb35ea157ea557ab55ea3d7ea757abddea037ea4d7ab3ced55bf456bd4d6fd73bf44ebdcb3ed4870908ed66e3437b58752fabee63d5fdac7a80550fb2ea21563dccaa4758f528abfec2aac758f557563dceaabfb1ea0956fd9d554fb2ea1fac7a8a55ff64d5d3acfa17ab9e61d5bf59f52cabfec3a9f429e36583970bf0b2bf0f627cf48f02727c746d88bbb97f5189413e7a5701493e7af321888a898cf29d4544f9fe81002a2e32ca770611e5833c32f9971019e53b8d88f2417ebaf9971419e53b8588f2417eb8f9971219e53b8988f2410622fd4b8b8cf29d4044f920c390fe654446f98e23a27c904148ffb222a37cc710513ec810a47f399151bea388281f2423e25f5e6494ef3022ca074988f8571019e53b8888f241f221fe154546f9f623a27c9074887f259151bebd88281f241be25f59e400b67f25884b6508a22a32115580b8548420aa2a135139884b7908a26a32119581b8948520aa2e135129884b6908a20099884a405c4a4210b965222a0671290e41142832cab70742a828845090cc4e1408710982200a96892800e2e286200a9189a81ac4a53a0451a84c4455202e552188c264220a85b884411085cb44140c710981208a1019e59b8088f2411692f8d790d987c2212e11903e54437a946f0226cab75befd17bf53ebd5f1fd007f5217d581fd147f52ffa98fe551fd7bfe913fa777d52ffa14fe93ff569fd973ea3ffd667f53f96e16719866514b00c7f3ece67192e3e485490970bf1f22dbc6cf2f2adbc7c1b2fdfcecb77f0f29dbc7c172fdfcdcbf7f0f2bdbc7c1f2fdfcfcb0ff0f283bcfc102f3fcccb8ff0f2a3bcfc182f17e6e522bc5c94978bf172715e2ec1cb2579b9142f97f649d4af1424ea87196bea2a33ea570212f5c38c35759318f5a38f0d20eb479f2e08a2ee12c37e745f02a4fde8f60541d44362dc8f6efc80bc1f7d3f4010f59418f8a36f5640e28fbe8021887a498cfcd1a30b20f3474f381044bd2586fee8d91090faa3474808a23e12637ff4f00dc8fdd1333a0451b4c4e01ffdba0124ffe8471004518cc4e81ffd7c0464ffe857260451acc4f01ffd3e07a4ffe8673c04519cc4f81f0d8000f27f344e0241e4911800a4112640029006a22088e225460069080f9001a4913e08a2049943dff110970408a2be3211c5415c3c10445e998862202eb11044fd6422ea0371898620ea2f13512f884b6f08a24499887a405c7a42100d9089a81bc4a53b045192c41020cd7c42107585204a96d98b92202ec9104429321125425c0640100d9489a81fc4a53f0451aa4c447d212e5e08a234998852212e691044e93211a5405c0642100d1299029c88786d860bc279b0cc4e940e711904e94483a5c70027426280d4a3e8719446ea68988d8634693c92c67e69e09606c969849b6613682a80a65d68ce84e6a768728926f268168e663c69ba92a686695e97e6d06902dc328a584651cb286619c52d836c4b5a4629cb287db58860193e80549697cbf172795eaec0cb1579b9122f57e6e52abc5c9597abf172755e0ee065372f07f272102f07f372082f87f272182f87f372042fd7e0e59abc5c8b976bf3721d5eaecbcbf578399297a378b9be4f2282519088607dc837c1489911c17a9088602404d1289911c13a9088605d08a2b76546046b412282b5218846cb8c08d68044046b4210bd233322180e890862d6ef8c9119110c854404312b09df9519110c864404312b09c7ca8c080642228298b5f1efc98c080640228298b5f1e3644604ab41228298b5f1e3654604ab40228298b5f1136446042b41228298edcb26ca8c085680440431db974d9219112c07890862b62f9b2c73587c12c4653204518e4c4413202e90291aff2932118d83b88c87209a2a13d15888cb7b1044d364221a037179178268ba4c44a3212eef4010cd90896814c4e56d08a299322382652188464210cd92d98b66425c664110cd9689683ac4650604d11c9988a6425ca64110bd2f13510ec4650a04d15c9988de87b8cc85209a2713d16c88cb1c08a2f922238293201141cc6ee70b6476a2791097f9904eb4407a447012282258861e4769a48e86d9684893c62369ec97066e69909c46b8693681a60268da85e64c687e8a269768228f66e168c693a62b696a98e675690e9d26c02da39665d4b68c3a9651d732ea5946a465445946fdab45041bf001a486bcdc88971bf372135e6ecacbcd78b9392fb7e0e596bcdc8a975bf3721b5e6ecbcbed78b93d2f77e0e58ebcdc89973bf372175eeecacbdd78b93b2ff7e0e59ebcdc8b977bf3721f5e8ee6e5185e8ef5494430061211c42c795e293322d8071211c42c795e253322d80b1211c42c795e2d3322d8031211c42c795e233322d80d1211c42c795e2b3322d8051211c42c795e273322d8091211ec0c41b45e6644b0032422d811826883cc88603b4844b03d04d1469911c1369088605b08a24d322382ad2011c1d610449b6546045b4022822d2188726546049b412282cd2188b6c88c08368144049b42106d9519116c048908368620da2673587c2bc4651b04d176998872212e5b208876c844b409e2b2198268a74c441b202e1b218876c944b40ee2b21e8268b74c446b202e6b2188f6c844b40ae2b21a8268afcc88604308a2951044fb64f6a2bd10977d1044fb6522c21c2cb90782e8804c443b212ebb20880eca44b41de2b20382e8904c4407212e8720880ecb44b41fe2720082e888c8882064159fd100c2f9a8cc4e7418e27204d2898e4a8f084e0645041bd0e3288dd4d1301b0d69d278248dfdd2c02d0d92d30837cd26d054004dbbd09c09cd4fd1e4124de4d12c1ccd78d274254d0dd3bc2ecda1d304b865f4b08c9e96d1cb327a5b461fcb88b68c18cb88bd5a44308e0f207978399e971378b92f2f7b79b91f2ff7e7e5445e1ec0cb49bc9ccccb29bc3c90975379398d97d37979102f0fe6e521bc3c949787f1f2705e7e9c979fe0e52779f9295e7e9a979fe1e50c5e7e96979ff34944f0594844f039c43781eb4e9911c1672011c10c08a2bb6446049f8244049f8620ba5b6644f0094844f04908a27b644604874322828f4310dd2b3322381412111c0641749fcc88e0604844700804d1fd322382e9908820641379d703322382a9908820e43c0bd78332238229908820e43c0bd74332238249908820e48426d7c332238289908820e48426d723322382fd201141c8094dae47654604fb42228290139a5c8fc98c08c64322829053745d85450e8bbb1e83b81486202a2213d12310974721888aca44f410c4e56108a26232113d0071791082a8b84c44f7415cee87202a2113d13d10977b21884aca447417c4e56e08a2523223821e08a23b21884acbec45a5202ea52188cac8445402e2521282a8ac4c44c5202ec52188cac9445404e2521482a8bc4c44e5202e90cdf05d15642282ec6ee72a0b4154516444300712118c8370ae24b3135580b840cee58020f26944300714118ca3c7511aa9a361361ad2a4f1481afba5815b1a24a7116e9a4da0a9009a76a139139a9fa2c9259ac8a359389af1a4e94a9a1aa6795d9a43a70970cb78c2329eb48ca72ce369cb78c632322ce359cb78ee6a11c1e7f900d20bbcfc222fbfc4cb2ff3f22bbcfc2a2fbfc6cbaff3f21bbcfc262fbfc5cb99bc9cc5cb8a97b37979042f8fe4e551bcfc362f8fe6e57778790c2fbfcbcb6379f93d5e1ec7cbe37979022f4fe4e549bc3cd92711c1499088202495ef6a2a332238011211849cade36a263322380e1211849cade36a2e332238161211849cade36a21332238061211849cade36a293322381a1211849cade36a253322380a1211849cade36a2d332238021211849cade36a233322a82011c16c08a2b6322382999088601604513b9911c1372111c1b72088dacb8c08be0e8908be0141d4416644f0554844f03508a28e3223822f432282af4010759219117c1112117c0982a8b3cc61f14e1017c806d4ae2e32117580b84036a076759589a81dc405b201b5ab9b4c446d202e900da85ddd65226a0571816c40edea2113510b880b64036a574f99889a415c201b50bb7ac98c08be004104d980dad55b662fea0571811c12e4ea2313510f880be4902057b44c44dd202e9043825c3132117581b8400e0972c5ca44140371811c7be78a9389a80fc40572ec9dcb2332220839ffd6781ec2395e6627c2e41f3d904e142f3d22381f14117c9e1e4769a48e86d9684893c62369ec97066e69909c46b8693681a60268da85e64c687e8a269768228f66e168c693a62b696a98e675690e9d26c02d63ac65bc6719e32c63bc654cb08c899631c932265f2d2298c30790a6f0f2545e9ec6cbd37979062fcfe4e559bc3c9b97e7f0f2fbbc3c9797e7f1f27c5e5ec0cb0b79f9035efe90973fe2e58f79f9135efe94973fe3e5cf79f90b5efe9297bfe2e5af7979112f2fe6e56f78f95b9f4404bf814404bf857c13bc203322b80812115c0c41f4a2cc88e0579088e0d710442fc98c087e0189087e0941f4b2cc88e0679088e0e71044afc88c087e0289087e0a41f4aacc88e0479088e0c71044afc98c087e0089087e0841f4bacc88e0024844702104d11b322382f3201141c8688deb4d9911c1f72111c1b910446fc98c08ce864404e7401065ca8c08ce84440467411065c98c084e874404674010299911c1a99088e03408a26c99c3e20ae2825917304226a24c880b665dc0489988de84b860d6058c9289e875880b665dc0db3211bd0a71c1ac0b182d13d1cb1017ccba807764227a11e282591730466644700a04d10b1044efcaec4563202e98b5db6365221a0d71c1acdd7e4f26a2511017ccdaed7132118d80b860d66e8f9789681cc405b31bc9049988c6425c30bb914c141911848ccb1b3910ce936476a2091017ccc64893a447041782228239f4384a237534cc46439a341e4963bf34704b83e434c24db309341540d32e346742f35334b9441379340b47339e345d4953c334af4b73e834016e195f58c69796f195657c6d198b2c63b1657c6319df5e3e2238b57d93c8c09050956bf829bdcb547a27b51dd4b653db466d2bb52dd472a96da6b689da466a1ba8ada7b68eda5a6a6ba8ada6b68ada4a6a2ba8fd4c6d39358b9aa6f613b565d47ea4b694da0fd4bea7b684da77a6b20c7fbb14b08b61173ffafb7fa89da5f637b533d4fea2769ada9fd44e51fb83da496abf533b41ed376ac7a9fd4aed18b55fa81da57684da616a87a81da47680da7e6afba8eda5b687da6efb1f2d6d9752762969971276296e976276296a972276296c97c7ecf2a85d1eb1cbc37679c82e0fdae501bbdc6f97fbec72af5deeb1cbdd76b9cb2e77dae50ebbdc6e97dbec72ab5d4cbbdc62974276296817975deadb25ca2e9176a96797ba76a96397da76a965979a76a9619708bb84db25cc2ea17609b14bb05d82ec126817b75d02ec52dd2ed5ec52d52e55ec52d92e95ec52d12e15ec52de2ee5ec52d62e65ec126b9718bb44dba58f5d7adba5975d7adaa5875dbadba59b5dbadaa58b5d3adba5935d3adaa5835ddadba59d5ddadaa58d5d5adba5955d5adaa5855d9adba5995d9adaa5895d1adba5915d1adaa581e99cc7eb9cd9eb9cebeb9cfdeb9c0fec9c21ec9c33ec9c45ec9c57ec9c69ec9c7bec9c8dec9c9fec9cb1ec9cc3ec9cd5ec9ce7ec9cf9ec9c0bed9c1ded9c2fed9c41ed9c53ed9c65ed9c77ed9c89ed9c9bed9caded9cbfed9cd1ed9ce3ed9cf5ed6c06e86c18e86c2ae86c3ce86c4ee86c60e86c72e86c84e86c96e86ca8e86cbae86ccce86cdee86cf0e86c02e96c14e96c26e96c38e96c4ae96c5ce96c6ee96c80e96c92e96ca4e96cb6e96cc8e96cdae96cece96cfee96c10ea6c22ea6c34ea24119db4a2936874528f4e32d2494f3a094b2785e924359d34a793f87452a14e72d449973a095427a5ea24599db4ab93887552b34eb2d649df3a095d27c5eb247d9d34b093187652c54ef2d849273b096627e5ecdc47bfb38c2596f1bd65fc60194b2de347cb5866193f5986b60ccb32965bc6cf96b1c232565ac62acb586d196b2c63ad65acb38cf596b1c132365ac626cbd86c19b996b1c532b65ac636cbd86e193b2c63a765ecbaf4eb1632966deccef73748880f9e028c5d9017b707f214b058d88392fbdc8bdb915fd06edb652704d1378210b903fefffddf961f44ee0b2edb2188be1582c87df11fe836935744ee8b5db642107d270091fbdf7f41f7e3bc2072ffdb25178268c94d46e4bedc5fd217d7f522725fce651304d1f7371191fb4a027dc35f0f22f7955c364010fd709310b939911e85ae15919b73590741b4f42620725fcd919e19af0591fb6a2e6b20887ebcc188dcd7e2480fd75743e4be1697551044cb6e2022f7b53ad2af100e91fb5a5d564010fd748310b9afc7917eae5d0991fb7a5c964310e91b80c87dbd8ef4bbf67288dcd7eba221882c1f2372e7c5910600fe8dc89d1797651044cb7d88c89d57471a29b918913baf2e4b21887e963925b21ce2f23304d10a998834c4c582205a2913d13288cb4f1044ab64225a0a71f9118268b54c44df435c7e80205a2313d17710972510446b6522fa06e282d9fd619dcf10b9f3ee489348104498dd1fd6cbec45eb202eeb218836c844b406e2b2168268a34c44ab202eab218836c944b402e2b2128268b34c449b202e9b2188726522da0071d90841b4c52788dcf973b48cf38f8eeefcb92c8180de2ab317e5425cb6407a1102d17f0723a7b7f1c47952d33c49d9239465ecd667a9eea17a17353d4d9ff5a33fefb58c7d19d3a252bd8989de8491591953db7b9312123d985829d9e7ff8565668ecd98dc3279b032fc32a6d44f4e4a4b577e8845fcb31a25a77abc094936aaecb9b1a99ee8744fab418421deeb49cdca98d1c4139d12999a1a3d4c1530b232e6b4f32478d3d23da94d93e23c438d0b5702d94e604e9437293a755823af2731ae75ca88829323e3e20ab832725a2447c729ff823efdb7a6361c38283a31cddf9531b5d9a001294de355c1db723aa446a764e4d87fceba3da77d7a72ca225f24c6f6e7fbe504fbe2b20ee4fbb202d9cf62367deaf63b9fc50354ef38f7313c6819877cf8313c98ff9ee35cd38094448f651cce7cd7f79fc85969e9c9a9d1099e769ee838519f46e79517f43f4fa0e0f9cfc9ade7feec679cffbcfcff7ba904be97ffb924c48611b7435ed66168173d72e14ba380e1fbae3afb7c57ed4cf722cf257dd5df50ffd5572ffd73810b9755d0077db790dd77a9cb9eebbbae42e75014729d4752e87cdfbdedd2be9b9945fcfe0f", -======= - "bytecode": "ed9d777854c51ac673c88247bd36ec95de5b363df484de7baf299bb010929042078dbd9b4cc0828808217441a558110b2a3a0711e984de7b111111f17ee700f782173f207917be3faecf33df73e1bdcfcbd9dfce9e3d3bf3cecc18aba85fbe7ff5ccb95189d1b103a2928736ce488a6d109d989839a57d64eb268db295cb60c4a29c588c134b988c5892134b7162694e2cc3896539b11c2796e7c40a9c5891132b7162654eacc2895539b11a2756e7c41a9c18c0896e4e0ce4c4204e0ce6c4104e0ce5c4304e0ce7c4084eacc989b538b13627d6e1c4ba66e68cc8546f7abf819e746f6c4e568e5a573f28203428d81316e87107b9a303022362c2430282436242c3dde1ee90f090b8c0f0a0204f78707858444c445840843b38c8e38e0f89088a0f70fe73d7218fc0f8d0e0c278d43d7b1d85f108b08c5fd6d50f28e47f97c4635f96bba02fadd6798fb882e3a90dc173dc8778eccb0a28c84b8bb8d023a060786a42f0fcea633cf665855fed4b0bfb9b4744fcd5e30987e039710df0d06505c75fcd4b0bb99447d8d5e10985e0f9eddae0712e2be44a5f5ad03f79045f399e60089e93d7108f7d590157f2d2dc9c47c095e10984e0f9fd1ae3b12f2bf6722fadc6e53cc22e8f270082e7d475c0635f5620f7d2aa5d8947188fa73a04cf1fd7098f7d5961fff4d2aa5ca947d83fe3a90ac173fa3ae2b12f2bfc522fadd2d578845f1a4f65089e3faf331efbb202fefed22a5ca54768fcffe2a908c17346001efbb2022e7c69e50ae21178319ef2103c7f09c1635f56e0f99756a6a01ec1ffc5531681a7889f203c419ef878fbcadca50ae571164f69081ec317780a69e8a6770de2624010151189c8380371f90b82c85f26a2d310973f21885c32119d82b8fc0141545426a2931097df21888ac9447402e2f21b04d10d32111d87b8fc0a41644a7b26a2a722774908a05f20806e94f95464425c6e8420ba4926a26210971b20886e9689c80571290a41f42f99888a405cfc21886e9189e85f10975b20886e9589e82688cbcd1044b74944741be0a5958040be5d660fba15e2721ba40721104d6fe84df5c4a67b077b32a7774c6ee9691f1de71d9a9393958de84c85bfbe7cbf92254a962a5da66cb9f2152a56aa5ca56ab5ea35688231283824342c3ca266adda75ea5a861f93eea9c7457fea73622427467162034e6cc8898d38b1312736e1c4a69cd88c139b73620b4e6cc989ad38b13527b6e1c4b69cd88e13db7362074eecc8899d38b1332776e1c4ae9cd88d13bb73620f4eecc989bd38b1b70f0276bd0001bbde909b700d8901bb1e80805d4f089e008901bb6e80805d77081eb7c4805d1740c0ae2b044fa0c4805d2740c0ae33044f90c4805d0740c0ae23044fb0c4805d3b40c0ae3d044f88c4805d1b40c0ae2d044fa8c4805d2b40c0ae35044f98c4805d0b40c0ae25044fb8c4805d3340c0ae39044f84c4805d1340c0ae29044f4d8901bb4680805d63089e5a1203760d0001bb86103cb52506ec220101bb28089e3a3247966b435cea4010d59589a826c4a51604513d9988c2212e111044f565220a85b884411045ca44140c710981208a92892810e2120441d44026a200888b1b82a8a1c4805d7d08a01a10408d64f6a18610974610448d65228a82b83480206a221311e683160941d45426a2ba10977a1044cd64226a0a71690641d45c26a2c610972610442d2422ba1df0d2ea4120b794d9839a435c5a407a504be101bbdb2101bb7af523a31a346cd4b849d366cd5bb46cd5ba4ddb76ed3b74ecd4b94bd76edd7bf4ecd59b0fd8f5e1a23f7d39319a136338319613e338d1c389f19c98c089fd38d1cb89fd397100272672e2404e4ce2c4644e4ce1c4419c98ca89699c98ce89199c3898138770e2504e1cc689c3397104278ee4c4519c38da0701bb518080dd68c84d7880c480dd0840c06e24044fa2c480dd3040c06e3804cf408901bb218080dd50089e248901bb0c40c06e30044fb2c4805d1a2060970ec193223160370810b04b85e019243160970c08d8a540f0a44a0cd80d0404ec922078d22406ec0600027689103ce91203765e40c0ae3f044f86c4805d022060d70f8267b0c4809d0710b08b87e019223160170b08d8c541f00c9518b08b0604ec62207886c91c591e0a71190641345c26a2c110972110442364224a87b86440108d94892815e2920641344a26a21488cb2008a2d1321125415c9221881e95892811e2321082e8318901bbbe10400320803265f6a1c7202e9910448fcb44341ae2f22804d11332118d84b88c82207a5226a2e110971110444fc944f424c4e52908a2a765227a1ce2f20404d1331211dd0978697d20909f95d9839e86b83c03e941cf0a0fd8dd0909d8f5e91b1d131be7894fe8e7ed3f2071605272caa0d4b4f48cc143860e1b3e62e4a8d176c0eea2373a1b00b7d03f593c1efc45e942ff4a8809f3c15515fad13c28c0075755e8a7e130f7254263791d9a46068684aa7cbf38f5a8a9f463d432a93d6eaabaa6aa63aadaa6aa65aa9aa68a3055b8a9c24c156aaa1053059b2ac85481a6729b2ac054354c55dd54d54c55d554554c55d954954c55d154154c55de54e54c55d654654c55da54a54c55d254254cd5db54bd4cd5d3543d4cd5dd54dd4cd5d5545d4cd5d9549d4cd5d1541d4cd5de54ed4cd5d6546d4cd5da54ad4cd5d2542d4cd5dc54cd4cd5d4544d4cd5d8548d4cd5d0540d4c1565aa4853d537553d538d36d528538d34d508530d37d530530d35d510530d365586a9d24d9566aa54530d32558aa9924d9564aa81a64a34d50053f53795d754fd4c9560aa7853794c1567aa5853c5982ada547d4dd5c7a44fb27e423fa99fd24feb67f4b3fa39fdbc7e41bfa85fd22feb577496ced64ae7e8317aac7e55bfa65fd76fe871fa4d3d5ebfa527e8b7f544fd8e9e9439352ad59b98e84d189b4d6f84372921d183b951dd51f81b5576e694c8d4d4e861f97ec5f5649daba7e83c3d554fd3d3f50c3d53cfd2b3f5bb7a8e9eabdfd3efeb0ff4bcacd73327b74a1eace8de35a54172525abaf2cb06dccd67364e4ef5781392ecbe9a3337c193ded24d37f5c0569eb4b4e8044f76e6f4a69ee814e73a5591e2d999b3db7b12bc69e99ed46649719ea1c6d94bf22f72eed2fc33739b670c4cc92e76f6cf7e466e87f4e494c5177e654c6b97919ceef524a58fc5bc117a7ae121e4646515d8c47dfe7fe8057afe622634aae797e4d4057a136e38e63fb7b4e908c2f315820ef6c903de8d665c9f6ee4fefb5fe80ff542b61b2daccfa91fea453ee846331084172a041d49a39ee7f9207639d7f3106fd447003cbefaca445c9c73490353123dfae3ac3199d3ed2f9b66f1ad93e9bbd0fffcb7a251f86f4577e6ec286f5274eab0c65e4f625c9b94317e931b7a071b7eceb75961be2cfefb0f5cd807b3731070f5c79037e993c2f7425fbcb84fb2d01f7c91b420b723c4d11d7a0ae276f4a9e4dbd1a7c8dbd167ffbf1d5d0c577f0679931649bc1d7daa17c9bc1d2df2c5eda8d0573515712bf91c32fe3955e2a4b97e0701681204d0345980cef5a0b701714d3d110268ba184017a46cf55b80b8af9e0001344304a0bfa5b4f59b80b8b81e0f0134f37a03ba54ca5fbf01586ea0c74100cdbaae80fe6195887e0db05c45bf0e0134fbba01625619e9b180e54efa5508a077af0ba0cbac52d388e5727a0c04d09c6b0ee80a5639ea6cc0724bad2080e65e534057b84a56bf0258aeabb32080debb6680ae6295b57e09b0dc5bbf0c01f4fe35017495abf4f50b80ed02f48b10401ff81a50417679d0cf01b69bd0cf4300cdf329a002ee12a29f016c57a29f85009aef334085d865463f05d8ee463f0d01b44066226e3ec4650104d14299883e80b8cc8320fa5026a2f7202eef43107d2413d11c88cb5c08a28f65229a0d71791782e813998866425c6641107d2a13d17488cb0c08a2cf64229a0a71990641b44826a2cf202e8b20883e9789e81388cba710448b6522fa08e2f23104d11732112d84b87c0841f4a54c445f405cbe8420fa4a26a2cf212e8b2188bef605a2c2ee47ac9f006c8cac318b5497c8ec435f415cbe86f4a12592d37a9f23d37a8bff9fd6bb18ae5e0c7993be9098d6fb5c7f2133ad87a685590559e8e71177dc2516a84c6beb89f3a4a679927294d25fea33aab83ee3a7f457fa6b1f040e113f12f5570813d1b7d425c85bea37ffbfa55e0c577f037993be95784b5da2bf95794b45d06256d77dc79d0aa297b2eaf7acfa03ab6a56b5587519abfec8aacb59f527565dc1aa3fb3ea4a565dc5aaab59750dabae65d575acba9e5537b06a3eab6e64d54dacba9955b7b0ea5656ddc6aadb597507abee64d55dacbadb0747f3e85d88dfc2bb21bfd1764a3c9c47ef40e426764200ed92783c8fde8648de6c8700da2df1801ebd0591ddda0a01b447e2113d7a1322fdb7190268afc4437a743e223fba1102689fc4637af47a4402790304d07e8907f5e8b5880cfb3a08a003128fead1ab11ab20d640001d9478588f5e895847b30a02e890c4e37af40ac44aac9f21800e4b3cb0472f47ace5fb0902e888c4237bf432c46ad01f21808e4a3cb4476bc47a620b02e898c4637bf4f78815e93f4000fd227352fa18c4e51708a2e332111d81b81c8520fa5526a2431097c310442764223a0071390841f49b4c44fb202efb21884eca44b407e2b21782e877998876415c3043f8a744ee41b41442083386ff87cc4e740ae2f20704d16999884e425c7e8720fa5326a2131097df2088cec844741ce2f22b04d15f32119d81b8fc8540e4ef2713d16988cb9f10448644447a3222e2f81d02b37f11917dc8df0fe26240fa5011e167f7e8c990c37bf4777aa9fe5effa0b5b6f432fda35eae7fd22bf4cf7aa55ea557eb357aad5ea7d7eb0d3a5f6fd49bf466bd456fd5dbf476bd43efd4bbf46efb701f2620b4878d0fed65d57dacba9f550fb0ea41563dc4aa8759f508ab1e65d563acfa0bab1e67d55f59f504abfec6aa2759f577563dc5aa7fb0ea6956fd9355cfb0ea5f9c4abd9d970d5e2ec2cbfebcece2e5a2bc5c8c976ff041948ffe5140968fae0d72472f2531cc47ef2a20cd476f3e04516989713efad800f27cf4e982202a2331d047f72540a28f6e5f1044654546face20227d989f70e54446fa4e23227d981f70e54546fa4e21227d900149ff0a22237d2711913ec870a47f459191be1388481f6430d2bf92c848df7144a40f3214e95f5964a4ef1822d207c98af8571119e93b8288f4419222fe554546fa0e21227d909c887f359191be0388481f2425e25f5d64a46f1f22d207c988f8d79039905d1de2520382284026a2aa10976a10446e99882a435caa401005ca445411e2520982284826a2f210970a1044c132119585b89483200a9189a834c4a50c0451a8c848df5e08a152104261323b5128c4250c82285c26a260884b080451844c448110972008a29a321105405cdc1044b56422aa0971a90541545b26a270884b0404511d9191be5c44a40fb2a0c4bfaecc3e541be25207d287ea4a8ff4e562227d7bf45ebd4fefd707f4417d481fd647f4517d4cffa28feb5ff509fd9b3ea97fd7a7f41ffab4fe539fd17f59861fcdfc5b4611cbf0b70c976514b58c629671031fedb30c930f14ddc8cb37f1f2cdbcfc2f5ebe85976fe5e5db78f9765ebe83978bf3f29dbc7c172fdfcdcbf7f0f2bdbc7c1f2fdfcfcb0ff0f283bcfc102f3fcccb8ff072095e2ec9cba578b9342f97e1e5b2bc5c8e97cbf372059f44feca43227f98f1a65e32237f6521913fcc78536f9991bfd290c81f66bca98fccc85f4948e40f33e0d45762e48f6efc80cc1f7d3f4010454b0cfdd1372b20f5475fc010443112637ff4e802c8fdd1130e0451acc4e01f3d1b02927ff4080941142731fa470fdf80ec1f3da34310792486ffe8d70d20fd473f822088e225c6ffe8e72320ff47bf32218812240600e9f7392001483fe32188fa498c00d20008200348e32410445e8921401a6102a40069200a82a8bfc418200de101728034d207413440e6f0777f88cb0008a2449988fa415cbc10440365228a87b824401025c944140771f1401025cb441403718985204a9189a82fc4251a8268904c44bd212e7d20885225060169e61382a81704519acc5e940a714983204a97892805e2320882284326a224884b3204d160998812212e03218886c8443418e232048268a84c44e910970c08a2612293805310afcd30219c87cbec4443212ec3209d68b8f428e0144814907a143d8ed2481d0db3d190268d47d2d82f0ddcd220398d70d36c024d05d0b40bcd99d0fc144d2ed1441ecdc2d18c274d57d2d430cdebd21c3a4d805b065995b28cd29651c632ca5a4639cb286f19152e1711acc807902af172655eaec2cb5579b91a2f57e7e51abc1cc0cb6e5e0ee4e5205e0ee6e5105e0ee5e5305e0ee7e5085eaec9cbb578b9362fd7e1e5babc5c8f97ebf372242f47f172035e6ec8cb8d78b9312f37f14944b0312422d804f24df086cc8860434844b01104d1389911c1284844b00104d19b322382f52111c14808a2f1322382752111c17a10446fc98c08d6864404316b7826c88c08d684440431ab09df9619110c87440431ab0927ca8c088642228298f5f1efc88c080643228298f5f19364460403211141ccfaf8c932238201908820667d7caecc886075484410b385d9149911c1aa908820660bb33c9911c1ca908820660bb3a93287c5f3202e532188a6c944940b71814cd1f84f97896812c4653204d10c998826425cde81209a2913d10488cbdb1044b364221a0f71790b8268b64c44e3202e6f4210bd2b3322580982e80d08a239327bd1bb10973910447365229a0571990d41f49e4c4433202e332188de9789681ac4653a04d1073211bd0f71f90082689e4c4473212eef4110cd171911cc834404313b9e2f90d989e6415ce6433ad102e911c13c5044b0223d8ed2481d0db3d190268d47d2d82f0ddcd220398d70d36c024d05d0b40bcd99d0fc144d2ed1441ecdc2d18c274d57d2d430cdebd21c3a4d805b467dcb88b48c28cb6860190d2da3916534b68c26978b0836e50348cd78b9392fb7e0e596bcdc8a975bf3721b5e6ecbcbed78b93d2f77e0e58ebcdc89973bf372175eeecacbdd78b93b2ff7e0e59ebcdc8b977bf3721f5eeecbcbd1bc1cc3cbb1bc1cc7cb1e5e8ee7e5049f4404e3211141cc92e7553223827190882066c9f36a9911c118484410b3e4798dcc88605f484410b3e479adcc88606f484410b3e4799dcc88604f484410b3e479bdcc8860774844b00704d1069911c1ae9088603708a27c9911c1ce9088601708a28d3223821d2111c14e10449b644604db4322821d208836cb8c08b6854404db41106d9119116c0d8908b68120da2a3322d81212116c0541b44d6644b0392422d8028268bbcc61f16d1097ed10443b6422da0271d90a41b45326a24d1097cd1044bb6422ca87b86c8420da2d13d17a88cb0608a23d3211ad85b8ac8320da2b13d16a88cb1a08a27d322382cd2088564110ed97d98bf6415cf643101d90890873b8e45e08a2833211ed82b8ec86203a2413d10e88cb4e08a2c332111d82b81c86203a2213d10188cb4108a2a322238290557c465308e763323bd11188cb5148273a263d22381514116c4a8fa3345247c36c34a449e39134f64b03b734484e23dc349b40530134ed427326343f45934b349147b37034e349d39534354cf3ba34874e13e096d1d732a22d23c632622d23ce323c96116f1909978b08f6e303485e5eeecfcb037839919707f272122f27f3720a2f0fe2e5545e4ee3e5745ecee0e5c1bc3c849787f2f2305e1ececb237879242f8fe2e5d1bcfc282f3fc6cb99bcfc382f3fc1cb4ff2f253bcfc342f3fe39388e0d39088e033886f02d71d3223824f4222824f4110159719117c1c12117c0282e84e9911c1c72011c14c08a2bb644604474322828f4210dd2d3322381212111c0541748fcc88e0704844700404d1bd32238243211141c826f2aefb6446040743228290f32c5cf7cb8c08a643228290f32c5c0fc88c08a642228290139a5c0fca8c08a640228290139a5c0fc98c082641228290139a5c0fcb8c082642228290139a5c8fc88c08f687440421a7e8ba4a881c16773d0271290141545226a287202e0f4310959289e80188cb831044a56522ba0fe2723f0451199988ee81b8dc0b41545626a2bb202e774310959389a838c4e54e08a2f23223825e08a23b20882ac8ec45e5212e1520882aca445416e2520e82a8924c44a5212e6520882acb445412e2520a82a88a4c4495212e90cdf05d55652282ec6ee7aa0441544d6444701a2422d80fc2b9bacc4e5415e20239970382c8a711c169a088603f7a1ca5913a1a66a3214d1a8fa4b15f1ab8a541721ae1a6d9049a0aa069179a33a1f9299a5ca2893c9a85a3194f9aaea4a9619ad7a539749a00b78cc72c23d3321eb78c272ce349cb78ca329eb68c672e17117c960f203dc7cbcff3f20bbcfc222fbfc4cb2ff3f22bbc9cc5cbd9bcac78398797c7f0f2585e7e95975fe3e5d779f90d5e1ec7cb6ff2f2785e7e8b9727f0f2dbbc3c9197dfe1e549bc3c99977379790a2fe7f1f2549f4404f3201141482adfd54a664430171211849cade36a2d332238091211849cade36a23332238111211849cade36a2b332238011211849cade36a273322381e1211849cade36a2f3322380e1211849cade3ea203322f83a242208395bc7d5516644f0554844f03508a24e322382632011c1b110449d654604152422980341d4456644300b1211cc8620ea2a3322f8322422f80a0451379911c1172111c1972088bacb8c083e0f8908be0041d443e6b07877880b64036a574f9988ba425c201b50bb7ac944d419e202d980dad55b26a28e1017c806d4ae3e3211b587b84036a076f59589a82dc405b201b52b5a26a2d61017c806d4ae189911c1e72088201b50bb6265f6a218880be49020579c4c447d212e9043825c1e99887a435c208704b9e26522ea0971811c12e44a9089281ee20239f6ced54f26a238880be4d83b975764441072feadf12c84737f999d08937ff4423a517fe911c1f9a088e0b3f4384a237534cc46439a341e4963bf34704b83e434c24db309341540d32e346742f35334b9441379340b47339e345d4953c334af4b73e834016e19132de31dcb986419932d23d732a658469e654cbd5c44701a1f409acecb337879262fcfe2e5d9bcfc2e2fcfe1e5b9bcfc1e2fbfcfcb1ff0f23c5e9ecfcb0b7879212f7fc8cb1ff1f2c7bcfc092f7fcacb9ff1f2225efe9c9717f3f217bcfc252f7fc5cb5ff3f2125efe8697bff54944f01b4844f05bc837c1733223825f4322824b20889e971911fc121211fc0a82e8059911c1c59088e01710442fca8c082e8244043f87207a496644f0534844f03308a2976546043f8644043f81207a456644f0434844f02308a22c9911c1059088e04208a26c9911c17990882064b4c6a5644604df8744043f8020ca9119119c0b8908be074134466644f05d4844700e04d1589911c1599088e06c08a257654604674022823321885e93392cfe2ac405b32ee0759988c6405c30eb02de908948415c30eb02c6c944940571c1ac0b785326a297212e987501e365227a11e2825917f0964c44cf435c30eb0226c88c084e87207a0e82e86d99bd6802c405b3767ba24c44e3212e98b5dbefc844340ee28259bb3d4926a2d7212e98b5db9365229a0471c1ec46922b13d144880b66379229222382907179631a84739ecc4e940b71c16c8c94273d22b81014119c468fa3345247c36c34a449e39134f64b03b734484e23dc349b40530134ed427326343f45934b349147b37034e349d39534354cf3ba34874e13e096b1d832beb08c2f2de32bcbf8da329658c63796f1eda52382791d9a46068684aa7cc34fe9dda6d2bba8eda4b683da766adba86da5b685da666a9ba86da4964f6d03b5f5d4d6515b4b6d0db5d5d456515b49ed676a2ba8fd446d39b51fa92da36651d3d47ea0f63db5a5d4be339565dc60976276296a17975dfced52c42e865dfce8fffb17b533d4fea4769ada1fd44e51fb9dda496abf513b41ed576ac7a9fd42ed18b5a3d48e503b4ced10b583d40e50db4f6d1fb5bdd4f6d8ff4805bb94b74b39bb94b54b19bb94b64b29bb94b44b09bb3c629787edf2905d1eb4cb0376b9df2ef7d9e55ebbdc6397bbed72975deeb44b71bbdc6197dbed729b5d6eb5cb2d76f9975d6eb6cb4d76b9d12ea65d9ad8a5b15d1ad9a5a15d1ad825ca2e9176a96f977a76a96b973a76a96d975a76a9699708bb84db25cc2ea17609b14bb05d82ec126817b75d02ec52c32ed5ed52cd2e55ed52c52e95ed52c92e15ed92609778bb78ec12679758bbc4d825da2e7dedd2c72ebdedd2cb2e3dedd2c32eddedd2cd2e5dedd2c52e9dedd2c92e1dedd2c12eededd2ce2e6dedd2c62eadedd2ca2e2dedd2c22ecdedd2cc2e4d4de74c5ee7dc5ee76c5fe7fc5fe78c60e71c61e7ac61e73c62e7cc62e75c63e7ec63e77c64e70c65e79c65e72c66e7bc66e74c67e7dc67e76c68e7fc68e78c69e71c6ae7ac6ae73c6be7cc6be75c6ce7ec6ce77c6de70c6ee79c6ee72c6fe7bc6f67434067d34067634167f34167834267134367a34367334467c34467534567e34567734667034767934767234867b34867434967d34967634a67f34a67834b67134c67a34c67334d67c34d67534e67e34e67734f67035067935067235167b351278de824169d54a3937c74d2914e82d249593a494c27ade9243a9dd4a7930c75d2a34ec2d449a13a495527cdea245e9d54ac939c75d2b54e02d749e93a495e27edeb24829dd4b0932c76d2c74e42d949313b4967e75efa9d652cb58cef2de307cbd0966159c632cbf8d132965bc64f96b1c2327eb68c9596b1ca32565bc61acb586b19eb2c63bd656cb08c7ccbd868199b2c63b3656cb18cad96b1cd32b65bc60ecbd86919bb2c63f7c55fb9909148634fa1bf45427cf02460ec86bcb8bd90278125c21e96dc675fdccec28276db2ebb2088be1184c81df09ff77f7b6110b9cfbbec8020fa560822f7857fa0db4c4111b92f74d90641f49d0044eebfff05dd8f0b82c8fd77972d10444baf3322f7a5fe92beb8ae1691fb522e9b2088bebf8e88dcff24d037fcd52072ff934b3e04d10fd709919b13e951e84a11b93997f51044fa3a20725fce919e19af0491fb722e6b2188ac6b8cc87d258ef4707d3944ee2b71590d41b4ec1a22725fa923fd0ae110b9afd4652504d18fd70891fb6a1ce9e7da3f21725f8dcb0a08a2e5d70091fb6a1de977eda510b9afd6653904d14f3e46e42e88230d00fc1d91bb202ecb208856f81091bba08e345272212277415d3404d1cf32a74556405c7e86205a2913d17288cb4f1044ab64225a0671f9118268b54c441ae2624110ad9189e87b88cb0f10446b6522fa0ee2b21482689d4c44df405c303b40acf7192277c11d6912098208b303c40699bd683dc465030451be4c446b212eeb208836ca44b41ae2b2068268934c442b212eab208836cb44b409e2b21982688b4c44f910978d10445b7d82c85d3847cb38f7e8e82e9ccb5208e86d327bd11688cb56482f4220fadf70e4b4b69e384f6a9a2729678cb28c3dfa0cd5bd548b53d333f5193ffaf33ecbd89f39352ad59b98e84d189b9d99d7c19b9490e8c1444bc9bef02f2c2b6b7ce6e456c98395e19739a54172525abaf2436c2a32b37172aac79b9064a3ca99139bea894ef7b4ce200cf15e4f6a76e6f4a69ee894c8d4d4e861aa88919d39bbbd27c19b96ee496d9614e7196a9cbf12c8f626b3a3bc49d1a9c31a7b3d89716d52c6149d1c191757c49599db32393a4ef917f5e9bf95d768504674629abf2b33af79c6c09466f1aae84db91d53a3533273ed3f67df9cdb213d3965b12f1263070afd72827d7159070b7d5981ec6731873e75079ccfe241aab79ffd181eb28cc33efc181e2a7ccf71ae69604aa2c7328e64bde9fb4fe4ccb4f4e4d4e8044f7b4f749ca84fa3f3ca8bfa9f2350f4dce7e4c6b37ff633ce7d5efef35e2a81efe57f2f09b1dcff36c8cb3a02eda247cf7f6914317cdf55679debaa5de85ee4b9a8affa1bea7ffaeac57f2e72feb28afaa0ef16b3fb2e75d9b37dd755ec2c8a62ae73488a9debbb375ddc77b3b289dfbf01", ->>>>>>> feat: globalvars in public noir + "bytecode": "ed9d777854c51ac673c88247bd36ec95de5b363df484de7baf299bb010929042078dbd9b4cc0828808217441a558110b2a3a0711e984de7b111111f17ee700f782173f207917be3faecf33df73e1bdcfcbd9dfce9e3d3bf3cecc18aba85fbe7ff5ccb95189d1b103a2928736ce488a6d109d989839a57d64eb268db295cb60c4a29c588c134b988c5892134b7162694e2cc3896539b11c2796e7c40a9c5891132b7162654eacc2895539b11a2756e7c41a9c18c0896e4e0ce4c4204e0ce6c4104e0ce5c4304e0ce7c4084eacc989b538b13627d6e1c4ba66e68cc8546f7abf819e746f6c4e568e5a573f28203428d81316e87107b9a303022362c2430282436242c3dde1ee90f090b8c0f0a0204f78707858444c445840843b38c8e38e0f89088a0f70fe73d7218fc0f8d0e0c278d43d7b1d85f108b08c5fd6d50f28e47f97c4635f96bba02fadd6798fb882e3a90dc173dc8778eccb0a28c84b8bb8d023a060786a42f0fcea633cf665855fed4b0bfb9b4744fcd5e30987e039710df0d06505c75fcd4b0bb99447d8d5e10985e0f9eddae0712e2be44a5f5ad03f79045f399e60089e93d7108f7d590157f2d2dc9c47c095e10984e0f9fd1ae3b12f2bf6722fadc6e53cc22e8f270082e7d475c0635f5620f7d2aa5d8947188fa73a04cf1fd7098f7d5961fff4d2aa5ca947d83fe3a90ac173fa3ae2b12f2bfc522fadd2d578845f1a4f65089e3faf331efbb202fefed22a5ca54768fcffe2a908c17346001efbb2022e7c69e50ae21178319ef2103c7f09c1635f56e0f99756a6a01ec1ffc5531681a7889f203c419ef878fbcadca50ae571164f69081ec317780a69e8a6770de2624010151189c8380371f90b82c85f26a2d310973f21885c32119d82b8fc0141545426a2931097df21888ac9447402e2f21b04d10d32111d87b8fc0a41644a7b26a2a722774908a05f20806e94f95464425c6e8420ba4926a26210971b20886e9689c80571290a41f42f99888a405cfc21886e9189e85f10975b20886e9589e82688cbcd1044b74944741be0a5958040be5d660fba15e2721ba40721104d6fe84df5c4a67b077b32a7774c6ee9691f1de71d9a9393958de84c85bfbe7cbf92254a962a5da66cb9f2152a56aa5ca56ab5ea35688231283824342c3ca266adda75ea5a861f93eea9c7457fea73622427467162034e6cc8898d38b1312736e1c4a69cd88c139b73620b4e6cc989ad38b13527b6e1c4b69cd88e13db7362074eecc8899d38b1332776e1c4ae9cd88d13bb73620f4eecc989bd38b1b70f0276bd0001bbde909b700d8901bb1e80805d4f089e008901bb6e80805d77081eb7c4805d1740c0ae2b044fa0c4805d2740c0ae33044f90c4805d0740c0ae23044fb0c4805d3b40c0ae3d044f88c4805d1b40c0ae2d044fa8c4805d2b40c0ae35044f98c4805d0b40c0ae25044fb8c4805d3340c0ae39044f84c4805d1340c0ae29044f4d8901bb4680805d63089e5a1203760d0001bb86103cb52506ec220101bb28089e3a3247966b435cea4010d59589a826c4a51604513d9988c2212e111044f565220a85b884411045ca44140c710981208a92892810e2120441d44026a200888b1b82a8a1c4805d7d08a01a10408d64f6a18610974610448d65228a82b83480206a221311e683160941d45426a2ba10977a1044cd64226a0a71690641d45c26a2c610972610442d2422ba1df0d2ea4120b794d9839a435c5a407a504be101bbdb2101bb7af523a31a346cd4b849d366cd5bb46cd5ba4ddb76ed3b74ecd4b94bd76edd7bf4ecd59b0fd8f5e1a23f7d39319a136338319613e338d1c389f19c98c089fd38d1cb89fd397100272672e2404e4ce2c4644e4ce1c4419c98ca89699c98ce89199c3898138770e2504e1cc689c3397104278ee4c4519c38da0701bb518080dd68c84d7880c480dd0840c06e24044fa2c480dd3040c06e3804cf408901bb218080dd50089e248901bb0c40c06e30044fb2c4805d1a2060970ec193223160370810b04b85e019243160970c08d8a540f0a44a0cd80d0404ec922078d22406ec0600027689103ce91203765e40c0ae3f044f86c4805d022060d70f8267b0c4809d0710b08b87e019223160170b08d8c541f00c9518b08b0604ec62207886c91c591e0a71190641345c26a2c110972110442364224a87b86440108d94892815e2920641344a26a21488cb2008a2d1321125415c9221881e95892811e2321082e8318901bbbe10400320803265f6a1c7202e9910448fcb44341ae2f22804d11332118d84b88c82207a5226a2e110971110444fc944f424c4e52908a2a765227a1ce2f20404d1331211dd0978697d20909f95d9839e86b83c03e941cf0a0fd8dd0909d8f5e91b1d131be7894fe8e7ed3f2071605272caa0d4b4f48cc143860e1b3e62e4a8d176c0eea2373a1b00b7d03f593c1efc45e942ff4a8809f3c15515fad13c28c0075755e8a7e130f7254263791d9a46068684aa7cbf38f5a8a9f463d432a93d6eaabaa6aa63aadaa6aa65aa9aa68a3055b8a9c24c156aaa1053059b2ac85481a6729b2ac054354c55dd54d54c55d554554c55d954954c55d154154c55de54e54c55d654654c55da54a54c55d254254cd5db54bd4cd5d3543d4cd5dd54dd4cd5d5545d4cd5d9549d4cd5d1541d4cd5de54ed4cd5d6546d4cd5da54ad4cd5d2542d4cd5dc54cd4cd5d4544d4cd5d8548d4cd5d0540d4c1565aa4853d537553d538d36d528538d34d508530d37d530530d35d510530d365586a9d24d9566aa54530d32558aa9924d9564aa81a64a34d50053f53795d754fd4c9560aa7853794c1567aa5853c5982ada547d4dd5c7a44fb27e423fa99fd24feb67f4b3fa39fdbc7e41bfa85fd22feb577496ced64ae7e8317aac7e55bfa65fd76fe871fa4d3d5ebfa527e8b7f544fd8e9e9439352ad59b98e84d189b4d6f84372921d183b951dd51f81b5576e694c8d4d4e861f97ec5f5649daba7e83c3d554fd3d3f50c3d53cfd2b3f5bb7a8e9eabdfd3efeb0ff4bcacd73327b74a1eace8de35a54172525abaf2cb06dccd67364e4ef5781392ecbe9a3337c193ded24d37f5c0569eb4b4e8044f76e6f4a69ee814e73a5591e2d999b3db7b12bc69e99ed46649719ea1c6d94bf22f72eed2fc33739b670c4cc92e76f6cf7e466e87f4e494c5177e654c6b97919ceef524a58fc5bc117a7ae121e4646515d8c47dfe7fe8057afe622634aae797e4d4057a136e38e63fb7b4e908c2f315820ef6c903de8d665c9f6ee4fefb5fe80ff542b61b2daccfa91fea453ee846331084172a041d49a39ee7f9207639d7f3106fd447003cbefaca445c9c73490353123dfae3ac3199d3ed2f9b66f1ad93e9bbd0fffcb7a251f86f4577e6ec286f5274eab0c65e4f625c9b94317e931b7a071b7eceb75961be2cfefb0f5cd807b3731070f5c79037e993c2f7425fbcb84fb2d01f7c91b420b723c4d11d7a0ae276f4a9e4dbd1a7c8dbd167ffbf1d5d0c577f0679931649bc1d7daa17c9bc1d2df2c5eda8d0573515712bf91c32fe3955e2a4b97e0701681204d0345980cef5a0b701714d3d110268ba184017a46cf55b80b8af9e0001344304a0bfa5b4f59b80b8b81e0f0134f37a03ba54ca5fbf01586ea0c74100cdbaae80fe6195887e0db05c45bf0e0134fbba01625619e9b180e54efa5508a077af0ba0cbac52d388e5727a0c04d09c6b0ee80a5639ea6cc0724bad2080e65e534057b84a56bf0258aeabb32080debb6680ae6295b57e09b0dc5bbf0c01f4fe35017495abf4f50b80ed02f48b10401ff81a50417679d0cf01b69bd0cf4300cdf329a002ee12a29f016c57a29f85009aef334085d865463f05d8ee463f0d01b44066226e3ec4650104d14299883e80b8cc8320fa5026a2f7202eef43107d2413d11c88cb5c08a28f65229a0d71791782e813998866425c6641107d2a13d17488cb0c08a2cf64229a0a71990641b44826a2cf202e8b20883e9789e81388cba710448b6522fa08e2f23104d11732112d84b87c0841f4a54c445f405cbe8420fa4a26a2cf212e8b2188bef605a2c2ee47ac9f006c8cac318b5497c8ec435f415cbe86f4a12592d37a9f23d37a8bff9fd6bb18ae5e0c7993be9098d6fb5c7f2133ad87a685590559e8e71177f02516a84c6beb89f3a4a679927294d25fea33aab83ee3a7f457fa6b1f040e113f12f5570813d1b7d425c85bea37ffbfa55e0c577f037993be95784b5da2bf95794b45d06256d77dc79d0aa297b2eaf7acfa03ab6a56b5587519abfec8aacb59f527565dc1aa3fb3ea4a565dc5aaab59750dabae65d575acba9e5537b06a3eab6e64d54dacba9955b7b0ea5656ddc6aadb597507abee64d55dacbadb0747f3e85d88dfc2bb21bfd1764a3c9c47ef40e426764200ed92783c8fde8648de6c8700da2df1801ebd0591ddda0a01b447e2113d7a1322fdb7190268afc4437a743e223fba1102689fc4637af47a4402790304d07e8907f5e8b5880cfb3a08a003128fead1ab11ab20d640001d9478588f5e895847b30a02e890c4e37af40ac44aac9f21800e4b3cb0472f47ace5fb0902e888c4237bf432c46ad01f21808e4a3cb4476bc47a620b02e898c4637bf4f78815e93f4000fd227352fa18c4e51708a2e332111d81b81c8520fa5526a2431097c310442764223a0071390841f49b4c44fb202efb21884eca44b407e2b21782e877998876415c3043f8a744ee41b41442083386ff87cc4e740ae2f20704d16999884e425c7e8720fa5326a2131097df2088cec844741ce2f22b04d15f32119d81b8fc8540e4ef2713d16988cb9f10448644447a3222e2f81d02b37f11917dc8df0fe26240fa5011e167f7e8c990c37bf4777aa9fe5effa0b5b6f432fda35eae7fd22bf4cf7aa55ea557eb357aad5ea7d7eb0d3a5f6fd49bf466bd456fd5dbf476bd43efd4bbf46efb701f2620b4878d0fed65d57dacba9f550fb0ea41563dc4aa8759f508ab1e65d563acfa0bab1e67d55f59f504abfec6aa2759f577563dc5aa7fb0ea6956fd9355cfb0ea5f9c4abd9d970d5e2ec2cbfebcece2e5a2bc5c8c976ff041948ffe5140968fae0d72472f2531cc47ef2a20cd476f3e04516989713efad800f27cf4e982202a2331d047f72540a28f6e5f1044654546face20227d989f70e54446fa4e23227d981f70e54546fa4e21227d900149ff0a22237d2711913ec870a47f459191be1388481f6430d2bf92c848df7144a40f3214e95f5964a4ef1822d207c98af8571119e93b8288f4419222fe554546fa0e21227d909c887f359191be0388481f2425e25f5d64a46f1f22d207c988f8d79039905d1de2520382284026a2aa10976a10446e99882a435caa401005ca445411e2520982284826a2f210970a1044c132119585b89483200a9189a834c4a50c0451a8c848df5e08a152104261323b5128c4250c82285c26a260884b080451844c448110972008a29a321105405cdc1044b56422aa0971a90541545b26a270884b0404511d9191be5c44a40fb2a0c4bfaecc3e541be25207d287ea4a8ff4e562227d7bf45ebd4fefd707f4417d481fd647f4517d4cffa28feb5ff509fd9b3ea97fd7a7f41ffab4fe539fd17f59861fcdfc5b4611cbf0b70c976514b58c629671031fedb30c930f14ddc8cb37f1f2cdbcfc2f5ebe85976fe5e5db78f9765ebe83978bf3f29dbc7c172fdfcdcbf7f0f2bdbc7c1f2fdfcfcb0ff0f283bcfc102f3fcccb8ff072095e2ec9cba578b9342f97e1e5b2bc5c8e97cbf372059f44feca43227f98f1a65e32237f6521913fcc78536f9991bfd290c81f66bca98fccc85f4948e40f33e0d45762e48f6efc80cc1f7d3f4010454b0cfdd1372b20f5475fc010443112637ff4e802c8fdd1130e0451acc4e01f3d1b02927ff4080941142731fa470fdf80ec1f3da34310792486ffe8d70d20fd473f822088e225c6ffe8e72320ff47bf32218812240600e9f7392001483fe32188fa498c00d20008200348e32410445e8921401a6102a40069200a82a8bfc418200de101728034d207413440e6f0777f88cb0008a2449988fa415cbc10440365228a87b824401025c944140771f1401025cb441403718985204a9189a82fc4251a8268904c44bd212e7d20885225060169e61382a81704519acc5e940a714983204a97892805e2320882284326a224884b3204d160998812212e03218886c8443418e232048268a84c44e910970c08a2612293805310afcd30219c87cbec4443212ec3209d68b8f428e0144814907a143d8ed2481d0db3d190268d47d2d82f0ddcd220398d70d36c024d05d0b40bcd99d0fc144d2ed1441ecdc2d18c274d57d2d430cdebd21c3a4d805b065995b28cd29651c632ca5a4639cb286f19152e1711acc807902af172655eaec2cb5579b91a2f57e7e51abc1cc0cb6e5e0ee4e5205e0ee6e5105e0ee5e5305e0ee7e5085eaec9cbb578b9362fd7e1e5babc5c8f97ebf372242f47f172035e6ec8cb8d78b9312f37f14944b0312422d804f24df086cc8860434844b01104d1389911c1284844b00104d19b322382f52111c14808a2f1322382752111c17a10446fc98c08d6864404316b7826c88c08d684440431ab09df9619110c87440431ab0927ca8c088642228298f5f1efc88c080643228298f5f19364460403211141ccfaf8c932238201908820667d7caecc886075484410b385d9149911c1aa908820660bb33c9911c1ca908820660bb3a93287c5f3202e532188a6c944940b71814cd1f84f97896812c4653204d10c998826425cde81209a2913d10488cbdb1044b364221a0f71790b8268b64c44e3202e6f4210bd2b3322580982e80d08a239327bd1bb10973910447365229a0571990d41f49e4c4433202e332188de9789681ac4653a04d1073211bd0f71f90082689e4c4473212eef4110cd171911cc834404313b9e2f90d989e6415ce6433ad102e911c13c5044b0223d8ed2481d0db3d190268d47d2d82f0ddcd220398d70d36c024d05d0b40bcd99d0fc144d2ed1441ecdc2d18c274d57d2d430cdebd21c3a4d805b467dcb88b48c28cb6860190d2da3916534b68c26978b0836e50348cd78b9392fb7e0e596bcdc8a975bf3721b5e6ecbcbed78b93d2f77e0e58ebcdc89973bf372175eeecacbdd78b93b2ff7e0e59ebcdc8b977bf3721f5eeecbcbd1bc1cc3cbb1bc1cc7cb1e5e8ee7e5049f4404e3211141cc92e7553223827190882066c9f36a9911c118484410b3e4798dcc88605f484410b3e479adcc88606f484410b3e4799dcc88604f484410b3e479bdcc8860774844b00704d1069911c1ae9088603708a27c9911c1ce9088601708a28d3223821d2111c14e10449b644604db4322821d208836cb8c08b6854404db41106d9119116c0d8908b68120da2a3322d81212116c0541b44d6644b0392422d8028268bbcc61f16d1097ed10443b6422da0271d90a41b45326a24d1097cd1044bb6422ca87b86c8420da2d13d17a88cb0608a23d3211ad85b8ac8320da2b13d16a88cb1a08a27d322382cd2088564110ed97d98bf6415cf643101d90890873b8e45e08a2833211ed82b8ec86203a2413d10e88cb4e08a2c332111d82b81c86203a2213d10188cb4108a2a322238290557c465308e763323bd11188cb5148273a263d22381514116c4a8fa3345247c36c34a449e39134f64b03b734484e23dc349b40530134ed427326343f45934b349147b37034e349d39534354cf3ba34874e13e096d1d732a22d23c632622d23ce323c96116f1909978b08f6e303485e5eeecfcb037839919707f272122f27f3720a2f0fe2e5545e4ee3e5745ecee0e5c1bc3c849787f2f2305e1ececb237879242f8fe2e5d1bcfc282f3fc6cb99bcfc382f3fc1cb4ff2f253bcfc342f3fe39388e0d39088e033886f02d71d3223824f4222824f4110159719117c1c12117c0282e84e9911c1c72011c14c08a2bb644604474322828f4210dd2d3322381212111c0541748fcc88e0704844700404d1bd32238243211141c826f2aefb6446040743228290f32c5cf7cb8c08a643228290f32c5c0fc88c08a642228290139a5c0fca8c08a640228290139a5c0fc98c082641228290139a5c0fcb8c082642228290139a5c8fc88c08f687440421a7e8ba4a881c16773d0271290141545226a287202e0f4310959289e80188cb831044a56522ba0fe2723f0451199988ee81b8dc0b41545626a2bb202e774310959389a838c4e54e08a2f23223825e08a23b20882ac8ec45e5212e1520882aca445416e2520e82a8924c44a5212e6520882acb445412e2520a82a88a4c4495212e90cdf05d55652282ec6ee7aa0441544d6444701a2422d80fc2b9bacc4e5415e20239970382c8a711c169a088603f7a1ca5913a1a66a3214d1a8fa4b15f1ab8a541721ae1a6d9049a0aa069179a33a1f9299a5ca2893c9a85a3194f9aaea4a9619ad7a539749a00b78cc72c23d3321eb78c272ce349cb78ca329eb68c672e17117c960f203dc7cbcff3f20bbcfc222fbfc4cb2ff3f22bbc9cc5cbd9bcac78398797c7f0f2585e7e95975fe3e5d779f90d5e1ec7cb6ff2f2785e7e8b9727f0f2dbbc3c9197dfe1e549bc3c99977379790a2fe7f1f2549f4404f3201141482adfd54a664430171211849cade36a2d332238091211849cade36a23332238111211849cade36a2b332238011211849cade36a273322381e1211849cade36a2f3322380e1211849cade3ea203322f83a242208395bc7d5516644f0554844f03508a24e322382632011c1b110449d654604152422980341d4456644300b1211cc8620ea2a3322f8322422f80a0451379911c1172111c1972088bacb8c083e0f8908be0041d443e6b07877880b64036a574f9988ba425c201b50bb7ac944d419e202d980dad55b26a28e1017c806d4ae3e3211b587b84036a076f59589a82dc405b201b52b5a26a2d61017c806d4ae189911c1e72088201b50bb6265f6a218880be49020579c4c447d212e9043825c1e99887a435c208704b9e26522ea0971811c12e44a9089281ee20239f6ced54f26a238880be4d83b975764441072feadf12c84737f999d08937ff4423a517fe911c1f9a088e0b3f4384a237534cc46439a341e4963bf34704b83e434c24db309341540d32e346742f35334b9441379340b47339e345d4953c334af4b73e834016e19132de31dcb986419932d23d732a658469e654cbd5c44701a1f409acecb337879262fcfe2e5d9bcfc2e2fcfe1e5b9bcfc1e2fbfcfcb1ff0f23c5e9ecfcb0b7879212f7fc8cb1ff1f2c7bcfc092f7fcacb9ff1f2225efe9c9717f3f217bcfc252f7fc5cb5ff3f2125efe8697bff54944f01b4844f05bc837c1733223825f4322824b20889e971911fc121211fc0a82e8059911c1c59088e01710442fca8c082e8244043f87207a496644f0534844f03308a2976546043f8644043f81207a456644f0434844f02308a22c9911c1059088e04208a26c9911c17990882064b4c6a5644604df8744043f8020ca9119119c0b8908be074134466644f05d4844700e04d1589911c1599088e06c08a257654604674022823321885e93392cfe2ac405b32ee0759988c6405c30eb02de908948415c30eb02c6c944940571c1ac0b785326a297212e987501e365227a11e2825917f0964c44cf435c30eb0226c88c084e87207a0e82e86d99bd6802c405b3767ba24c44e3212e98b5dbefc844340ee28259bb3d4926a2d7212e98b5db9365229a0471c1ec46922b13d144880b66379229222382907179631a84739ecc4e940b71c16c8c94273d22b81014119c468fa3345247c36c34a449e39134f64b03b734484e23dc349b40530134ed427326343f45934b349147b37034e349d39534354cf3ba34874e13e096b1d832beb08c2f2de32bcbf8da329658c63796f1eda52382791d9a46068684aa7cc34fe9dda6d2bba8eda4b683da766adba86da5b685da666a9ba86da4964f6d03b5f5d4d6515b4b6d0db5d5d456515b49ed676a2ba8fd446d39b51fa92da36651d3d47ea0f63db5a5d4be339565dc60976276296a17975dfced52c42e865dfce8fffb17b533d4fea4769ada1fd44e51fb9dda496abf513b41ed576ac7a9fd42ed18b5a3d48e503b4ced10b583d40e50db4f6d1fb5bdd4f6d8ff4805bb94b74b39bb94b54b19bb94b64b29bb94b44b09bb3c629787edf2905d1eb4cb0376b9df2ef7d9e55ebbdc6397bbed72975deeb44b71bbdc6197dbed729b5d6eb5cb2d76f9975d6eb6cb4d76b9d12ea65d9ad8a5b15d1ad9a5a15d1ad825ca2e9176a96f977a76a96b973a76a96d975a76a9699708bb84db25cc2ea17609b14bb05d82ec126817b75d02ec52c32ed5ed52cd2e55ed52c52e95ed52c92e15ed92609778bb78ec12679758bbc4d825da2e7dedd2c72ebdedd2cb2e3dedd2c32eddedd2cd2e5dedd2c52e9dedd2c92e1dedd2c12eededd2ce2e6dedd2c62eadedd2ca2e2dedd2c22ecdedd2cc2e4d4de74c5ee7dc5ee76c5fe7fc5fe78c60e71c61e7ac61e73c62e7cc62e75c63e7ec63e77c64e70c65e79c65e72c66e7bc66e74c67e7dc67e76c68e7fc68e78c69e71c6ae7ac6ae73c6be7cc6be75c6ce7ec6ce77c6de70c6ee79c6ee72c6fe7bc6f67434067d34067634167f34167834267134367a34367334467c34467534567e34567734667034767934767234867b34867434967d34967634a67f34a67834b67134c67a34c67334d67c34d67534e67e34e67734f67035067935067235167b351278de824169d54a3937c74d2914e82d249593a494c27ade9243a9dd4a7930c75d2a34ec2d449a13a495527cdea245e9d54ac939c75d2b54e02d749e93a495e27edeb24829dd4b0932c76d2c74e42d949313b4967e75efa9d652cb58cef2de307cbd0966159c632cbf8d132965bc64f96b1c2327eb68c9596b1ca32565bc61acb586b19eb2c63bd656cb08c7ccbd868199b2c63b3656cb18cad96b1cd32b65bc60ecbd86919bb2c63f7c55fb9909148634fa1bf45427cf02460ec86bcb8bd90278125c21e96dc675fdccec28276db2ebb2088be1184c81df09ff77f7b6110b9cfbbec8020fa560822f7857fa0db4c4111b92f74d90641f49d0044eebfff05dd8f0b82c8fd77972d10444baf3322f7a5fe92beb8ae1691fb522e9b2088bebf8e88dcff24d037fcd52072ff934b3e04d10fd709919b13e951e84a11b93997f51044fa3a20725fce919e19af0491fb722e6b2188ac6b8cc87d258ef4707d3944ee2b71590d41b4ec1a22725fa923fd0ae110b9afd4652504d18fd70891fb6a1ce9e7da3f21725f8dcb0a08a2e5d70091fb6a1de977eda510b9afd6653904d14f3e46e42e88230d00fc1d91bb202ecb208856f81091bba08e345272212277415d3404d1cf32a74556405c7e86205a2913d17288cb4f1044ab64225a0671f9118268b54c441ae2624110ad9189e87b88cb0f10446b6522fa0ee2b21482689d4c44df405c303b40acf7192277c11d6912098208b303c40699bd683dc465030451be4c446b212eeb208836ca44b41ae2b2068268934c442b212eab208836cb44b409e2b21982688b4c44f910978d10445b7d82c85d3847cb38f7e8e82e9ccb5208e86d327bd11688cb56482f4220fadf70e4b4b69e384f6a9a2729678cb28c3dfa0cd5bd548b53d333f5193ffaf33ecbd89f39352ad59b98e84d189b9d99d7c19b9490e8c1444bc9bef02f2c2b6b7ce6e456c98395e19739a54172525abaf2436c2a32b37172aac79b9064a3ca99139bea894ef7b4ce200cf15e4f6a76e6f4a69ee894c8d4d4e861aa88919d39bbbd27c19b96ee496d9614e7196a9cbf12c8f626b3a3bc49d1a9c31a7b3d89716d52c6149d1c191757c49599db32393a4ef917f5e9bf95d768504674629abf2b33af79c6c09466f1aae84db91d53a3533273ed3f67df9cdb213d3965b12f1263070afd72827d7159070b7d5981ec6731873e75079ccfe241aab79ffd181eb28cc33efc181e2a7ccf71ae69604aa2c7328e64bde9fb4fe4ccb4f4e4d4e8044f7b4f749ca84fa3f3ca8bfa9f2350f4dce7e4c6b37ff633ce7d5efef35e2a81efe57f2f09b1dcff36c8cb3a02eda247cf7f6914317cdf55679debaa5de85ee4b9a8affa1bea7ffaeac57f2e72feb28afaa0ef16b3fb2e75d9b37dd755ec2c8a62ae73488a9debbb375ddc77b3b289dfbf01", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -290,7 +286,7 @@ } ], "returnTypes": [], - "bytecode": "ed5d0973535514ce6bdad25d5a50d1b2952d065c92a64b2a88dd582a50a41505f790bc86689a9434add4fdb9efbebc142915dcda026513c41d451cc7711cef1f7086bfa2e37d7d493b2f60eaccfb9e1cca63e64ce7d199dbef3bf79c7bbe73ef7dc92063176de7a4d3cd619fffc9e6e8def57d117f8b2f1c96c63a9ada37ac4b28b942965fe665fb65be201d6b8a85e2bbbbc578c89f9413ca9f8d1e575d4d8d585f2dba3d6e9fabba6197b7d65553bbabceebf6ba6bbdb5816aafc7237a6bbcf50dbb1aea5d0dee1a8fe8eeaa6df074b9b47f37fcd9e832f6af060fea46c3a0dc9771e3d17bc58018eb1523c9a47203fb5bb9915b05fbdba6ccbb493ad21c0b85c3a1e0be8474b833140986458d895118f30c0fe14a48634db1986fe0d0cd95f3172c5cb4b86ac9d265cb57c843d2c89668bf22d8a4b19668a437aed812c6ff96747c7d3426868211d561c9f1a0186f8fc6c5deea8434be51f4f54ce050724a13d2c90e3118ea8d8bb1b64840dc2b6858ec39294c7669f49ebeee9e44bef66c13463be3d19e0bd2786b2826fae3a17e513abaad2f1a0f8991f83e8ca3171b279f9465c38354dfe2b89025831dd9d2fb16f6973e959280545a0cf0ad4301f805109c2686cf0a22e1b3d2992d7c9cd9c267a519e1b302e05b27207c5602c2075ea65619e795b54ced5756f11255c96d3eb705dc16725bc4cda196ad5b6fbb74be8dce5505c02df30163dc0e986fb36afaed889ace1175f784c53be441695cad956d5dbcd22a367bba9a0b0980063ad91c8af86203eb436238b0b567d036d21aea176c13c518b15ab975f19748025c7b0762825cc6e30fcfcc25a3973044becf01e4ea02c0186ec2f9ee06e67bb595ef3ad7562326c84330dfdd1e44be5faa0e469ada5b938a4b503c4246e3ad00d2d00118a3161c67101d0b6861dc358031d82fe02aa0c6aa51e7d4d422d4309c1a1941bb0430461de10257072c70f55681d3b9b61e31415e8205aece3b6305ed52c0180d84f3bd0198ef775af9ae73ed9d88095a4d30df1b569b2968bd82b25a588317b44ec018775114b4804d55f71a84a0fd95a0a05d731744d0fe6ade998502707d25608caa2b73eee1cefc8fbbd7663bf758db98e59777b3f3f8f4aa048c518548afdf288aacb50a60c61119fa1bed53c57222d9d5d4982dbb1ab365579319d9550ef06d2320069ba8269751073722969edf8d3bd870e8b83298b99b01de69412c3dbfd316079028321e0090e5abb925dbf2d5926df96abecc9539a3ae6d06776790bb08ada6df4568cd761761ddfaa9dd0a05bb5b311f906850400b80db271be483da1db91cc1fcfb7c278262bc53f4c7c4f826714077a5cf2e28975ce9d33fe7a461e5216065ecebe48f340502f63c697473d417507253d706f373532ec94f5d272cd25d27c44ca683e2c5a28d8641d54e73ff75234fdc75dc36a8c9db76cf54f20e91bbff3a0908b18bd5e690a92d2795d400cdc405170b682135408ba80172006be426f9a2ad425bfa0b66693f67a54b449ef6332f552a72edfa9be8ff47553d1be1c2bd6ba0bd8faf9f5d2131a0de98d715d7426168dae2aa7fb6673ce7663ce7653ce7673ccfca782e48b32f36a17897a8c5bbb03855bc8b4a348f97a48ab550922adeb3338a37e2f4c6ac03b24dc0e8dd6c1d90e95cbb1931415b081e906dda229ba125a9b90a2270db4def56dbb9b8ade2b684db526ecbb82de7e65405efd67b4deb569750abc44b816bd936ab5bbdb2ddaa9362b7da617ab7dac113772bb76d6af276de77cd74ab9d4e72dd6a1535403371c1c5025a460dd0726a809cc01ab9ddea56ad6ef57241665ab7ba1d18bdf75bddaaceb5f72326e80182ddeaf6074876ab08574de6993c19d63be461f396d453bc51e9f04502d1ee89c0d6ada68220a7ffb0dd84d52c575dcdd48fdb9858cd72d27525fd391cb9a9d5acc0ccd56ccacb3b2d2fa3bd0c6fd61ea4f8793f0f99fe793f0ff2eef1216e73d50ef2e147f0141e05ec68c1413d661894070fea7193277bbff2289fe8726db295ebb9ede4f618b7c7d5c9f7ed9a5aba0e6085d8c3d4fa9ab9d4005d4f0d50b9356557db94ed440292012b247030f7a496f2f36d84399aa0282ca0bb9d7046db4e688989bef86536138a8403577c3341ff5c98f645890942b154158a7c4f41138ac5a59aff4b8b53f3509a128ae557d1e6821fb8b910b0361774ae0d20264824b8b9e017496e2e88148fc2bbd08d0395177410af27b23f28bea15305f07010f10eca1f148f8377536c3a43a6379d5dbcc10c6a9f28accce1b683db6e6e21b5e97ce249d39ace79d4f47905354073908066d2ea4aee2c7f66870e02d08e6ba2f90d5bcdafd5fcfef7b831adf90d039bdf6eabf9d5b9b61b31411182cd6f3842b2f98d204fd687b1799643adcc5a2739d301b24e72ac29330ae8da38c98972313b57133d4585f445ed69b13b145f17f1c7067ab8a8dd1c0dea346db1304c4ed3ea9f8bd2ae293541e396a91a974b5b4de3969469d35196ba452a94a5346ec555a471a3408ddb63695c9d6b7b1013b487a0c68dee21a971f7581af7bf03b2368ea703646d1cffcb18d6c6f1ff1a3ad6c6f134e4260548ccd2da96d6a6abb56340addd6b696d9d6b7b11131427a8b56371925a3b4ef132551fc50b31fd14413d4511d45e8aa00628827a9a22a86728827a9622a8e728827a9e22a8174cf9d299a98b7b176db327de154b5fdb4bbf33d6c7ad9fdb53dcf6721be0f634b767b83dcbed396ecf737b41bddec75e64129e3a7b89e284b09749a27a8524aa5749a27a8d24aad749a27ac384af3732389edbd106a1f626416ace4e08b5b748c6d2db2451bd4312d5bb2451bd4712d5fb2451c924512548a25248a24a9244354812d53e92a83e40a3427c35918060b69f22b31c04b3218accec0866072832cb45301ba6c82c0fc1ec438accf211cc0e5264c65e44503b44919a03c1ec238acc105f32cd3e26198e2f21a87d4292dacb086a9f52a4762b82d9672427ed1504b51192d45e45501b2549ed3504b5318ad47c08668729327b02c1ec08c9707c1d41ed28496a6f20a88d93a4f62682da3192d4de42503b4e92dadb086a2748527b0741ed24496aef22a89d2249ed3d04b5cf49527b1f41ed34496a3282da1992d4201bfd5f90a4a620a89d25490df13a17fb9224b54104b5af4852db87a0f635496a1f20a87d4391da2c04b36f29322b4030fb8e22b34204b3ef29322b42303b4791593182d90f1499952098fd4891592982d9798accca10cc7ea2c8ec3a04b30b1499cd4630fbd93833f9a26d15dbcf86d80136cc3e6407d921f611fb987dc23e659fb11136cac6d86176841d65e3ec183bce4eb093ec14fb9c9d6667d817ec2cfb927dc5be66dfb06fd977ec7b768efdc07e64e7d94fec02fbf91f", + "bytecode": "ed5dfb7313d517cf366de9fb4b0b2adf6f7995570cf8d5a4e92315c4be7854a048fb4541fdaa21d986689a9434add4f7fa7ebbd91429157cb505ca4b10df0aa28ee3385efddd19fe151def7693763660eacc7e560e653b73a6b3edccede773ee39f77ccebd77d341f6eb45db39e97473d8e77fb839ba777d5fc4dfe20b87a5b18ea6f60deb124aae90e59779d97e992f48c79a62a1f8ee6e311ef227e584f25ba3c755575323d6578b6e8fdbe7aa6ed8e5ad75d5d4eeaaf3babdee5a6f6da0daebf188de1a6f7dc3ae867a5783bbc623babb6a1b3c5d2eedebfadf1a5dc6be6af0a06e300cca7d19371ebd530c88b15e31924c2ad7b33f941bb855b03f6ccabc7f4b479a63a1703814dc97900e778622c1b0a831310a639ee1215c0969ac2916f30d1cfa4fe5fc050b172dae5ab274d9f215f29034b225daaf083669ac251ae98d2bb684f1bf251d5f1f8d89a160447558723c28c6dba371b1b73a218d6f147d3d1338949cd28474b2430c867ae362ac2d1210f70a1a167b4e0a935d1abda3afbb2791af3ddb84d1ce78b4e78234de1a8a89fe78a85f948e6eeb8bc6436224be0fe3e8c5c6c92765d9f020d5373a2e64c96047b6f4be91fdae4fa524209516037ceb50007e0104a789e1b38248f8ac74660b1f67b6f0596946f8ac00f8d609089f9580f08197a955c679652d53fb9555bc4455729bcf6d01b785dc167173a865eba6ff5e3adf46e7aa02e096f980316e06ccb75935fd66444de788ba7bc2e22df2a034aed6cab62e5e69159b3d5dcd850440039d6c0e457cb181f521311cd8da33681b690df50bb689628c58addcbaf84b2401aebd0531412ee3f18767e692d14b1822dfe700727501600c37e17c7703f3bddaca779d6bab1113e42198ef6e0f22df2f5507234dedad49c525281e21a3f1560069e8008c510b8e33888e05b430ee1ac018ec0770155063d5a8736a6a116a184e8d8ca05d0218a38e7081ab0316b87aabc0e95c5b8f98202fc10257e79db1827629608c06c2f9de00ccf75bad7cd7b9f656c404ad2698ef0dabcd14b45e41592dacc10b5a27608cdb280a5ac0a6aa7b0d42d0fe4850d0aeb90d22687f34efcc4201b8be123046d59539f77067fee0f6b5d9ce3dd63666f9e5edec3c3ebd2a01635421d2eb278a226bad0298714486fe44fb54b19c4876353566cbaec66cd9d564467695037cdb0888c126aac965d4c18d88a5e767e30e361c3aae0c66ee6680775a104bcfcfb4c501248a8c070064f96a6ec9b67cb5645bbe9a2f7365cea86b9bc1dd19e42e42abe977115ab3dd4558b77e6ab742c1ee56cc07241a14d002e0f6c906f9a076472e4730ff3edf89a018ef14fd3131be491cd05de9b30bca2557faf4cf39695879085819fb3af9234d81803d4f1add1cf50594dcd4b5c1fcdc944bf253d7098b74d7093193e9a078b168a36150b5d3dc7fddc813771db70d6af2b6dd3195bc43e4eebf4e0242ec62b539646acb492535403371c1c5025a480dd0226a801cc01ab949be68abd096fe8259daf759e91291a77dcf4b958a5cbbfe26fa3f5155cf46b870ef1a68efe3eb6757480ca837e675c5b550189ab6b8ea9fed19cfb919cf7919cff919cfb3329e0bd2ec8b4d28de256af12e2c4e15efa212cde325a9622d94a48af7ec8ce28d38bd31eb806c13307a375b07643ad76e464cd0168207649bb6c86668496aae8208dc76d3bbd5762e6eabb82de1b694db326ecbb93955c1bbf54ed3bad525d42af152e05ab6cdea56af6cb7eaa4d8ad7698dead76f0c4ddca6d9b9abc9dffbb66bad54e27b96eb58a1aa099b8e062012da306683935404e608ddc6e75ab56b77ab92033ad5bdd0e8cdebbac6e55e7dabb10137437c16e75fbdd24bb5584ab26f34c9e0ceb1df2b0794bea29dea874f8228168f74460eb56534190d37fd86ec26a96abae66eac76d4cac6639e9ba92fe1c8edcd46a5660e66a36e5e59d9697d15e86376bf750fcbc9f7b4dffbc9f7b78f7782fb7b96a0779dffff114ee07ec68c1413d601894070fea4193277bbf723f9fe8726db295ebb8ede4f600b707d5c9f7ed9a5aba0e6085d87dd4fa9ab9d4005d470d50b9356557db94ed440292012b247030f7a496f2f36d84399aa0282ca0bb9d7046db4e688989bef86536138a8403577c3341ff5c98f645890942b154158a7c4f41138ac5a59aff4b8b53f3509a128ae557d1e6821fb8b910b0361774ae0d20264824b8b9e017496e2e88148fc2bbd08d0395177410af27b25f28bea15305f07010f10eca2f148f8377536c3a43a6379d5dbcc10c6a9f28accce1b683db6e6e21b5e97ce861d39ace79d4f47905354073908066d2ea4aee2c7f66870e02d08e6ba2f90d5bcdafd5fcfefdb831adf90d039bdf6eabf9d5b9b61b31411182cd6f3842b2f98d204fd687b1799643adcc5a2739d301b24e72ac29330ae8da38c98972313b57133d4585f445ed69b13b145f17f1c7067ab8a8dd1c0dea346db1304c4ed3ea9f8bd2ae293541e396a91a974b5b4de3969469d35196ba452a94a5346ec555a471a3408ddb63695c9d6b7b1013b487a0c68dee21a971f7581af7ef03b2368ea703646d1cffc518d6c6f13f1a3ad6c6f134e4260548ccd2da96d6a6abb56340addd6b696d9d6b7b11131427a8b56371925a3b4ef132551fc50b31fd14413d4211d45e8aa00628827a9422a8c728827a9c22a82728827a9222a8a74cf9a7335317f72eda664fbc2b96beb6977e67ac8f5b3fb747b8ede536c0ed516e8f717b9cdb13dc9ee4f6947abd8f3dcd243c75f60cc50961cf9244f51c4954cf9344f50249542f9244f51249542f9344f58a09ff0acae0786e471b84daab04a9393b21d45e23194baf9344f50649546f92442593449520894a21892a4912d5204954fb48a27a8b24aafd24510da15121fe8d938060768022b31c04b3618accec08666f5364968b60769022b33c04b3431499e52398bd4391197b1a41ed5d92d49e41507b8f24b56711d4de2749ed3904b50f48527b1e416d8422b59b10cc46494eda0b086a6324a9bd88a0769824b59710d48e50a4e643303b4a91d9430866e324c3f16504b56324a9bd82a0769c24b55711d44e90a4f61a82da4992d45e47503b4592da1b086a1f92a4f62682da6992d46404b53324a941368d3f22494d41503b4b921ae2352af631496a83086a9f90a4b60f41ed5392d4de4250fb8c24b5fd086a9f93a43684a0f605456ab310ccbea4c8ac00c1ec2b8acc0a11ccbea6c8ac08c1ec1c4566c50866e729322b4130fb8622b35204b30b14999521987d4b91d9bf10ccbea3c86c3682d9f7c699c9176dabd80136ccde6607d921f60e7b97bdc7de671fb01136cac6d86176841d65e3ec183bce4eb093ec14fb909d6667d847ec2cfb987dc23e659fb1cfd917ec4bf615fb9a9d63e7d937ec02fb967dc7beff13", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, { @@ -370,7 +366,9 @@ "visibility": "private" } ], - "returnTypes": [null], + "returnTypes": [ + null + ], "bytecode": "cd9df973d35517c69b6e5ed119f53f505f505196ac4dc2da742fb42c2dfb9e36df94409a84242d2dab71c15d935370c5958220a2ef3bee3beedb41fdd579fd1fdc7745130b42a13dcdf2046e67fa43e69979b8e79393fb3df7f661b2fb98c9ff55c9ff13ffad097a3b37d684fb1a7a429db5de6030b1bfcd33afb13e45e52641ac90c44a53e2294f34105fdf6dc4039d03c9147d596d3357d9ed86d36a586c16afd9eaee7039cc76474795cbe2b2385c0e9fd565b3192ebbcbe9ee703bcd6e8bdd6658fc0eb7cd6f1efab9fccb6a73613f76fca2ae287851d611301e5c60f88c68cc080d0cd0e57c9cae48ff9af878095df99fc49335d1403018e8da934a1c680f84ba82c65025052ec37265c116e67f56d41d091ae3930f25f6b5867bc95492d85f1b0ec5e254922adc3f71b8211c35025da10ca481c3b17838eaed32da0caf2f9538d46478239e68d4db4fa5a654e2489bd11588c58d6873c867f4994eaea21cb18a2335819037dadf103082bef991dd15fb3c3e5f697962b025ecf55159c550e515652708542406e7f4744752170ebd2e310db6c7c391a389437581a8d1190ff41a89830b7bc2f180118aefc1bc95e30b2f722099ccc2c422cb574d382aec1113fa04f12ade35fcc33a00f8b08e07b09d40002e80262c62fb5ca249fb5c73b5d43e574bed734d31dae71200dbab01ed730da07de070269c2b386378f0ff0a079c071da748c7321140f85a80475674f2dc7a48972e2abc0120dbd7c46ba5edeb5a69fb9a683a35e6917663dea9059126bbea78e0ec7a5d72efd0a4566a2afe0cfbf4891976697abf31860db165263a6b881dfebaf4e4b22a8a30d4566686daf42c3b34d496570ea1a82c3f81a4f2c4503b6ed8508b39524d2cbc1f848fd62425889325718a244e9544b3245a24d12a893649b44ba24312ab24d129892e49744be234499c2e89332471a624ce92c4d992582d891e49ac91c45a49ac93c47a496c90c446496c92c466499c238973d5880396ad804dc33227ed61f517b4f158e62206ace78a389c5bf2adace9a4872f7f3acd083acf17f9e862cea7b286d33dccf9d16944d079e11c1cec5cb95656778687db9f3b9d7a049d17cfcdb1d7eecfa5b29a913c9cb9d1a945d079e91c5e0a38b2adac7a340f7bf6743c083a2f9fe32b13733695cd923cccd9d1998da0f3ca79b850ea1cabb219637938c7a6331341e7d5f374dd66952a9b06b8949a8ea0f3da79bc8c748e56992b5b0fe7e874dc083aaf9fe7ab5ad7489555e5e2e11a998e1341e70d0d2eb2cd675666cfd1a3ca7f361d0782ce9b9a5cf39b4fafcc9a8f8775381d1b82ce5b1afd11c47ab23273be1ef653742c083a4775fa1391e1f7671666995290c7109da9083a6f17834e8186163e8a30791bc1e71d2df9bc8930790bc1e75d2df9bc8e307903c1e73d2df9bc8a30790dc1e77d2df9bc8c307905c1e7032df9bc88307909c1e7432df93c8f307901c1e723dda69ff4fc63998cc0f31c02cfc75ab6cf4708938f117c3ed192cf0708930f117c3ed592cf7b0893f7117c584b3eef204cde45f039a6251f46981c43f0f94c4b3e9f204c3e45f0f95c473e97002a9b8440fc8596ddf319c2e47344f77c814dc01e5a146e31dabcbe40df8036e9fbaf4a2e9f3479cad4f46dadcdeea872badcd3a6cf98396b76b5a7a6b6aebea1b1a979cedc63a61221a1d322c5775a25719e24ce97c40592b85012db24b15d121749e262495c22894b257199242e97c41592b852125749e26a495c23896b25719d247a25b143123b25d127898624fa25b14b12d74b6240123748e2c62284e4360042721b117bf0d73a86e4d603427201049d6f740cc9f90121b92e049d6f750cc9f90021390341e73b1d43721d80905c2782cef73a86e4d60142725e049d1f740cc9ad0184e4d622e8fca863486e152024b71a41e7271d43722b0021b995083a3feb18925b0608c92d47d0f945c790dc1240486e2982ceaf3a86e4160142728b11747ed33124d70608c9b523e8fcae63486e012024b71041e70f1d4372f30021b9f9083a7f6a798ffc07c2e44f049fe35af2f90d61f23b82cf5f5af2f90561f22b804ffa025e4b403f214c7e8600326909e80784c98f1040a55a02fa0e61f23d0450999680be41987c0b0154ae6352ae15c1e76b089f0a1d1b28fdb6415c2a20882af544540a71298320ba404f44251017130491d272a73e8e30f90b02e8423d7b48415c2e84201aa727a24a88cb05104417e988e85240692d10c817ebd941e3202e17413ae862cde3739742e2732dadf3e62f58d8d6be68f192a5cb96af58b96af59ab5ebbc1d9d3ec3dfb53eb061a31c9f0b4ac19e6e490c496258122392b84912a3921893c4b824f64862af246e96c43e49ec97c42d92b85512b749e27649dc21893b2591af17d584a8de20aa378aea4da27ab3a8ee12d55b44f55651bd4d546f17d53b8a10a5e3db01593abe03b2255fa7639a8e6f05c4e9f83608a0493a06ea78172051c7b740004dd63153c7370142757c3304d0141d63757c032057c73742004dd53159c7d703a2759c800032eb18aedb0108d7ed84e0b1e898aedb0648d76d87e0b1ea18afdb0288d76d85e0b1e998afeb03e4ebfa2178ec3a06ec7a0101bbcd103c0e1d13767140c2ae0782a74ac7885d1410b18b41f03875ccd8450019bb4d103c2e1d43762140c82e0cc1e3d6f3c6d905717143104dd3135115c4c50941345d4f4476888b038268869e88ac10171b04d14c3d1199212e1608a2597a229a0271990a41345b4f4493202e932188aa754cdd7543005d0701e4d1b387aa212e1e08a21a3d11cd82b8cc8620aad513d10c88cb4c08a23a3d114d83b84c8720aad713511dc4a51e82a8414f443510975a08a2461d115d06282d0881dca4670735405c1a211dd4a479f0ee3248f02ed81d0a47364563f19edecd7dfd5bb66edbbe63275fcf09be816fe49bf866dec5b7f0ad7c1bdfce77644278c3de74c4b7cff29d85d6d1612fc2aaee2a745555e622aceaee4257e5f5176155f714ba2ab77d8438d981f6268fd551455f95f888ef54c477a57fef4effdea368aea2398a9a1535296a54d4a0a85e519da25a45358a3c8aaa15cd56344bd14c4533144d57344d915b914b91535195228722bb229b22ab228b22b3a2a98aa6289aac6892a28d8a36280a285aafa84b915f91a1c8a7a853518722afa2758ad62a5aa368b5a2558a562a5aa168b9a2658a962a5aa268b1a2458ada15b5295aa86881a2f98ae6296a55d4a23211b94c882e13b3cb04f13251bd4c982f13f7cb04023391c14ca830133bcc041369a7a21d8ab62bdaa668aba22d8afa15f529daaca857518fa2b8a298a2a8a24d8a228ac28a428aba150555fa33ce494e31f100efe63d7c2fdfc7f7f303fc203fc47bf9617e841fe5c7f8717e82f7f120efe703fc241fe443fc141fe6a7f9083fc3cf9efa6ef4d4a9af224ffb6636314b61ef3c278776c2826cf8dfedb4001ba6537b72de363cec3198a70def1efe74c8cb86f79cf988c9c386ef3dfb3995b30ddf37d2c32e471bbe7fe427664e36fcc0688fdd1c6cf8c1d19fdd59dbf043d20090a50def95a788ac6cf8e1b146912c6cf891b1e799316df8d16c86a2316cf8b1ec262bd1861fcf763c136cf889ec67bc516d785f2e83e228363c98dbb439a20defcf75641dc1860fe43ef79e65c34fe6333c9f61c307f39bc087d9f0a17cc7f8d36cf8a9fccf02ffdaf0e1420e14276cf8e9c24e25ffd8f091428f36691b7e06f1ff409f2dfc80944cee4dec6b0df752fae4b3bf361c8ac5a9240538171e6e08478d40572833e80e3cd71935bc71a3c59a3e215a5a8d58ccdb65a412879a0c6fc4138d7afba9d4944a1c6933ba02b1b8116d0ef98c3ed3c9d594235673a42610f246fb1b0246d0373fb2bb629fc7e72b2d4f0cb684bd3e2aab28eabf75a07e538f37182b2b4f1c98d3d31d69f653c5b8c145516f243198799dba68b03d1e8e0c249385374432f937", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } diff --git a/yarn-project/noir-contracts/src/examples/public_private_contract.json b/yarn-project/noir-contracts/src/examples/public_private_contract.json index c73fe8715bf..0e34292d30c 100644 --- a/yarn-project/noir-contracts/src/examples/public_private_contract.json +++ b/yarn-project/noir-contracts/src/examples/public_private_contract.json @@ -28,7 +28,9 @@ "visibility": "private" } ], - "returnTypes": [null], + "returnTypes": [ + null + ], "bytecode": "b590414ec24018855b685de8424f801e013c812da18a296a800b4c3abfcdc471a6ceb406967383ce1476ee285563484cbc8007e0025e861816ee0c9beadbbd7cc97b2f6f763257ef3e45d19dcf2741c6a22ea2542d87ded5794f1bc7de01dd5d70ef37f87203188404561873b8de98a3f5c632ad63f5ec0b422989e75a5523c2620a45aecdd759bb9e3aadda11ed3c7f528b017f34b6a5965dce646a2c5d3f56bd055c0089d9f697e223128052084fc73cec0c404a148356af1780124f0834350d5babd510622253107d866162ffac71fe62cdca270c89694080e2eb64e62e3c8c1b8e2a438eb069baffda55f51e324465d351d565769ff46f8dbb5f8e054a54b9f5faa01ca53cf9ccf36f", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, @@ -156,7 +158,9 @@ "visibility": "private" } ], - "returnTypes": [null], + "returnTypes": [ + null + ], "bytecode": "b5904f4ec24018c529b42e74a137406f8037b06da862fc17f00293f6b399389da9d3a981e57783ce1476ee28556348388207e0025e861816ee0c9beadbbdfc92f75edef464862b8f91f0d113e320e7a14f18c3c5d0bd39ef6b635b3ba0b30beefd06dfee200299012f8d395c6fccd17ad332dd637cf524658cc6338df588f298415968f375d66ba6d36ee3885e51bce0fc5a3c1bab850b5ff04c99966e1e8b1f81904063befda55c851288025f2409550970a5f1fd0248ea4a4926a66d695c0e21a6990239e0118cad9f29f65f4c597a9413390928b0e8369d3a73378ada3656578244a6e3fc6b57dd7fca09cb3a36d69779920e1e8cb35fdd4b9262b5f5faa01a29917e16c537", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } From 7554941865017ccc39857fac0f3e1f0d505092f3 Mon Sep 17 00:00:00 2001 From: LHerskind Date: Fri, 30 Jun 2023 09:49:06 +0000 Subject: [PATCH 08/14] chore: remove comment --- yarn-project/acir-simulator/src/public/executor.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/yarn-project/acir-simulator/src/public/executor.ts b/yarn-project/acir-simulator/src/public/executor.ts index f6f4c01e701..04018789bb0 100644 --- a/yarn-project/acir-simulator/src/public/executor.ts +++ b/yarn-project/acir-simulator/src/public/executor.ts @@ -55,8 +55,6 @@ export class PublicExecutor { * @returns The result of the run plus all nested runs. */ public async execute(execution: PublicExecution, globalVariables: GlobalVariables): Promise { - // @todo Should we add the global variables up here as an input? Or should it be similar to "treeRoots" below? - // Out main diff would be the that those vars are not in dp and depends on the block execution :thinking: const selectorHex = execution.functionData.functionSelectorBuffer.toString('hex'); this.log(`Executing public external function ${execution.contractAddress.toString()}:${selectorHex}`); From 558af75748f4e45560084d4c57eb9faad9cad432 Mon Sep 17 00:00:00 2001 From: LHerskind Date: Fri, 30 Jun 2023 10:07:48 +0000 Subject: [PATCH 09/14] chore: formatting --- .../src/examples/non_native_token_contract.json | 4 +--- .../src/examples/public_private_contract.json | 8 ++------ 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/yarn-project/noir-contracts/src/examples/non_native_token_contract.json b/yarn-project/noir-contracts/src/examples/non_native_token_contract.json index e8768fde684..c9978eae300 100644 --- a/yarn-project/noir-contracts/src/examples/non_native_token_contract.json +++ b/yarn-project/noir-contracts/src/examples/non_native_token_contract.json @@ -366,9 +366,7 @@ "visibility": "private" } ], - "returnTypes": [ - null - ], + "returnTypes": [null], "bytecode": "cd9df973d35517c69b6e5ed119f53f505f505196ac4dc2da742fb42c2dfb9e36df94409a84242d2dab71c15d935370c5958220a2ef3bee3beedb41fdd579fd1fdc7745130b42a13dcdf2046e67fa43e69979b8e79393fb3df7f661b2fb98c9ff55c9ff13ffad097a3b37d684fb1a7a429db5de6030b1bfcd33afb13e45e52641ac90c44a53e2294f34105fdf6dc4039d03c9147d596d3357d9ed86d36a586c16afd9eaee7039cc76474795cbe2b2385c0e9fd565b3192ebbcbe9ee703bcd6e8bdd6658fc0eb7cd6f1efab9fccb6a73613f76fca2ae287851d611301e5c60f88c68cc080d0cd0e57c9cae48ff9af878095df99fc49335d1403018e8da934a1c680f84ba82c65025052ec37265c116e67f56d41d091ae3930f25f6b5867bc95492d85f1b0ec5e254922adc3f71b8211c35025da10ca481c3b17838eaed32da0caf2f9538d46478239e68d4db4fa5a654e2489bd11588c58d6873c867f4994eaea21cb18a2335819037dadf103082bef991dd15fb3c3e5f697962b025ecf55159c550e515652708542406e7f4744752170ebd2e310db6c7c391a389437581a8d1190ff41a89830b7bc2f180118aefc1bc95e30b2f722099ccc2c422cb574d382aec1113fa04f12ade35fcc33a00f8b08e07b09d40002e80262c62fb5ca249fb5c73b5d43e574bed734d31dae71200dbab01ed730da07de070269c2b386378f0ff0a079c071da748c7321140f85a80475674f2dc7a48972e2abc0120dbd7c46ba5edeb5a69fb9a683a35e6917663dea9059126bbea78e0ec7a5d72efd0a4566a2afe0cfbf4891976697abf31860db165263a6b881dfebaf4e4b22a8a30d4566686daf42c3b34d496570ea1a82c3f81a4f2c4503b6ed8508b39524d2cbc1f848fd62425889325718a244e9544b3245a24d12a893649b44ba24312ab24d129892e49744be234499c2e89332471a624ce92c4d992582d891e49ac91c45a49ac93c47a496c90c446496c92c466499c238973d5880396ad804dc33227ed61f517b4f158e62206ace78a389c5bf2adace9a4872f7f3acd083acf17f9e862cea7b286d33dccf9d16944d079e11c1cec5cb95656778687db9f3b9d7a049d17cfcdb1d7eecfa5b29a913c9cb9d1a945d079e91c5e0a38b2adac7a340f7bf6743c083a2f9fe32b13733695cd923cccd9d1998da0f3ca79b850ea1cabb219637938c7a6331341e7d5f374dd66952a9b06b8949a8ea0f3da79bc8c748e56992b5b0fe7e874dc083aaf9fe7ab5ad7489555e5e2e11a998e1341e70d0d2eb2cd675666cfd1a3ca7f361d0782ce9b9a5cf39b4fafcc9a8f8775381d1b82ce5b1afd11c47ab23273be1ef653742c083a4775fa1391e1f7671666995290c7109da9083a6f17834e8186163e8a30791bc1e71d2df9bc8930790bc1e75d2df9bc8e307903c1e73d2df9bc8a30790dc1e77d2df9bc8c307905c1e7032df9bc88307909c1e7432df93c8f307901c1e723dda69ff4fc63998cc0f31c02cfc75ab6cf4708938f117c3ed192cf0708930f117c3ed592cf7b0893f7117c584b3eef204cde45f039a6251f46981c43f0f94c4b3e9f204c3e45f0f95c473e97002a9b8440fc8596ddf319c2e47344f77c814dc01e5a146e31dabcbe40df8036e9fbaf4a2e9f3479cad4f46dadcdeea872badcd3a6cf98396b76b5a7a6b6aebea1b1a979cedc63a61221a1d322c5775a25719e24ce97c40592b85012db24b15d121749e262495c22894b257199242e97c41592b852125749e26a495c23896b25719d247a25b143123b25d127898624fa25b14b12d74b6240123748e2c62284e4360042721b117bf0d73a86e4d603427201049d6f740cc9f90121b92e049d6f750cc9f90021390341e73b1d43721d80905c2782cef73a86e4d60142725e049d1f740cc9ad0184e4d622e8fca863486e152024b71a41e7271d43722b0021b995083a3feb18925b0608c92d47d0f945c790dc1240486e2982ceaf3a86e4160142728b11747ed33124d70608c9b523e8fcae63486e012024b71041e70f1d4372f30021b9f9083a7f6a798ffc07c2e44f049fe35af2f90d61f23b82cf5f5af2f90561f22b804ffa025e4b403f214c7e8600326909e80784c98f1040a55a02fa0e61f23d0450999680be41987c0b0154ae6352ae15c1e76b089f0a1d1b28fdb6415c2a20882af544540a71298320ba404f44251017130491d272a73e8e30f90b02e8423d7b48415c2e84201aa727a24a88cb05104417e988e85240692d10c817ebd941e3202e17413ae862cde3739742e2732dadf3e62f58d8d6be68f192a5cb96af58b96af59ab5ebbc1d9d3ec3dfb53eb061a31c9f0b4ac19e6e490c496258122392b84912a3921893c4b824f64862af246e96c43e49ec97c42d92b85512b749e27649dc21893b2591af17d584a8de20aa378aea4da27ab3a8ee12d55b44f55651bd4d546f17d53b8a10a5e3db01593abe03b2255fa7639a8e6f05c4e9f83608a0493a06ea78172051c7b740004dd63153c7370142757c3304d0141d63757c032057c73742004dd53159c7d703a2759c800032eb18aedb0108d7ed84e0b1e898aedb0648d76d87e0b1ea18afdb0288d76d85e0b1e998afeb03e4ebfa2178ec3a06ec7a0101bbcd103c0e1d13767140c2ae0782a74ac7885d1410b18b41f03875ccd8450019bb4d103c2e1d43762140c82e0cc1e3d6f3c6d905717143104dd3135115c4c50941345d4f4476888b038268869e88ac10171b04d14c3d1199212e1608a2597a229a0271990a41345b4f4493202e932188aa754cdd7543005d0701e4d1b387aa212e1e08a21a3d11cd82b8cc8620aad513d10c88cb4c08a23a3d114d83b84c8720aad713511dc4a51e82a8414f443510975a08a2461d115d06282d0881dca4670735405c1a211dd4a479f0ee3248f02ed81d0a47364563f19edecd7dfd5bb66edbbe63275fcf09be816fe49bf866dec5b7f0ad7c1bdfce77644278c3de74c4b7cff29d85d6d1612fc2aaee2a745555e622aceaee4257e5f5176155f714ba2ab77d8438d981f6268fd551455f95f888ef54c477a57fef4effdea368aea2398a9a1535296a54d4a0a85e519da25a45358a3c8aaa15cd56344bd14c4533144d57344d915b914b91535195228722bb229b22ab228b22b3a2a98aa6289aac6892a28d8a36280a285aafa84b915f91a1c8a7a853518722afa2758ad62a5aa368b5a2558a562a5aa168b9a2658a962a5aa268b1a2458ada15b5295aa86881a2f98ae6296a55d4a23211b94c882e13b3cb04f13251bd4c982f13f7cb04023391c14ca830133bcc041369a7a21d8ab62bdaa668aba22d8afa15f529daaca857518fa2b8a298a2a8a24d8a228ac28a428aba150555fa33ce494e31f100efe63d7c2fdfc7f7f303fc203fc47bf9617e841fe5c7f8717e82f7f120efe703fc241fe443fc141fe6a7f9083fc3cf9efa6ef4d4a9af224ffb6636314b61ef3c278776c2826cf8dfedb4001ba6537b72de363cec3198a70def1efe74c8cb86f79cf988c9c386ef3dfb3995b30ddf37d2c32e471bbe7fe427664e36fcc0688fdd1c6cf8c1d19fdd59dbf043d20090a50def95a788ac6cf8e1b146912c6cf891b1e799316df8d16c86a2316cf8b1ec262bd1861fcf763c136cf889ec67bc516d785f2e83e228363c98dbb439a20defcf75641dc1860fe43ef79e65c34fe6333c9f61c307f39bc087d9f0a17cc7f8d36cf8a9fccf02ffdaf0e1420e14276cf8e9c24e25ffd8f091428f36691b7e06f1ff409f2dfc80944cee4dec6b0df752fae4b3bf361c8ac5a9240538171e6e08478d40572833e80e3cd71935bc71a3c59a3e215a5a8d58ccdb65a412879a0c6fc4138d7afba9d4944a1c6933ba02b1b8116d0ef98c3ed3c9d594235673a42610f246fb1b0246d0373fb2bb629fc7e72b2d4f0cb684bd3e2aab28eabf75a07e538f37182b2b4f1c98d3d31d69f653c5b8c145516f243198799dba68b03d1e8e0c249385374432f937", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } diff --git a/yarn-project/noir-contracts/src/examples/public_private_contract.json b/yarn-project/noir-contracts/src/examples/public_private_contract.json index 0e34292d30c..c73fe8715bf 100644 --- a/yarn-project/noir-contracts/src/examples/public_private_contract.json +++ b/yarn-project/noir-contracts/src/examples/public_private_contract.json @@ -28,9 +28,7 @@ "visibility": "private" } ], - "returnTypes": [ - null - ], + "returnTypes": [null], "bytecode": "b590414ec24018855b685de8424f801e013c812da18a296a800b4c3abfcdc471a6ceb406967383ce1476ee285563484cbc8007e0025e861816ee0c9beadbbd7cc97b2f6f763257ef3e45d19dcf2741c6a22ea2542d87ded5794f1bc7de01dd5d70ef37f87203188404561873b8de98a3f5c632ad63f5ec0b422989e75a5523c2620a45aecdd759bb9e3aadda11ed3c7f528b017f34b6a5965dce646a2c5d3f56bd055c0089d9f697e223128052084fc73cec0c404a148356af1780124f0834350d5babd510622253107d866162ffac71fe62cdca270c89694080e2eb64e62e3c8c1b8e2a438eb069baffda55f51e324465d351d565769ff46f8dbb5f8e054a54b9f5faa01ca53cf9ccf36f", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" }, @@ -158,9 +156,7 @@ "visibility": "private" } ], - "returnTypes": [ - null - ], + "returnTypes": [null], "bytecode": "b5904f4ec24018c529b42e74a137406f8037b06da862fc17f00293f6b399389da9d3a981e57783ce1476ee28556348388207e0025e861816ee0c9beadbbdfc92f75edef464862b8f91f0d113e320e7a14f18c3c5d0bd39ef6b635b3ba0b30beefd06dfee200299012f8d395c6fccd17ad332dd637cf524658cc6338df588f298415968f375d66ba6d36ee3885e51bce0fc5a3c1bab850b5ff04c99966e1e8b1f81904063befda55c851288025f2409550970a5f1fd0248ea4a4926a66d695c0e21a6990239e0118cad9f29f65f4c597a9413390928b0e8369d3a73378ada3656578244a6e3fc6b57dd7fca09cb3a36d69779920e1e8cb35fdd4b9262b5f5faa01a29917e16c537", "verificationKey": "0000000200000800000000740000000f00000003515f3109623eb3c25aa5b16a1a79fd558bac7a7ce62c4560a8c537c77ce80dd339128d1d37b6582ee9e6df9567efb64313471dfa18f520f9ce53161b50dbf7731bc5f900000003515f322bc4cce83a486a92c92fd59bd84e0f92595baa639fc2ed86b00ffa0dfded2a092a669a3bdb7a273a015eda494457cc7ed5236f26cee330c290d45a33b9daa94800000003515f332729426c008c085a81bd34d8ef12dd31e80130339ef99d50013a89e4558eee6d0fa4ffe2ee7b7b62eb92608b2251ac31396a718f9b34978888789042b790a30100000003515f342be6b6824a913eb7a57b03cb1ee7bfb4de02f2f65fe8a4e97baa7766ddb353a82a8a25c49dc63778cd9fe96173f12a2bc77f3682f4c4448f98f1df82c75234a100000003515f351f85760d6ab567465aadc2f180af9eae3800e6958fec96aef53fd8a7b195d7c000c6267a0dd5cfc22b3fe804f53e266069c0e36f51885baec1e7e67650c62e170000000c515f41524954484d455449430d9d0f8ece2aa12012fa21e6e5c859e97bd5704e5c122064a66051294bc5e04213f61f54a0ebdf6fee4d4a6ecf693478191de0c2899bcd8e86a636c8d3eff43400000003515f43224a99d02c86336737c8dd5b746c40d2be6aead8393889a76a18d664029096e90f7fe81adcc92a74350eada9622ac453f49ebac24a066a1f83b394df54dfa0130000000c515f46495845445f42415345060e8a013ed289c2f9fd7473b04f6594b138ddb4b4cf6b901622a14088f04b8d2c83ff74fce56e3d5573b99c7b26d85d5046ce0c6559506acb7a675e7713eb3a00000007515f4c4f4749430721a91cb8da4b917e054f72147e1760cfe0ef3d45090ac0f4961d84ec1996961a25e787b26bd8b50b1a99450f77a424a83513c2b33af268cd253b0587ff50c700000003515f4d05dbd8623b8652511e1eb38d38887a69eceb082f807514f09e127237c5213b401b9325b48c6c225968002318095f89d0ef9cf629b2b7f0172e03bc39aacf6ed800000007515f52414e474504b57a3805e41df328f5ca9aefa40fad5917391543b7b65c6476e60b8f72e9ad07c92f3b3e11c8feae96dedc4b14a6226ef3201244f37cfc1ee5b96781f48d2b000000075349474d415f3125001d1954a18571eaa007144c5a567bb0d2be4def08a8be918b8c05e3b27d312c59ed41e09e144eab5de77ca89a2fd783be702a47c951d3112e3de02ce6e47c000000075349474d415f3223994e6a23618e60fa01c449a7ab88378709197e186d48d604bfb6931ffb15ad11c5ec7a0700570f80088fd5198ab5d5c227f2ad2a455a6edeec024156bb7beb000000075349474d415f3300cda5845f23468a13275d18bddae27c6bb189cf9aa95b6a03a0cb6688c7e8d829639b45cf8607c525cc400b55ebf90205f2f378626dc3406cc59b2d1b474fba000000075349474d415f342d299e7928496ea2d37f10b43afd6a80c90a33b483090d18069ffa275eedb2fc2f82121e8de43dc036d99b478b6227ceef34248939987a19011f065d8b5cef5c0000000010000000000000000100000002000000030000000400000005000000060000000700000008000000090000000a0000000b0000000c0000000d0000000e0000000f" } From bc4d4f965e276153ba79146a1d9eeef22b666f0d Mon Sep 17 00:00:00 2001 From: LHerskind Date: Fri, 30 Jun 2023 10:57:11 +0000 Subject: [PATCH 10/14] fix: use context for l2 -> l1 msgs chainid and version --- .../src/aztec3/circuits/kernel/private/common.cpp | 7 ++----- .../src/aztec3/circuits/kernel/public/common.hpp | 13 +++++-------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/circuits/cpp/src/aztec3/circuits/kernel/private/common.cpp b/circuits/cpp/src/aztec3/circuits/kernel/private/common.cpp index 967e600c22c..6c6d6db36f1 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/private/common.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/private/common.cpp @@ -164,13 +164,10 @@ void common_update_end_values(DummyBuilder& builder, std::array new_l2_to_l1_msgs_to_insert{}; for (size_t i = 0; i < new_l2_to_l1_msgs.size(); ++i) { if (!new_l2_to_l1_msgs[i].is_zero()) { - // @todo @LHerskind chain-ids and rollup version id should be added here. Right now, just hard coded. - // @todo @LHerskind chain-id is hardcoded for foundry - const auto chain_id = fr(31337); new_l2_to_l1_msgs_to_insert[i] = compute_l2_to_l1_hash(storage_contract_address, - fr(1), // rollup version id + private_call_public_inputs.version, portal_contract_address, - chain_id, + private_call_public_inputs.chain_id, new_l2_to_l1_msgs[i]); } } diff --git a/circuits/cpp/src/aztec3/circuits/kernel/public/common.hpp b/circuits/cpp/src/aztec3/circuits/kernel/public/common.hpp index e07a5608186..9da7d42a844 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/public/common.hpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/public/common.hpp @@ -348,14 +348,11 @@ void propagate_new_l2_to_l1_messages(Builder& builder, std::array new_l2_to_l1_msgs_to_insert{}; for (size_t i = 0; i < new_l2_to_l1_msgs.size(); ++i) { if (!new_l2_to_l1_msgs[i].is_zero()) { - // @todo @lherskind chain-ids and rollup version id should be added here. right now, just hard coded. - // @todo @lherskind chain-id is hardcoded for foundry - const auto chain_id = fr(31337); - new_l2_to_l1_msgs_to_insert[i] = compute_l2_to_l1_hash(storage_contract_address, - fr(1), // rollup version id - portal_contract_address, - chain_id, - new_l2_to_l1_msgs[i]); + const auto chain_id = public_kernel_inputs.previous_kernel.public_inputs.constants.tx_context.chain_id; + const auto version = public_kernel_inputs.previous_kernel.public_inputs.constants.tx_context.version; + + new_l2_to_l1_msgs_to_insert[i] = compute_l2_to_l1_hash( + storage_contract_address, version, portal_contract_address, chain_id, new_l2_to_l1_msgs[i]); } } push_array_to_array(builder, new_l2_to_l1_msgs_to_insert, circuit_outputs.end.new_l2_to_l1_msgs); From 8beb763622b647cb85d9581bef9ab703427910fb Mon Sep 17 00:00:00 2001 From: LHerskind Date: Fri, 30 Jun 2023 12:16:03 +0000 Subject: [PATCH 11/14] fix: test used hardcoded chain_id and version --- .../aztec3/circuits/kernel/public/.test.cpp | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp b/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp index a3895ec7a33..5a68ae71283 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp @@ -236,19 +236,15 @@ std::array new_nullifiers_as_siloed_nullifiers std::array new_l2_messages_from_message( std::array const& new_messages, NT::fr const& contract_address, - fr const& portal_contract_address) + fr const& portal_contract_address, + fr const& chain_id, + fr const& version) { std::array formatted_msgs{}; for (size_t i = 0; i < KERNEL_NEW_L2_TO_L1_MSGS_LENGTH; ++i) { if (!new_messages[i].is_zero()) { - // @todo @LHerskind chain-ids and rollup version id should be added here. Right now, just hard coded. - // @todo @LHerskind chain-id is hardcoded for foundry - const auto chain_id = fr(31337); - formatted_msgs[i] = compute_l2_to_l1_hash(contract_address, - fr(1), // rollup version id - portal_contract_address, - chain_id, - new_messages[i]); + formatted_msgs[i] = compute_l2_to_l1_hash( + contract_address, version, portal_contract_address, chain_id, new_messages[i]); } } return formatted_msgs; @@ -1120,8 +1116,15 @@ TEST(public_kernel_tests, circuit_outputs_should_be_correctly_populated_with_pre expected_new_nullifiers, public_inputs.end.new_nullifiers)); - std::array const expected_new_messages = new_l2_messages_from_message( - inputs.public_call.call_stack_item.public_inputs.new_l2_to_l1_msgs, contract_address, portal_contract_address); + fr chain_id = inputs.previous_kernel.public_inputs.constants.tx_context.chain_id; + fr version = inputs.previous_kernel.public_inputs.constants.tx_context.version; + + std::array const expected_new_messages = + new_l2_messages_from_message(inputs.public_call.call_stack_item.public_inputs.new_l2_to_l1_msgs, + contract_address, + portal_contract_address, + chain_id, + version); ASSERT_TRUE(source_arrays_are_in_target(inputs.previous_kernel.public_inputs.end.new_l2_to_l1_msgs, expected_new_messages, From 19100dba5a968318e2064284fd9d113816add8f7 Mon Sep 17 00:00:00 2001 From: LHerskind Date: Fri, 30 Jun 2023 12:26:53 +0000 Subject: [PATCH 12/14] chore: tidy --- circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp b/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp index 5a68ae71283..733e8ff74e6 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp @@ -1116,8 +1116,8 @@ TEST(public_kernel_tests, circuit_outputs_should_be_correctly_populated_with_pre expected_new_nullifiers, public_inputs.end.new_nullifiers)); - fr chain_id = inputs.previous_kernel.public_inputs.constants.tx_context.chain_id; - fr version = inputs.previous_kernel.public_inputs.constants.tx_context.version; + fr const chain_id = inputs.previous_kernel.public_inputs.constants.tx_context.chain_id; + fr const version = inputs.previous_kernel.public_inputs.constants.tx_context.version; std::array const expected_new_messages = new_l2_messages_from_message(inputs.public_call.call_stack_item.public_inputs.new_l2_to_l1_msgs, From 6d4ffa47e7ee1fb208eec53b569583bc086ff9c9 Mon Sep 17 00:00:00 2001 From: LHerskind Date: Fri, 30 Jun 2023 12:36:43 +0000 Subject: [PATCH 13/14] chore: add comment --- circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp b/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp index 733e8ff74e6..15176d6d1c0 100644 --- a/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp +++ b/circuits/cpp/src/aztec3/circuits/kernel/public/.test.cpp @@ -1116,6 +1116,7 @@ TEST(public_kernel_tests, circuit_outputs_should_be_correctly_populated_with_pre expected_new_nullifiers, public_inputs.end.new_nullifiers)); + // Reading the chain id and version from the tx context fr const chain_id = inputs.previous_kernel.public_inputs.constants.tx_context.chain_id; fr const version = inputs.previous_kernel.public_inputs.constants.tx_context.version; From cd2621bbb5fcde5f47d41bc45e2fccaff55ac2be Mon Sep 17 00:00:00 2001 From: LHerskind Date: Mon, 3 Jul 2023 08:27:53 +0000 Subject: [PATCH 14/14] test: cleanup solo block builder --- .../src/block_builder/solo_block_builder.test.ts | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts index 8b591327035..cea7e2b2387 100644 --- a/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts +++ b/yarn-project/sequencer-client/src/block_builder/solo_block_builder.test.ts @@ -71,6 +71,8 @@ describe('sequencer/solo_block_builder', () => { let wasm: CircuitsWasm; + let globalVariables: GlobalVariables; + const emptyProof = new Proof(Buffer.alloc(32, 0)); const chainId = Fr.ZERO; @@ -82,6 +84,8 @@ describe('sequencer/solo_block_builder', () => { beforeEach(async () => { blockNumber = 3; + globalVariables = new GlobalVariables(chainId, version, new Fr(blockNumber), Fr.ZERO); + builderDb = await MerkleTrees.new(levelup(createMemDown())).then(t => t.asLatest()); expectsDb = await MerkleTrees.new(levelup(createMemDown())).then(t => t.asLatest()); vks = getVerificationKeys(); @@ -253,7 +257,6 @@ describe('sequencer/solo_block_builder', () => { const txs = await buildMockSimulatorInputs(); // Actually build a block! - const globalVariables = new GlobalVariables(chainId, version, new Fr(blockNumber), Fr.ZERO); const [l2Block, proof] = await builder.buildL2Block(globalVariables, txs, mockL1ToL2Messages); expect(l2Block.number).toEqual(blockNumber); @@ -286,7 +289,6 @@ describe('sequencer/solo_block_builder', () => { // Assemble a fake transaction const txs = await buildMockSimulatorInputs(); const l1ToL2Messages = new Array(100).fill(new Fr(0n)); - const globalVariables = new GlobalVariables(chainId, version, new Fr(blockNumber), Fr.ZERO); await expect(builder.buildL2Block(globalVariables, txs, l1ToL2Messages)).rejects.toThrow(); }); }); @@ -343,8 +345,6 @@ describe('sequencer/solo_block_builder', () => { ...(await Promise.all(times(totalCount - deployCount, makeEmptyProcessedTx))), ]; - const globalVariables = new GlobalVariables(chainId, version, new Fr(blockNumber), Fr.ZERO); - const [l2Block] = await builder.buildL2Block(globalVariables, txs, mockL1ToL2Messages); expect(l2Block.number).toEqual(blockNumber); @@ -370,10 +370,8 @@ describe('sequencer/solo_block_builder', () => { makeEmptyProcessedTx(), ]); - const globalVariables = new GlobalVariables(chainId, version, new Fr(1), Fr.ZERO); - const [l2Block] = await builder.buildL2Block(globalVariables, txs, mockL1ToL2Messages); - expect(l2Block.number).toEqual(1); + expect(l2Block.number).toEqual(blockNumber); }, 10_000); it('builds a mixed L2 block', async () => { @@ -386,9 +384,8 @@ describe('sequencer/solo_block_builder', () => { const l1ToL2Messages = range(NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, 1 + 0x400).map(fr); - const globalVariables = new GlobalVariables(chainId, version, new Fr(1), Fr.ZERO); const [l2Block] = await builder.buildL2Block(globalVariables, txs, l1ToL2Messages); - expect(l2Block.number).toEqual(1); + expect(l2Block.number).toEqual(blockNumber); }, 20_000); // This test specifically tests nullifier values which previously caused e2e_zk_token test to fail @@ -416,7 +413,6 @@ describe('sequencer/solo_block_builder', () => { ); const txs = [tx, await makeEmptyProcessedTx(), await makeEmptyProcessedTx(), await makeEmptyProcessedTx()]; - const globalVariables = new GlobalVariables(chainId, version, new Fr(blockNumber), Fr.ZERO); const [l2Block] = await builder.buildL2Block(globalVariables, txs, mockL1ToL2Messages); expect(l2Block.number).toEqual(blockNumber);