Search in sources :

Example 1 with ContractInformation

use of org.aion.zero.impl.db.ContractInformation in project aion by aionnetwork.

the class BlockchainForkingTest method testVmTypeRetrieval_ForkWithConflictingContractVM.

/**
 * Ensures that if a side-chain block is imported after a main-chain block creating the same
 * contract address X but using different VMs, then each chain will operate on the correct VM.
 */
@Test
public void testVmTypeRetrieval_ForkWithConflictingContractVM() throws Exception {
    TestResourceProvider resourceProvider = TestResourceProvider.initializeAndCreateNewProvider(AvmPathManager.getPathOfProjectRootDirectory());
    IAvmResourceFactory resourceFactory = resourceProvider.factoryForVersion1;
    // blocks to be built
    MiningBlock block, fastBlock, slowBlock, lowBlock, highBlock;
    // transactions used in blocks
    AionTransaction deployOnAVM, deployOnFVM, callTxOnFVM;
    // for processing block results
    Pair<ImportResult, AionBlockSummary> connectResult;
    ImportResult result;
    AionTxReceipt receipt;
    // build a blockchain
    TransactionTypeRule.allowAVMContractTransaction();
    List<ECKey> accounts = generateAccounts(10);
    StandaloneBlockchain.Builder builder = new StandaloneBlockchain.Builder();
    StandaloneBlockchain sourceChain = builder.withValidatorConfiguration("simple").withDefaultAccounts(accounts).build().bc;
    StandaloneBlockchain testChain = builder.withValidatorConfiguration("simple").withDefaultAccounts(accounts).build().bc;
    ECKey sender = accounts.remove(0);
    assertThat(testChain).isNotEqualTo(sourceChain);
    assertThat(testChain.genesis).isEqualTo(sourceChain.genesis);
    long time = System.currentTimeMillis();
    // add a block to both chains
    block = sourceChain.createNewMiningBlockInternal(sourceChain.getBestBlock(), Collections.emptyList(), true, time / 10_000L).block;
    assertThat(sourceChain.tryToConnect(block)).isEqualTo(ImportResult.IMPORTED_BEST);
    assertThat(testChain.tryToConnect(block)).isEqualTo(ImportResult.IMPORTED_BEST);
    // ****** setup side chain ******
    // deploy contracts on different VMs for the two chains
    deployOnAVM = deployStatefulnessAVMContract(resourceFactory, sender);
    fastBlock = sourceChain.createNewMiningBlockInternal(sourceChain.getBestBlock(), Arrays.asList(deployOnAVM), true, time / 10_000L).block;
    deployOnFVM = deployContract(sender);
    slowBlock = new MiningBlock(sourceChain.createNewMiningBlockInternal(sourceChain.getBestBlock(), Arrays.asList(deployOnFVM), true, time / 10_000L).block);
    MiningBlockHeader newBlockHeader = MiningBlockHeader.Builder.newInstance().withHeader(slowBlock.getHeader()).withTimestamp(time / 10_000L + 100).build();
    slowBlock.updateHeader(newBlockHeader);
    time += 100;
    // sourceChain imports only fast block
    connectResult = sourceChain.tryToConnectAndFetchSummary(fastBlock);
    result = connectResult.getLeft();
    receipt = connectResult.getRight().getReceipts().get(0);
    assertThat(result).isEqualTo(ImportResult.IMPORTED_BEST);
    assertThat(receipt.isSuccessful()).isTrue();
    AionAddress contract = TxUtil.calculateContractAddress(receipt.getTransaction());
    // testChain imports both blocks
    connectResult = testChain.tryToConnectAndFetchSummary(fastBlock);
    result = connectResult.getLeft();
    receipt = connectResult.getRight().getReceipts().get(0);
    assertThat(result).isEqualTo(ImportResult.IMPORTED_BEST);
    assertThat(receipt.isSuccessful()).isTrue();
    assertThat(TxUtil.calculateContractAddress(receipt.getTransaction())).isEqualTo(contract);
    connectResult = testChain.tryToConnectAndFetchSummary(slowBlock);
    result = connectResult.getLeft();
    receipt = connectResult.getRight().getReceipts().get(0);
    assertThat(result).isEqualTo(ImportResult.IMPORTED_NOT_BEST);
    assertThat(receipt.isSuccessful()).isTrue();
    assertThat(TxUtil.calculateContractAddress(receipt.getTransaction())).isEqualTo(contract);
    // ****** check that the correct contract details are kept ******
    // check that both chains have the correct vm type for the AVM contract
    byte[] codeHashAVM = sourceChain.getRepository().getAccountState(contract).getCodeHash();
    assertThat(testChain.getRepository().getVMUsed(contract, codeHashAVM)).isEqualTo(sourceChain.getRepository().getVMUsed(contract, codeHashAVM));
    // check that only the second chain has the vm type for the FVM contract
    byte[] codeHashFVM = ((AionRepositoryImpl) testChain.getRepository().getSnapshotTo(slowBlock.getStateRoot())).getAccountState(contract).getCodeHash();
    assertThat(sourceChain.getRepository().getVMUsed(contract, codeHashFVM)).isEqualTo(InternalVmType.UNKNOWN);
    assertThat(testChain.getRepository().getVMUsed(contract, codeHashFVM)).isEqualTo(InternalVmType.FVM);
    // check the stored information details
    ContractInformation infoSingleImport = sourceChain.getRepository().getIndexedContractInformation(contract);
    System.out.println("without side chain:" + infoSingleImport);
    assertThat(infoSingleImport.getVmUsed(codeHashAVM)).isEqualTo(InternalVmType.AVM);
    assertThat(infoSingleImport.getInceptionBlocks(codeHashAVM)).isEqualTo(Set.of(fastBlock.getHashWrapper()));
    assertThat(infoSingleImport.getVmUsed(codeHashFVM)).isEqualTo(InternalVmType.UNKNOWN);
    assertThat(infoSingleImport.getInceptionBlocks(codeHashFVM)).isEmpty();
    ContractInformation infoMultiImport = testChain.getRepository().getIndexedContractInformation(contract);
    System.out.println("with side chain:" + infoMultiImport);
    assertThat(infoMultiImport.getVmUsed(codeHashAVM)).isEqualTo(InternalVmType.AVM);
    assertThat(infoMultiImport.getInceptionBlocks(codeHashAVM)).isEqualTo(Set.of(fastBlock.getHashWrapper()));
    assertThat(infoMultiImport.getVmUsed(codeHashFVM)).isEqualTo(InternalVmType.FVM);
    assertThat(infoMultiImport.getInceptionBlocks(codeHashFVM)).isEqualTo(Set.of(slowBlock.getHashWrapper()));
    // build two blocks where the second block has a higher total difficulty
    callTxOnFVM = callSetValue(sender, contract, 9, BigInteger.ONE);
    lowBlock = testChain.createNewMiningBlockInternal(slowBlock, Arrays.asList(callTxOnFVM), true, time / 10_000L + 101).block;
    int expectedCount = 3;
    List<AionTransaction> callTxOnAVM = callStatefulnessAVM(resourceFactory, sender, expectedCount, BigInteger.ONE, contract);
    highBlock = sourceChain.createNewMiningBlockInternal(fastBlock, callTxOnAVM, true, time / 10_000L).block;
    assertThat(highBlock.getDifficultyBI()).isGreaterThan(lowBlock.getDifficultyBI());
    // build first chain with highBlock applied directly
    connectResult = sourceChain.tryToConnectAndFetchSummary(highBlock);
    // get last tx
    receipt = connectResult.getRight().getReceipts().get(expectedCount);
    assertThat(receipt.isSuccessful()).isTrue();
    result = connectResult.getLeft();
    assertThat(result).isEqualTo(ImportResult.IMPORTED_BEST);
    // collect the consensus information from the block & receipt
    AionBlockSummary blockSummary = connectResult.getRight();
    byte[] stateRoot = blockSummary.getBlock().getStateRoot();
    byte[] blockReceiptsRoot = blockSummary.getBlock().getReceiptsRoot();
    byte[] receiptTrieEncoded = receipt.getReceiptTrieEncoded();
    int returnedCount = resourceFactory.newDecoder(blockSummary.getReceipts().get(expectedCount).getTransactionOutput()).decodeOneInteger();
    assertThat(returnedCount).isEqualTo(expectedCount);
    // ****** test fork behavior ******
    // first import lowBlock
    assertThat(testChain.tryToConnect(lowBlock)).isEqualTo(ImportResult.IMPORTED_BEST);
    // next import highBlock causing the fork
    connectResult = testChain.tryToConnectAndFetchSummary(highBlock);
    receipt = connectResult.getRight().getReceipts().get(expectedCount);
    assertThat(receipt.isSuccessful()).isTrue();
    System.out.println(receipt);
    result = connectResult.getLeft();
    assertThat(result).isEqualTo(ImportResult.IMPORTED_BEST);
    // collect the consensus information from the block & receipt
    blockSummary = connectResult.getRight();
    assertThat(testChain.getBestBlock()).isEqualTo(sourceChain.getBestBlock());
    assertThat(blockSummary.getBlock().getStateRoot()).isEqualTo(stateRoot);
    assertThat(blockSummary.getBlock().getReceiptsRoot()).isEqualTo(blockReceiptsRoot);
    assertThat(receipt.getReceiptTrieEncoded()).isEqualTo(receiptTrieEncoded);
    returnedCount = resourceFactory.newDecoder(blockSummary.getReceipts().get(expectedCount).getTransactionOutput()).decodeOneInteger();
    assertThat(returnedCount).isEqualTo(expectedCount);
}
Also used : ImportResult(org.aion.zero.impl.core.ImportResult) AionAddress(org.aion.types.AionAddress) AionTransaction(org.aion.base.AionTransaction) ECKey(org.aion.crypto.ECKey) MiningBlock(org.aion.zero.impl.types.MiningBlock) TestResourceProvider(org.aion.zero.impl.vm.TestResourceProvider) ContractInformation(org.aion.zero.impl.db.ContractInformation) MiningBlockHeader(org.aion.zero.impl.types.MiningBlockHeader) IAvmResourceFactory(org.aion.avm.stub.IAvmResourceFactory) AionBlockSummary(org.aion.zero.impl.types.AionBlockSummary) AionTxReceipt(org.aion.base.AionTxReceipt) Test(org.junit.Test)

Example 2 with ContractInformation

use of org.aion.zero.impl.db.ContractInformation in project aion by aionnetwork.

the class MainnetConsensusTest method testImportBlock3293724.

/**
 * Test for importing block <a href="https://mainnet.aion.network/#/block/3293724">3293724</a>.
 */
@Test
public void testImportBlock3293724() {
    // data extracted from the main network
    Block grandparentBlock = BlockUtil.newBlockFromRlp(Hex.decode("f90cc9f90790018332421aa03282731b03ea7535997fabfa4014f87c79509033825dda9dce865db4afe7b528a0a00983f07c11ee9160a64dd3ba3dc3d1f88332a2869f25725f56cbd0be32ef7aa0ee55bfe4efa56372e0669bba4288404872d46adf42789bed81afcd269e2f52cfa02748d6a9fbf8f6983c20c5c16a3804f556f359aaf625ba7d32ed23059bb8c873a07588383a48f58213ffbdc1375e764d85268a24586e0d1388bf28db27512d861fb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000007b6ef4a041494f4e000000000000000000000000000000000000000000000000000000008302904083e5004f845cefbc9da0e23300000000000000000000000000000000000006000000c8cce00500000000b905800153008606146cdb61b13b94223775fd1caa2abd7bd30edf3d4ec2030728182846297056024347e856f1ee83137ac0b24354457e3b9f7e386f8559797a304674f3fd2581853d4c2507286341c347d2f535dab9890b6dfcf212f1ecbe3f2189547befd362bfee68dc5bfb9abbf23217d9f1aa33c291b1a34bab35aa1dfb25d677e66f828a1c6c4e12fa499c4139ef74538bdff568c9ad18ec99812d3e2112e208fbacef5daa60002f09204a83d9b7ef550379ebd06c03aff26539ef393912d5954c4280be2dbc11a7fe05c60af08ebae8e76490e3d3b9d6c46667818a207533ffa1a42b09d2e940409443f5616d1cec76c8fe4bae125cd7d4d81a9f5dd84f9be3999c8632a59b8fab234a05573378f70aa5dd2a287de7cb4247f8822311f124b6336b6528788ff04ce83eec8399a2662127aee63127e86730945afafc2d5a672a3ebfe38954937d9449eb49a66a3a46b61c8968b08f54831ec6e6aaafa3b37a9c01d229df108365b8b1dc09276a45091e0844b8b679aa0a984a1f7b9b54b76fe1b32890a1da9215b1f43aa81e04fea2ee8120ac4563261e1fa59631e67c1f1abfc1271013b48870b9f66ebc1a2abc7bd7e0be2ca4fffea76f0e097faad2fa373efc6f370fbbce1506579035f4ae9f0f0245ddef2cea7cbaf69340649b841adb24696fa53e3978b7186d8d4d74b8c6f1bc98a389397ccec6b74b17550106917e256e00bc68ad6fe5524a41b9c683721a1102e6e4fcfcb06e5e07e32750f7f9dbe1ca7f75af93330a7f73f50b36f530a5f39e1979b98aa5753cf21d5d740a5310d0f4214f3e1fd85328c97fcad8f2ae3498f4bb4aeaa6f220e4c02557ef6d7211fe9accee66083c2f3a0af18ba471959b1bbee51d20bc773f22989c43e4069f3f91071ede1c59b2fa01f3501dcb00cc69ac193319aa27c7079a5a833875e779e177eeea4d1eda0455a9099047391fba07a5210f9e5a6154b17bf2e6f7e38ea959d202ba052ab6238ae361a07741301286ddb41c1296228715f17d582192ae4f3503971d76336de5d2bba62473f019b0ef0daac732c9a10879237f3f9289c271eb379a324aab654c631abf342dfacb53bfb2a3fa9f2441bcf4ff0564dd46ebbb1544bb35204270f5ca48d71341a7daa108e9dff84a08b98d7ce3d33a6a36c6659e466bbdfb6a0ef9da606e329c0a166bf128be5a321a13e188568cc11ceeafa255a4ca1b660a862d64927f94c4110ed5d99d0641d7199b21a81f9d905e2ad2a650a3985df527201f08fd856492c9b5423098d13e0d654d559c47c837de5f15e488e9a536ea6b9f18922ba1b6998ce3cceb29098e211de90e97f6b1e43cf82c59ee696b28c86b1162c7470c173dcbefb5a9105d6fe97e0a1ea966c9450df20d161509bdb82de6edc5b783202baafe82bc1ac6fdf34dae193b999392b86c297406b05bf6b1fe701aec9cfd9d53380a4a162754b2a75e3bc36984e6a93d994499ba601f0670ce468874c0e4bcc7b6416c8a9dc7451cb2af1d690c8729953ca12ffcd5ae851e701e89b7a5c193386aeb0ad8799d5b8949153dae6b3bdfc3975f74cdfa63a09f6f161388916c0a8db85ef582e94e9f8169cdfc75d97c11916066da581e33a2b30631997b2a526987ad6f73d73480c2b4f5e5686a62ed4a4b8a0ad7a73723c2b4099e141534cc6c8adc22be7aee5d225a1d6d7d2b90b7ee353eb3e5734a26a74fee08c168304bbd05a7d3a37bfe2f0865bf37779428121e56494da2d3081d1bfbb6b952d01c58d91b0ff99004f224ea66d2ef45256afb4f7f7b2e1095ae577d0ad58cf7d69a32b10ecb88d81e46fc0f9615fbe4c352b2f9cbfb50f2328520ce8f5780b53e417e0b8f6aeeebd0cb8cbeaf4c760857c5c83a2601e962bc17c0de58b635256ef1f2456f250f567d5745303cb8e90d3a43bb062653c07dc0b90dfbad2b61688ef6fcc86816c97b702d979f0d6cb880857a3739a10908fead0e65f90533f89e2da0a0f43b9b1476a01c5a54f043f43c4c329a2bb3548d2cec38467ba69403d587948232308087058a1916434c70830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46a9a4d4dc5fd60df35ab2a96bdf139db1e8f88a8fad3aeaa526834aa695b018e33943b5e68e65a4ba591b4a7f9f5434f9dd32569997e86730c62879080701ef304f89f2ea0a02077a38e7789aa0466b70bc9ab37f5f0d806cd82e74c21622aa814d9881020830132798087058a1916c72658830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46a2d3da8caac5a545ac666d815fc426ea8aefc69c3ce841fc7d759d36583515c19af0eaa0d6ddcc41908310545d0f4701c6d34aac8e0235f3cd32e33836237870bf89e2fa0a01ca9a288900158ef711235676f7142155767e64554fb81142323617b78045882ed2b8087058a19174afc58830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46a222fb1a0cb81a61c550937839808f1dd15e68545d5a180158d350a3496c1785e9b78383f887c6bb0ab78f8df6d79fbb74030f3889c2d7e6129aaa276ea049c02f8a88303c485a0a02607bd3d3780fbee965b1ae514a406b0a55cd9e981151d59a0db7d0a423bbc8814dd289fdc25f580808800058a1916207aa983015f908800000002540be40001b8600c03a2a91fb7f6b4ed107ea97455787b983b05bf41df8e1c22a70d29b337b9ebc4a8505b12d2e62653e8368aac61177212726af6354ad4dce3727c7f036f0ccefd1253e62bf7f7f24f440eb708d906c850c2bd7a10ef78867753a2e97c6a1e06f8a88303c486a0a0583ab8893d3d264a84557bb0e432cdc2df079efd3ba4abe7c971d2423621578815023fffc0194580808800058a191637b43b83015f908800000002540be40001b8600c03a2a91fb7f6b4ed107ea97455787b983b05bf41df8e1c22a70d29b337b9eb02ee48b993dab39ca0d528e57cede9062fdb4b29cfa00bfb86b1116bc075881b8ba656b37896ca8f32fbc3dd44f4aa0ead280620fade8c018e807f314ae9e601f8a88303c487a0a00db532ac25cc975c2a6c9f7e69f76884773ac0ad3dcdb9a27f98a4092b2903881564485d1d57bd40808800058a19164fb02583015f908800000002540be40001b8600c03a2a91fb7f6b4ed107ea97455787b983b05bf41df8e1c22a70d29b337b9ebcc30d2f1b1da1c4d72175036fecd6deb77b958748267f15b196829421fadc81b42bb4e4cd02ac3425a466e6a930adfaacf53967cea3da31f6950699c22a7f203f8a88303c488a0a00847d17840989a75957ca06c096855c64719b22db67bfaef370378bac87da7881787636d0b182d40808800058a1916669bad83015f908800000002540be40001b8600c03a2a91fb7f6b4ed107ea97455787b983b05bf41df8e1c22a70d29b337b9eb404643adee2c10d05ce5669ad60bc5c67d383303a94d51d74280dce58b288816d280d0650bc7e8d2d2c436aa2db9b466d417f41ffa1dc0a453954ba36fe77e0df8a88303c489a0a0fa5db20046053eada12a7be523cec9aca8891f69d81d6d34b09c9a23c89c5a881516f540acaf4200808800058a19167e9dfb83015f908800000002540be40001b8600c03a2a91fb7f6b4ed107ea97455787b983b05bf41df8e1c22a70d29b337b9ebef5cddf0271423bfa5f9f735dc48e5807633097ca03bf93a167b5f97b780713f0f3602f83836238ca89728260abb3e111f84f4928e43a13523e24497c30c7902"));
    BigInteger totalDifficultyForGrandparent = new BigInteger("38070954301112");
    Block parentBlock = BlockUtil.newBlockFromRlp(Hex.decode("f90834f9078f018332421ba026374f5d064482ae94f2e4d1066c36464de46f2e93b462179a130da258a72dc2a0a00983f07c11ee9160a64dd3ba3dc3d1f88332a2869f25725f56cbd0be32ef7aa0038f86baa46af4ba35ed35a5192e4f6f253833eb80e0335849c027b164a4a494a040086d9fcd72ba449b9103146fe5a84a6461748be8a790fd842154c3971249d8a09f8704e2d467487158a7a10257ba0a03733970643fa82e826763b5c902dbdd5bb901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000007b501aa041494f4e0000000000000000000000000000000000000000000000000000000082520883e4c7ea845cefbca4a0e232000000000000000000000000000000000000030000002e6b050600000000b90580007cdb02edd7491a689a6b281e151fef193d55be6cbc5bf98d9d2ff74e295d3a14839dff585f0acffcf133c503f8a4e814132f45380efe14082086f00b4b68af75a325761ff5b2fb007930f0566e095a24c1dbe74179813f02f5065a4b9afc3f787b0e1107a614c6968d4f63e0bf199f9bdc0ee61a4db47bcc36bde716bc23f1e45559d70adf19bf31e67865a0de492cbf11fa4cc5c9baa616e3686f2feb5d6aa25bf3cc3971e66e64808ccd39f70f230527dc313ce2abf10c27f505683338585afeafb32ce41932314b094430251af9475f5d51fc781ebe4cfb60ac056b769a675815f57054240711f3597387596ba2f7820903ed67b4d404b2dc745636becd21c2c7a109f72d3a0a55afae4fb73afb32d3b93a32cdd1e498e5bcaea5fb218a38b85f4b22c56d8ac65dd52e2f57ea17cd776f7347c41eb8413c11ac3e64f34dc5b7d2fcf6b7c99b048c5ed4333d21f75fea7f1f63884e8e22672be9dc72e2c80269eb28e8728e9d12e9ac60dc961bbdf8df16fd75570dd3f3b866b11e3617689e8ae8db14d76b2c61bf11171df2257cde4e53aabc97174dc997055cf5d94f78a037246d87e9358567267a80604c5043d0e1c73f6df4980314ebd8bd0836db6c69bae24bf7c6ddb47b663d759c935392b5db3de55190aa5c3397c833b9bc0a3a21376d722c82fe43d72801fd648a914dabfab5fbf99cc03ef8fd309d4ee03f98f1bcb88ef442fe393542943370ba47af0391ec1be3b03de71638f24cee365a3b08ef4e3cf94d041d543b7363b65b1493bd32f6f3ef2dc55becab03291cd74fdfdff661eb5e460d6727b60c7dbbddce32e56660041f5abd88079d39337d681139e64d4954426bad31049565ad4fb2c39faffa400bbde77cd473b2ce561d7225a032bd0a185fcd356e2637f99e367209d803f866740a8d74bce4125e14a4914c35205613aa8a0d0b3fc65a241212afa1e36461a65b023f41b982a02909f2ad9d7100e77057d334678bb4ead302bb22810889bc0c6972d90ec120e96b668d461e086f1a5bb6152c59bab4a7119a0ba4b6bdefc4efc03b9fd45783462b30fec593feefb80eedd272d3829282daf7203210dd42a2b797702bf5ee0bc5fef703a822fc7427ad75a43ee83b7f4cd23d39991233d87e947b2d9a3822957a644ec2a9b8c1583865d9272e8f5f2ee813ca3c6b042ae183b4ddb791cf7282ae46f0c1664be6e502f914e1471c1a19542a2d96f2b73a08c56b0ac8c76cbdf07d6009c759184b435afca8bc881381320de39331b13f824841e452917647d12beb2ea735e76b9ffab613f7a1a081365e497d7773b2bd193d4d3c591be45934c01999609e51371dfba1d7d8f525645a12447f9998b597252a75c93377922754c5c8c264166d166b03ab4b4b738db647a418d60d81486dfc053f94f41e9b5f6c538735e47cfd8e2ee362ef28c7af0837ac83334c4290d3f3cb546c09f4875cde35344955023e466f01b83e74c13bded97c952e12441e9a7aab421cf275ae0b4e710079a10d424a16ce219b1f1d7566aced64d3f70414601978a6617b2589440c26fdcb3ac223d5efa0c4096bb791364a0b33efc7592106ef1cd43c1f097c239203581fd78d664ef6f18ecf75aa96a08cce3f0ebe6c660882625d10120c435dccd9577301c507762126a9417806e65d0621497d5e7de6ae866ca6a4e3b9dbb37539740ec007dd0f5988a8a97cde213f32994f48c12ba5a4a0025b59c3a2c5321f69802e6f05c617128db14177c852047ee2cf092419c25208bc0aeaf6ad69c2de63167c770b98475d1532321d4cefe244925f3fbc680335fd7fc5292672c54496e6306e472c4ee9d7f46f866db0ff02b5074acce2caf99faf7e4ead099a861ba5e6d354e6318109411a40f768b67c66531916b224824e043608f588d5113347cd7fc18e90a971072113a2870519ed56775727269f257d8044014e75bfa14151322775f8c92033556ef8a0f89e30a0a0d61217b261d6a40085246c2fe151bc7536c1a0867b698212e179a21b153b5482a4408087058a1917ceca88830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46aa5d8f0acd09973f54bf23c5b2e48bc1fdc71e72e2f668e9a92d19b267bfebbc311ee38df9fed779a9e32d2075835d72a24cc5a413067cd1eae295189083b0408"));
    BigInteger totalDifficultyForParent = new BigInteger("38070962382546");
    byte[] worldStateAfterParentImport = Hex.decode(hexEncodedStateData("mainnetStateAt3293723.txt"));
    // block to import
    Block blockToImport = BlockUtil.newBlockFromRlp(Hex.decode("f90aebf90790018332421ca0855142fbf91831d2d7ec1e421d397a45e07211ac880b393cc23c8979045d9ff1a0a0305694d2c938b4b383f06946c1bd1363df40c86f721377e321da7abbf831b3a0f30f1664810717a262352f1a04bf4baa93e350a070ae31713dd4de41eac99deaa0b150d8e8c4f8f458ddcfe245695b153ba0e41444f8ea46ccaa73453d372ea996a0e24c156b92a7f6d806de5dd349c768d839267e124d7b34cb44a463c343b466f4b901000008808000000000000010000000000000000000000000000000000000000000000000000000108000000000000000000000000008000000000000000000008000000002000000000000000000000000000000000200000000000010100000000000000004000200000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000100000000000000004000000000000000200000000000000000000000000000000000000000000000000000000000000000000000002000000000004010000000000000000000000400000000000000000000000000041004080000000090000000000000000000000000007b501aa06e3231306b396571753168617368536f6c766564000000000000000000000000830b5e5483e5011b845cefbcbfa09a410000000000000000000000000000000000000000000000000000e7a19f0ab90580003f341d810253379b0d031e7403368e19760f2e04dd49335d9d36e68a266d247fb4be6fc6969e54aafb650407babe35fb6d5eeb35ac8c27c027a9c91adca470597d181650972bc4f7baa03f8371820dd87a9a2790ed1e2b0c1b74bb4407ef43b1a4ed2dcf931a2a2c49fc7372fe18ec435e6e4741897ba2eb1e7325573e2365d431365015aaa59b1de1ae4c2219e81b242f4d19671e00f8c73a17d175371e92e60ceb72a976775b143f88af6f2a4a000c1aa6474823cc1c9c8f571459df7d2c02f2a597d8002d86f13e65b8ace4ee49cb5d483e6eb6792e9b6793351466027a5927818831b8c46fcbee439287191d33da671ba28dbf88875404ac15a7490916ef7cd7c94c37994110c2fbc41dcbbb98bf433e19fb538e02d84d07a24ecf3bb593134a2608b9ed5f894646bf5f0ee48e38334ac11d93bbe3e4e87f5aed0a678c52dba39c5d341cb937b427380363bf039960ac923473bcc20e89cc1658b36aa507b5292ebe07166d5f2e3b86d12b56d5de46efbc629652a287dfe91591d02b01e3bbfc0bfffbeee4863bc46510bcba6f9b57509b26d20e6fb53afb0a1703d1b5dbbc3721db7575da167c2ef2408133d36b0dd9d24c6d1737095b5177ef50f117c7b8fd6dd5aea484e745a1f2075a3b40d3b8643bcfa07b90bb85309af7a5c9366a2c96470ec0ca73f59b49febc4aac228b09e3a39d2088777dee2117627b223d1e8db8706736bd8663b1e634985fd46207fd6a0991f2002c9082a321b0f616ee190fe92e97c42baf89ce3a15a82e7eaf4a5df1cdbfd35a7d252c77110fffb09e2a63c8a6e02acf2640c5245b7535d3696e0e66568e38e74ab1467d817e95918bc2ae1a6d4d2af1b40de0227d0ee47bb01496281c5b26a1ee5617eb3cfd550ea0c3f724932bf01b82196d8103f78c5b5862374a0a2664ffa3d2e38159d4863e79dee295bbcf5710bd68ae3b1c13a96157a2a3e24bce4325e1e8e0477f6661727000f1aa105ef7c072bcde6b1147847139c57b502a250f05eb92684ef2be2b940e7d0cc591e994ea9a9035ca9804af9c89b20697a8fd10c05667bf7b6f6ca2e37dc0c66d226fd72e37c700a6b53d731ad9ccdc3805f96770eb07a3093d6840d4e7cb51081a4d987abf16c6dd5dc92945de03ba592579edb3b3bb6463d635d8165ecf1a3ae719a0c988a22bd1547979fb83c167c9380d43f1be12061e787e3202a65c85b67edb445dbf85c1045769a106bd0284964810612226bb683224f92f7ecef53292e62e11647c3a843ccc47f9f9b0f968627b5858f8ad8ee466ed1d6e58fe54b3eea393925c333d5b718186f81e1e770e34e4d1bc3bf53a966152094b1f3b79225ac1a273a11f0a3ad63bb0978218bd81aa8abf86bc09dc0dd7f754331c35a99a07541359ec6141200413cf16db13662f29bf18cc910cb3e72016e0f4e5402e3114fb24098be8ed9a1fe4253b0853d416e0506530e57b8c1fd31941180db601a0c3984c76afc6dc59318d67af1334dd4a8c7c091a17fc0cddad338a1722efae3f86fe4a807eb1d53d96da0494f91f6c9728ed66a62f6b42df03d9c921fa28e5650d8631766eab97b475c7e49cdd17d23529dfd6b8baaa07450b1a7bf55599a5e0884fb38eb025fc344b7ac72109faf4d8cf98abdfe54a6c16c7c14c9113d51affb394172b7fbc3d5cffa274173b2de4b1f443b6236437553a544631519e5c6a5939f92267ab3e9ca737061e71bea60234f49453f4637818f8b559f9af5893577634b5430e3f9317ad0d27166a24f6e159edc97757a62f84e0c93e0946d99850952b3ce203c415f503034c31798f788e21278ae5dc68833f75be3f0d37dbba240a7625eb9943f50f9c5554732469acfe0eaf1b37329c00b2f952243830375521a4dae8d9cb784ffb4b12f6b0558815fca3275115814288d423f7c8f691483e0b71ad47e5fe3a7637be502119f406eab1607f9c8f8cb75a42852920e276bca0f90355f89f31a0a0fcef3af6c0778c28594d801c94d8d2e8560c67f62706fb05375d94aa2142aa83010cd78087058a19185294d0830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46a9b9e1b1075563bb0dbc9237029fb8d4e6417b26a55ad17b70a2443d305c1168471886d8a4dab7b32faf28365db8e0daffec00673aa417b4e832e379ccfd2660af901710ba0a0c0d2ce127aad2d35abf8abf643b40cbe125ace76ea65b6d8f1e882c51e363380b8d468c5b193a044857e4dec3533b0f5c0a390c7754156bc628565804685fe907d335705503d00000000000000000000000000000080000000000000000000000000000000b00000000000000000016345785d8a00000000000000000000000000000032692a6261736b6574000000000000000000000000000000000000000000000000000000000000000000000000000000000001a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a10000000000000000000000000000000100000000000000001bc16d674ec8000087058a19187ffdd0831e5d708800000002540be40001b860f0998449029d2234483bcd1010ff92f78bcec989d421ac920a2bf6bce027c19eee0e250526071e3b026cc609887241b77bc266a101d790db23402acb96e7fd241b22cf105f394e1b1fbac15f4ff4e44806fc6bb9532a30db7967bd7537e08201f89e32a0a0aebd186ed92725cd91c4851c8da0b6b595a61f6aea71b6eee717e2022af1c882db588087058a1918d66eb8830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46ada13a42111589b4cd4b2f54513be65e29a67e04160e1cdab7cad5b83d803e3dc28506339c348ac8cd2dc30d64deae35d0a0c0df07c707840f24cc3485fa8890cf89e33a0a0cddf3a0fcadd1f543c5a9a42eae8bec46a9d40a2f0c21b17fb80b33643ecd18285428087058a19195a5070830334508800000002540be40001b860c3ab08a9d1adbe11af4f80d50df9d8d0a85aeb16e518d819f90faaf11e09c46a042bf176313bb1302cd97132d4dcf2c6b7677110a37fbe203fa7e61ae8a8f9cbbe46d119e242207ed7ea720956c8b2aa4076aca98ac10be32c1411259e8a270c"));
    BigInteger expectedTotalDifficultyAfterImport = new BigInteger("38070970463980");
    AionAddress contract_cab26 = AddressUtils.wrapAddress("a0d270e7759e8fc020df5f1352bf4d329342c1bcdfe9297ef594fa352c7cab26");
    AionAddress contract_c3d4f = AddressUtils.wrapAddress("a036264ea31559621f5950c1dfd063d0a3b89d555e7a3ce732e97fc2eebc3d4f");
    AionAddress contract_62127 = AddressUtils.wrapAddress("a0fa1fc00ed6616df7bf795340019c773d12b66f834726f09e0cf86928b62127");
    AionAddress contract_aa803 = AddressUtils.wrapAddress("a0b75b3dffe8d4f0e3c5d07f31437e939040593230d6658cae57b2a0fd2aa803");
    AionAddress contract_e3633 = AddressUtils.wrapAddress("a0c0d2ce127aad2d35abf8abf643b40cbe125ace76ea65b6d8f1e882c51e3633");
    AionAddress contract_685a1 = AddressUtils.wrapAddress("a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a1");
    AionAddress contract_e26fd = AddressUtils.wrapAddress("a062913c81a71b819e3f8b453ba65584439c5629a8ff6c34d1a28281ffee26fd");
    // setup blockchain with state before imported block
    StandaloneBlockchain blockchain = new Builder().withState(grandparentBlock, totalDifficultyForGrandparent, parentBlock, totalDifficultyForParent, worldStateAfterParentImport).withDetails(contract_cab26, Hex.decode("f9066ea0a0d270e7759e8fc020df5f1352bf4d329342c1bcdfe9297ef594fa352c7cab2601a017b531d1f727f993328da132bf62a7cbc54f0198dcf3cfc9f00e02f3659ff9a480f90627b9062460506040526000356c01000000000000000000000000900463ffffffff1680633d5840631461005f5780635df8122f146100a657806365ba36c1146100e3578063a1e6b0661461016c578063ff42bfd6146101c057610059565b60006000fd5b341561006b5760006000fd5b6100896004808080601001359035909160200190919290505061021e565b604051808383825281601001526020019250505060405180910390f35b34156100b25760006000fd5b6100e16004808080601001359035909160200190919290808060100135903590916020019091929050506102a2565b005b34156100ef5760006000fd5b6101436004808035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190505061034d565b604051808383906000191690906000191690825281601001526020019250505060405180910390f35b34156101785760006000fd5b6101be60048080806010013590359091602001909192908080601001359035906000191690909160200190919290808060100135903590916020019091929050506103c3565b005b34156101cc5760006000fd5b610201600480808060100135903590916020019091929080806010013590359060001916909091602001909192905050610592565b604051808383825281601001526020019250505060405180910390f35b60006000600060006001600050600087878252816010015260200190815260100160002090506000508060010154905490911491901416156102695783839150915061029b5661029a565b600160005060008585825281601001526020019081526010016000209050600050806001015490549150915061029b565b5b9250929050565b8383336102b5848461021e63ffffffff16565b9091149190141615156102c85760006000fd5b85858585909114919014166102de5783836102e3565b600060005b600160005060008989825281601001526020019081526010016000209050600050828290918060010183905555505050838387877f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a435060405160405180910390a35b5b505050505050565b60006000826040518082805190601001908083835b60108310151561038857805182525b601082019150601081019050601083039250610362565b6001836010036101000a0380198251168184511680821785525050505050509050019150506040518091039020915091506103be565b915091565b8585336103d6848461021e63ffffffff16565b9091149190141615156103e95760006000fd5b6000600085859091149190141615801561040a575033858590911491901416155b156104f45760405180806f4149525f4143434550545f4d4147494381526010015060100190506040518091039020906000191690858563cf0c64b28c8c8c8c6000604051602001526040518563ffffffff166c01000000000000000000000000028152600401808585825281601001526020018383906000191690906000191690825281601001526020019450505050506020604051808303816000888881813b15156104b75760006000fd5b5af115156104c55760006000fd5b5050505060405180806010015190519091602001509060001916909091149190141615156104f35760006000fd5b5b8383600060005060008b8b82528160100152602001908152601001600020905060005060008989906000191690906000191690825281601001526020019081526010016000209050600050828290918060010183905555505050838387879060001916908b8b7f9096ccaf3bc136981b8a043d4e5ef1396a340697147a05ff0597f635003acc0060405160405180910390a45b5b5050505050505050565b600060006000600050600087878252816010015260200190815260100160002090506000506000858590600019169090600019169082528160100152602001908152601001600020905060005080600101549054915091506105ef565b945094925050505600a165627a7a723058208af95ce52c89ecffb3f67449a149ba9fbea69fe903e07d6c514ced5b647aa6e40029")).withStorage(contract_cab26, Hex.decode("f9410df876a0788971c221e434af0efcaf5e8f13f987f29be32525ce5b0e28e31874ca40c056b853f851808080808080808080808080a09f1d3cc1940c2762f4114785d560a6321f198b84c8711175b0a610bbe99750c1a0930bbaaa41fda1ea815ac0889ec2bbfe6089b45ba8551afd3eb63cd377b6d30c808080f876a00ddbafc0e0dff8f22a92e7903b867321a60f798c4639cbef611cf0552ca5a823b853f8518080a0b4e19cdd265a84c641fcaa76a0df3b55978bb4e0bb67ecc76d6931e6a16a88628080a06455b04f6d09f136dd027a31d55c5b067625fa66d50d9f9dc17f27c63b46ed4a8080808080808080808080f8f6a0fbb9dfbae505d1ebe78d31f65d7acf8def64924b67a41bf349946808cb365cf0b8d3f8d1808080808080a07c619208e4d50311ba0a4f15fd5227292675bffbcb1509f7ccf2c46030c76b55808080a0e4d46454e6c8f24ec883efd33c1a9a8ecccc337986bfe28ec27951ab069226cea0d367385c7652afbebf775dcbf52049070a61492525835d3e767705de6cff49c3a038b4b768b302e9bd71d25d8886a1c7c678dc604c645a056940b70aa086683e6c80a0f80fcdaddc6c65555f2770dd0e59263da1722cbf6fc64fa68fda4a36c09e9023a0dff4072ee1b2a876bd4c505eacb512e06f29893d736261d00aa3ff56abe267f680f855a036ae1b5f6884cddeaa8e3679c15ecd1459771b88555dd4a562f3e4990d7edb6fb3f29f39ce967ab03574af7e94b4cd16b67278d412e2ead48ecacb6535c2c9d7f9529190439c5629a8ff6c34d1a28281ffee26fdf856a056ac4d64284d26e2d19d4fb99066e966d4fc401f33b18c1b0d72e439b25f5074b4f3a020b1ba3c94d5fabffff795bef10799adca52b893507b4b4367d6724e9b9ada3b9190a06ec711ee13d913bab46cfd615914ccf856a01f2b0e22a8bc542a934a4e459b8e91725687ed5da13748ad94aeb17524411602b4f3a020bb51e3896f5f735473094765f1f8b64548c9ab9327804b487d837bfb32c3cf9190723c5c86298a4b99d436b0de6959de93f876a0955f0457ab439b9f4b15dda9497eaf9ecd6963dbf74da2c51ecd821955ae9c36b853f85180a045cee60ae09659bf5f2eaccedf67490ace96654ef0505fdcd27ef867d0b2f68780a087847a340d57eeae7fbfc972b7a1ed7880191cb88b9e76c9c7c0cc472e26732180808080808080808080808080f856a0fac7cbbb14065869b5224580430971a0216e98a78ef2db9f9baa7af62123f5f6b4f3a0200e08b9fab50def1c8ae0ad44dd6bb2e992b3a7dbed7818daf82440eca808a79190a0fd1887216c9620a64a6e41fa4c345ff856a0600dd1fb01dd454ee579f34adf14158573e9830a7a79faf4d7477a5b7e15d1cbb4f3a020dc68d1fa04172661606a74d732819bb4d8af249a7c6c5d91eb5d17cce6da709190a07406a455df4ca89c7157ce24201690f876a02c8933c959c8670ba40616e739a92e6a211be8d8525929fa9b1f40d03323efcbb853f851808080808080808080a0685c7c2d67d4135c7c31b6ef59f25e693db934ea9968b0c7a1e835fc8ae71f988080808080a0d52ddb4ce2b7dd123ea5788a701bc30089cc51942f64ace7b000cd7c89d8a95580f856a0ad120a4993a5e5ddadc96299eb3cecd605dbaebf50946df6219d685952c4f470b4f3a020e248d2ae1eefa6f91e6b60926386cdec846024b9c3decbf704b26de67d8938919066ffd2c92d3b521444069cc15043bdd7f856a094aa3b5c3dcdf6e7baf220b040370ae5522f52f87bc38ced3ed95b7e6ac0c0bcb4f3a02018a65f4ebe3f9022e7ca55d51aca34441586ba206e29f3544b43f70089f0c79190fc496abed83b2db7f9f5a574605880e3f8d6a0d1618349e6813f5cfc0ae3b99ad6873d060a114b17346662f891ac210ac837b9b8b3f8b1808080a007ccad3194eaafeb7460acf796fc03d3f47fe4ed7855353702fcfc01da0bf8798080a0dfc0b6993fb99afc1fea1f2353fa6639f79faa2fd26adcf5758936c1c98a451380a0d9e5ea4d5e838fe45f2f0885a9e68244694bb817ebeb923fed8baf8802c4e6d4a0f86f339d1058feebf6a3402d0ce64e02c325f727dd8c9cbf280ea192970b756f80808080a0542f5709895e3c35d1c02c0a8df15b0d46089fbaee4feeb421dd2ce499e3277a8080f8d6a037eddf9c5a3f10de73d62468b38baee49389b645037e4fca953872de8d2ae583b8b3f8b1a09b2cfbc18dba6aeacd40556e0e53f369b093627df7eae35595ee25c4d49723ca808080a0ea57938d6f6adecb3fe7da79e1d92bc7d0044854cc369cce111a8b3abcac85bd8080a061a32707b1ec79647c453bd8450533a7da1205d9d0767ecdc5e16d91c6b02fc1a0466a117cd13c96b18818d49859d920201e3917676bcfe88b91e5776a01e79fbb8080808080a0a3371060ecbb55130ca271e208df30204b6397d8e2243aa867aeca33c9e0955a8080f876a013885e2135b874cc911fc7d2e634ea5a4609909c77052d7866f632cf30860f90b853f8518080808080a009334c0a25eecf4c9e6407db49c7ad8f72e12552a8e29916850d2c41d62203208080808080808080a0b9cc52b39eaf087d273375174d57ebe5ff72641261492a2c5fe32dad88ab96688080f856a0cc833978e1e833773b84d44e6006e269daf282e398623700b10ff7473be4e8c8b4f3a02097ad7c7175976d0a000bb4a5fcc8188a5f863aeee161317d37d19591f460f59190a0a4ac19dcf51daefa0a947684c72fc5f856a01c7ff598db30daec33600d09269afe7ada647ece3612b702ac5679876061d651b4f3a020c1dced084213c05967ede93e35cf3596b6be5ccb3586fb0552d22a836cd1129190a03410cf24ef75ff527e74e050870b0df855a01348d7ae5fc621432eb0425b0aa7d937061739521d86a841738c8052cb5ecaf4b3f29f3856e897bf71ef4803a78b94b499d27991a5bc479be8a074498ec8c2c835279190a0c4b8687c3305930ebbb6e4739dd4b2f856a07e455536af2128bccc47b352d1a400a7d75e0d1c545cf3258453cb25a4d24794b4f3a020fb25d0e55776100e595a7f879bb8d56aab714d63ee6bd7b93c99e858361b0891908916256fd5b13bc6ee8db13140505e51f855a03601b9d51bf36810e943a1a5cf5fe72e688dae218132306130138b5d42408cfbb3f29f319fe1a7ef2face250842978e4ae1b8789549fa03f518b68d874c399bc3f4591900f094353e6859ed3c3ba95488ddbdb0cf856a0a00d207dccba60799f6fffdbd7ea253543b1afb6f3846e7bfb5af2d01cd56d2bb4f3a0207b9c96cd2abb41891642dd40f3128462990a0cf81a24d90f5a532bda670f5b91909fbddf134523c5efa403914f7c4adcf1f856a0d8310fccc8b094655e94574a74d633e0dac1f65b289b786b145852ecb1fb8729b4f3a02099c1dce788770d78f265b53fe0858691159e741cc1ea35aaa6c60c8c8a1a0291902759c01b70dd3ca22cb610c48acd1a0ef855a09b361790f433c5d6133b1b8997ee3c49ae8cc0e53dd754d3143e40847525414cb3f29f3c079e8d0f6144c4b7d3fe03a79d7b46dff37d735ff6f304107b2acabb8aa29190f0b5c3ad891553ca6d8d4f6fe1946a82f855a099ef5552d2775a94cf5157e138aa7098f80aac91f7c3395a0c8537e197659898b3f29f301a81c7d6275b65fe2f0c38ff30df941223eca370814002ff5f0db9feb6fc9190838bfda00052ffc69347073094f24df0f856a00978efd7012105813bd133585ee7304725cc07f634404d57af9b22bed33e14abb4f3a0200b0c3cd38c23984d65c40f90d3ea592a9c5f39fbc7bd05ca24b54b987bcf1f9190a03d2f7fc9f53b8513691b3d5309c704f856a0795c6b220a9ad547c58c5c7f03fa6e1f6e1fa401ad11eac5edbba04ec15b03dab4f3a020c5ef3f9174eda80f0fae1c9a0e61f4c35dca1add27305bb799ce51543c2f309190a0725a463c7dd5eed6b27cdbbedd0112f876a08d29ec066fa88f3fbeeca49876d4dfad5bc9627f8f6bf04e37bd701d3beba2a2b853f851808080808080a0455541820217c123eb1a4e995a0dfe2d81916d4202f892e362221651cdcd6eb8808080808080a02861d0039cf950b510f0f6ac4be8f0c4f5f5b406bc827b037f0e9cc4c9a444c8808080f876a003645975db51b49767714792dc7eb8c0e63d4210ed3b734e0cd0bb80ecfc232db853f85180808080a05bed3de7860170692f1bf4d25991625a3c3e9128b20ca1c16d106a9eb53de25e8080a09fdef45a3102f268a7cdfbc2e5afe2e77a629c3bd30c062af02f9c908fa2ea4f808080808080808080f856a0c6f07d74b36b9b59b2d1d92016aed4fe72b45f5db36473b9ef8c9b8f2bb9eb82b4f3a020bcbb6e3622b85b66b6e65d1440fc8b918b05cfdd8b1b21c9e6c34d49b569929190a05bf4d1c9482130810617277169fa3cf856a0db285553fa88ad42ab1cff6821bbb8972371f6f13cb18e0c9198ead5330dee10b4f3a0202cc07a47058b77aad1518393326f43882b2cb5357b522ba3c0d824fb41331b9190a01fedb4e549efd13f406c152f8250caf856a0fce72e67195d52ebebd190967c18f893759c7061811d1d5f6bcb96223a193b20b4f3a020d698c06198eeae263f6529042ef845acca916a4d3774f20619746293afc8869190a3ea6fa432cf8a57ef404ac5ee8deb32f856a0cceeaf6d578506fab791725a471cb242c68c7b550f9902ef7159f94230144185b4f3a02050f85c51a4cd3c5d0bddaf580cdb6221ea15afb8ad9d6ceb061d8ebafddf169190a037d06f632254d77be16bb3c5f428c3f855a02eb8c9da8a15c67f2404dc0f0e0a0977069586596055375159510ae62710b824b3f29f3945ce35a3eb27996b5c9186a93e3deb0ae27c2bf0a599086ce18380756efa91905b581aeca5e78781efcef4c957a7a14af855a00af169f694a0204c2bbbd4cbb7a7c0c0030c1bbb89585f038bbeba2fc760ab98b3f29f3ca938465fa95c5fdddc58dd3ea55a7ee6d45e4904fb604bcafac894bfd0139190a00da8071a3aeea71737c92f909535b0f856a08e67b7d19bdc0a0947b8a6d0c50a1fdd297b40e08d3c21295d809b0217b42f1bb4f3a0200c06d0de54bebe8a4b99e8440ced39e1ab391fe72bda818d35325e55e73e589190a000912b440f6a5daf60f37b06b4b85af856a0fc87d057d569c9554255a0667ea790ac17cbabf93357ce46cc1f7d866d8cde6cb4f3a0207453907317d2cae3729228861bb611d9de4c023065986284742309dc7e216a9190862a10a5b24a5b5c533d14489b92a54bf855a0f3e0c5b650e2da5def7ac14737330cf78010ed6680a362bde36876cd21fc2863b3f29f20f6d14146d06acabad0bf828bb99ec288c7b98275e506de9958aac9a20e839190a0cd91d0bd7937032c0b20b73decbdd6f856a0db1ce4e424839fc809bab015def4cc4ebbc7d5e39db93329eeb223425165ccf5b4f3a020e03206ae4972889c137db05f252d811b0bb3ba175f5ba9d2cfac438f1d73da91902ba158587e9bbb709172ef72d8156e0ef8f6a0be11ec205ac98f4a8e06ecbfb6acba323ea00416761e67a04ac21db5edaf9e09b8d3f8d180a0189716521e01ed528796ed4254db20d40e8a2210d8c9e5fb4847a5939ae67d528080a000cf4547bbaf5d1702c1ad0c83706397f148d6e91837ecbfbf211a5d0ed96658a007976471676eb57090fc1bd6f7e5b6acf79592a53f1b2631d4326e66dc6b41e880a07aadb6fc6a101f0278b15319a3e5de0903b051c2ba87a1dc604217315e55ec9780a0c66c6da4a0a9089fe766b11638a898d94e3f2211d01627193e1f104b3f09d3c98080808080a0c2189ebe765aace70627396b64ef0a50a65a03835dbf21400b9d479bd13e408180f855a019f5d07cbc29e6d520561bc52bc3317494a51e2110765e33123ac7e420803bd8b3f29f38d27b068f98b6821d87d414c4b8b8812e48529fc7f2faa886cbea2f1293d89190912df815452ed5a4b8e601c998c5c5dff855a0bbeb99a001e7532012244c5eed05ca277f8677358d5b9df9c21c791935fde666b3f29f3e4b4322748a30d01b3d6998e39e0f99ca5d7e0515ee16dd08927d168d365e919041872f648b51a5ab49a534a0d440f62cf855a06cb49fe7a2e524e2c8c756a42bb380c7e957683477b3e23e45f9e9e87060b49bb3f29f209aaf35dd47af6276675480c471c0705103193b5846bdbd9b34ec2d1f24539190a07721ac7826c585b675bed7394d8028f855a060bd5385a838c68869f49a7aa71d85a8a2cba6b83bd6cd64256efbd2c1c14649b3f29f202825e7ade676cf281d007e594d37954f5afbe2d777d0b9297f35c1836d069190a0ef004560df78f883969dd3626df926f855a0758a094be7201f66baf4903b597a9a8944b0e6e6f0c54c73ea2f3e786eee3646b3f29f3318c04c6d8b9a19d400898199c6072a33dbbff718921e9f51188131b3b7fa9190a010259b8e42c408e6b3d8ff5b6fec57f8d6a050f4c7007267814a33d2a8fe35e1b88c2289d3417f620fd1bca860247c376c16b8b3f8b1a01760bdebf089437225e92799947534f492e7cc4299de7f8182e7eedbca01a49380a066616365197170703d9e6e51f23ce102acdb965634c07e460858966e98879601a07cda752225944feaa452349dabb8d078c44feda7302b9cc376de68fd2e2fa2f9a09042d896f8fcc1590e04c0fb3276d44b86c10e269518de14dac8876a90476bbf80808080808080a0aa1c596e3f5b9c697826ef0e368dc25e187ac64b6dda077759353e09886625be80808080f856a0dd0ebc1e02ce5c39c9793d46bc5dca663ef5276ecf68805d6ce51eb405f7ffc1b4f3a020074a110e2c62f9727e781dbd2ed8376079ebbae9e38d416eb408e7bd5c32869190c5c6f99930f2db94f6afab2d03c387ccf876a03030d5e273742ea2ddb9f1ed780b732dda81dd0659c237d92ac9c870dc8ef404b853f85180808080808080a07162ea81221128d80e0270702b3b4427905eba381e1e1e8a0e3ee26c94699d45808080a091c3563caf8f76d7c44c6b8a291bb148f8c97f2ccf225b62ce6c5b780c54ea278080808080f856a026598322ae014331078ac5c25aef16cec574d858a535de77360f46383025e8c5b4f3a020a478ee1343878f1f6070fd398320f52da2265e8729273b1194ebeac245a1119190720986f93e79524284e3eb69ef459bd8f856a04282f2b6140da10f3cee34d32b98fe8ecad74bb98514ba7275f4ab7efb6034b8b4f3a020b6ab82af7f2a820e23f7771a5bc6c147454ab12cf57444e3afd39ee9eb19139190a0e4cc383be0044f367468b9c5ed02b2f8f6a05c8f9a2783c1593ac68c15b5bf1ce29b8ad6feee3b9c9e88f17489674efe76c9b8d3f8d180a08251ca9f60edc6a3a9b7118c3a0a072585dc626def95b6c905b8231de6b6c075808080a0c8064ca792b4314403679211355d6cec1262278be142501695482556ca93ea8680a0c09411e2bb253e3c1e97fb6235cdae38bf11af1234bae6accbb59e09890a05bba0a9fae9835694d263193f82d2997d3278d135f261be4f3f0fc58cb44da8435f73808080a02472f0a4bfbced328ec356be14db8b5feca85331619aa797a6fb41ffc995b7c880a02afbd8ae5d5ee744cfc352e2e31da1cbdc68f3a8b0f86e0aa6057675ed7c4de38080f90138a004853709c41624bdfb4c20360d5447aa9e2b5c6da6982f3e872a11791c4cecacb90114f90111a0049632527461eb7a74750258a02a53aafc76fe29ecf6d4372c3d6f733124c14aa0391bb90e7958bccea70c2cc8da6f7e4bf19717eab7fc9cbe8ffb305eefa2a30c8080a0ea916513a029af1f8f2275d17a442d83591e445f529c4a8c3e4069dab35de706808080a0396cb8dd55590620a8ddf80a083cf782c176fd22912c3b6c59e7fc742c83468680a0a0a06218bed9c7ccc69f1fe8adbd5a573cf6096734ccc50e9a7930ad821865cc8080a0a9a02598f858b93d880c08b3d85e1c1f0dd2186ab2d073e4be9da8aca9a2160aa034d83628b645191c694f11a60a4aad830e6f81d8b7196520ced8146426095f07a0aff40ed122791aaee2c940e733552989bb4f817b2ed7b7d84ad696e875d6d7b980f856a0a44881d27be8f0727269ffa3dffc84f9e81855b9da1797f77e68ecb9789fcecfb4f3a0209eac2d44fd38e83247bde6107d52d413757b56e1ee828bb5e4856cbd7d837c919074da540ade4dc522afd5eaa85768d23cf856a05c4e13acda5e0f876687f2968a2c204aaf13eb0f3643c30e20ef7547d1933636b4f3a020fffc970b03556eb993d3a73d137edacb47c53c6ab7a3ba096bc0335fcb4cae919058d7c42d5d64feb122ea4dd0ccdfde86f855a06e03417c39d974df2b0f9d1979e04a9d0060663174933d2a4628ca5ca313cac4b3f29f3f36602d21b093355ea01a4239bc0394673a0755be608370731336018a4c569190a046fc0ca4160d184be461939d2d0471f855a06cc468a8dee37e84433cce4592cec44eeab92ac6ac16b771305a30b0b0cf5cf8b3f29f36de13920a777b43d41f874472b69fb8bddc7a46ec11c746cd747c3db77d8a91903e3be1a0057af3dd7388d6d672640c21f855a0bbd415b25ca9fd96ea4194e019bb42398dd80a95cf49a8c8e2ceb9c7234e13b4b3f29f3edcd793d6f636dc1162ebdc53273d911053562076d7bd3945ecbd3e9c82af9190244aa1de7e38b135c70b51b95b1e1023f856a0654bc4cd74dd4edac8b3db933744ed090efc59073ead2c3421f0b1853c3784c2b4f3a02013bbae4ceb6ed0bcfaf9cbef6fb02586babb23f8932787d8c975914da196c19190d0dab1ba79d63a35322601dd3e08decdf856a0182cdeba4a5d84bf62ad70adcec3ac2eb6a3a37631348190f0fd702248a07be7b4f3a03272747956ae87ff7a2a4b58a3f98859907a511fc3c9e4cab430fd8dfbd504ad9190a0909e96e631750a5cf5995b65783a97f876a012963e5602bda75a0bcb8c90379bad3539515f9128e68b2bc7554f1896ca4e39b853f85180808080808080808080a00f367739aaa7f4939049b4a06890b3a3a77467033f185cb6eca730fce6f713b380a03246f895adb5fa601e78d632b31f13ba8d994756bb86865c86e2388df7f9706c80808080f855a0412605c025a76e01ebd84c85ad2697a41a7839901e8b0d25366f24732a355d84b3f29f3f3d85ecc359bfe08726ae3d9b2e22e00e4fb874b1f5067f87bd5b057b439f9190e242316b567a64f5da28cda4293809fbf855a06da23c373fdf4c496895dcae617c7dff19085e33f09e357842d7588024fc48d2b3f29f388e3eabc485e180f9c1af38835f5b29ec5efebdfab7d24311bbf69d2a971e9190a0ccb37891fbdff7cfafa67e7f399d97f90158a017956bca1da65e5106ce93e7b8a71c8219066c4ef8c63d7dca757dc290eddf9bb90134f90131a07db488e8cfabe2f9717abc3471bbb0b1baf1f8df43cab83c09aa7c5a3bdca8d9a0025b9c0a3010bb99ce2d5c6160d347d9634ac9511db956771298e60e3f241919a0c930de9d38c47bbabb68b95563d363f9c605b7445e8407dea3dc4a11cdc407dd8080a0aa35378d12feef821ffae31dc7b3265931a66b5b26a458d5feb8ab1e4f53caf6a01bc3ede86d8d639427bcae0ee9cf4fdc8269b1834fec1a5470bf6d61dec6bd0180a0d9e65fd4c7ff6b877d8fdd0dce1c14c8ea1b7bb021b3d2a488f4c2a0ff7054c280a0078cbabf1e608329d387a7d9ae3f666e32d31ece03e021b7e8c16794167b882e80a0e6731a0ea86657baf528607e72b1ea83052f9162a580fd1180304d881085a1308080a006113c3ae43309fc4b1a03bfbb729502ed93d7d31b3d90c019fc956a51a2941a80f856a03c5c54a27633de03c524bdc3f4e01968ac323c928a815790a4a6d6b47cef956fb4f3a020c5e616d43b2354cb5a91209c6a7305e4360d069e107336dbf435d9c7b387fe9190a08024faefbf2a5035ae74b95102b4fdf8b6a0b62fbaa5c0b16491f50d14d25ef45fb968540f2e669c03002291e411275fc5abb893f89180808080a08a8f541b5eed3db7f34e469bb74bc173fd951c3e63e773d0b9914716ed33841880a0da24d83ff251743716406bc3ff3911854dd39e5cb1668be314fdd84cb7270909a0e9027df9504f47bf6f63f14d56a9ef7216cf4fe8c3100fac63c7467cdcaf6a6380808080808080a04fb8e5703ced053cabb71ff1e05fc8febe033f384129eee2ff26b70baccacac080f855a0e114df924af4eccdf78618f1c359129e413f1c90c36f72265d7ec57ad744bf93b3f29f37a5bed6b0adf940ef2b39dabc3056bf711edd63fb8832eaf2f4ba13b00f449190a07bd83ff79f6a511f019c8324c998f4f855a06078e36cd63de575dd25cb2cf233827a851a8ac91b7c10e1e06a8c6f18611d47b3f29f38e7709d461d463ac4823e376c52d7d0e086f61f9fdea32473a9ce6336666c9190cd3c108a2a51a7e911b14f72dc4613a8f855a08a17f861d2941b9537bd9a87fbd76fe2f30326163e4ae42f693825ba2e0aa2d5b3f29f332c8f4f4fdf84b68e1d95d020ef84ccd8858431b0bea92ab48dab6924d4829190a0908d0110c82854ce0750473b82a21af856a0a5d585f033519cdaaa0a2cb095be0b75229e455abb5ba854a8af021b0c90aabbb4f3a020a1dcfc5195002aa8f368287abf5f8bc81aede815d301f207a7b37e948a6c179190c198779b6d22926fd46fcceb567d8198f876a03a269a3c32db88054eeb3acf03aa5ab89a8c9bf93cac53e050acd7eb1b4de10bb853f85180808080a0bf3cf6789998ca285eb774ab6bfa9c975936564b2192fa3106df65d3d9c9b8b7808080808080808080a032c1caab6c4ff4c01301ac8aa40806d617379214d293fc0e888e190c50ed90f68080f856a09299de2d468d5d7928212d5d67ea356ac9dd0bcd055a1df14138b748e0cd2fc0b4f3a0200b6cee850a00880fc62ac6279d892cba4f489643ef3daa9d913266e07ff47e9190a0ef815c27b4e00bcfaef644a87cebf6f855a097e3596084cc965435ac20c3ec836550b467e885468e4804daa7e0c78d31780fb3f29f3b69fafa0b845b63a7f55ed4f34ca80fefff1b9aed4c96209df0aa5e38d84f91903502fccd078bd1ff0321ae88f8ae6521f855a0952bb5f66abe416970ba8bc15b5a6fe62c2723f221f9099b2a7d876cf6d34124b3f29f3c950d4d1d0c715c575369acda455956af50c2ba36c3dbc376e5e00e8a392f9190a0e789c18a5761ad66b2538bce24e76af876a02fcd0083007ccd84370833ba4041876ca47ae2e7df3081b568f8ee7274f99276b853f851808080a017a034649af716fd9a46a21078e60799d2f9658cf35dfab8979d5c4631d961f78080808080808080808080a00e198a3c519117f29f4d3480c5e61e6ed7e2476567830dfa6faf663b3de7009b80f876a0ab1ced1be7482d10563fa0ac4114f7276fa1dda5c00ce521aec74afc8f517cbab853f85180808080808080a0e8ab6855e330ba6b52b3495ab2d6acdeae27daf2a61a2c56e76e1d75bc4d4d3ca0b76272d1fc4b6df3c24c95460bd0de85e7152aebb1ebf2c24152ecc0e32fb8b88080808080808080f855a0bd24b1795b9e3fc393c5955c3f16354b2b9c38cc8f9278d5bbf2f1b9722c3d6bb3f29f3cb3e36acfbb067096c27bf680e6258e991ad64da171ada6a35ca46a2a7d279190f2a4b18eacd82be83c1a1fed262b37e0f856a04b5006baf9dc32821f41ffba921e16506aed63e6aff2bc1b1b376b1f564d61c3b4f3a02017e1c952cd59537681f4be6139e0302ca29e4fa74ecf64e8081011c97503539190a00c172d5d18a9329dae0d4489339c87f855a038c6c8d67ffb9ec539035ef124681cbce8937352a2c189e665a1b0a6d1e0ffceb3f29f3e9944f3bfff038388fadb35f0009874823db1fa7ed5fffe6b44ace05bc89f9190a0e8dddbb3f2b316c091707848fa374df856a0ad48c6523d698e833cfae8f8aa1fc2b1d93c44b45c0b211d5a8c74b85325bd09b4f3a0200fd7bbe5bf5ed33f8b2dd4a8557523597eb1deb86fa5ea1a07cfc14c80660e9190a30ab1b435c557c082b485c1f409805ef876a0cd6df92cbd16bb23cd5e370388d1b79c4cb211a44f87691ac802d689d7f6f40bb853f8518080a01d1d33b67918d16b94a0fb8e5982efda404b42fffead0ccaf62b1bf0da0790db8080a0694adffdfaee7bf7dc633ce5133da351cde602ed1e456781a6c68494de7be3d18080808080808080808080f856a0eebf7047aa5be9758b113a329398f56904ea148a22edce37f50b572e462b2ebeb4f3a0209a90ca74e49312ed4cdab0dbc74c0ce085461d511b0ec25ddf242f75bfabdd9190b95603ca47322a5ccb7bf08583c88b11f8d6a0f65f6dd75db75e1867df81c36e476d259759d02e1d05b43c920cf1a49b7955b4b8b3f8b1a089c10fccaa99b8810a1a44d3049501038f273ea161b0a2b7d3acac09c16c09a18080808080a07c39b7d731f3fcb33b261fe46341193a232e9390a17b7e5610fe420932e4ebf9808080808080a022b160e86b30748fb37c258928aec860119a84864bee8c8ed21e9a2ccaa243c6a05c84ca75e6c6603aef1224db6077ea05720c2cb200c2ca0f3d7b92578a3beb59a0842a25a5c233090004e86efa120df9648d0ba37b3409c43733b7f98b6cbd1b0a80f855a00bde94f36f96c32d24bf54eb1ad16d0d739a3bddd1c30e4f08b6ece81c70b8b0b3f29f3259daee149f0ee1f61a95346cafca2d11098dfeb71b5bfce9408a4ea06b0b9190a0dfc2605618cc0c658c6f5a04e911a7f856a0165b4628ba2b55c359c01e096b1a23bcd1c3f38eafe4f23580df05d151cd66cab4f3a020bdb88fb9320df4ae6f27df2a1c58edeaecfc83654d083202de73a8edc1fd7a9190a0c046bd23c852f58e741f3ce6d975cef855a022fc46ee85dca27133ab94b9dab7aeba106220f90217ffca1dafdd83072af61ab3f29f31f22ff575793aeea2b96e37597648de75e90cda64cc4b68882736f9fc6d1f919061f325b78e91cf5dd679f69a9ac6e2fcf856a0e03c879e23f9c5f07c750f984e5b442018226fa76864b07726688dbffc158dcdb4f3a020df72ebc7815d6f739ab9d74676a5a481310649986bb9bee1f8c3f15116807f9190a0dfa4052752626266c681eb9104436df856a003244efb51db9855c0964cbce4bddd7d2091b833968e67cee6ed2015208c537ab4f3a0205e25317fb1ccb6101951194e973fa61eb0a5ec0d0352fd69bd953a9875b8ad9190fccb639e86aafd938118d1ceb8973781f856a086b92955a5dcf11d1d41f1c7484bd98b51323eb3014ee430e1a9ff091c316b76b4f3a020763afb94a20e9411e8574d134b12e51d2ea4f2fd7ef087c202b1b7271df1f89190a0e62b6a13b71e4afbf5008faebaef01f855a05b5e5b4f004c4a48f9282e213bdf81639763ad211c0a934201c0d5b4d4b454f3b3f29f208f6a170b663ecd4d94734504263968feda83af7685541cf569047924e0389190f2a48dd6953c1ecd0ec19b1e322bdacff856a035ddfefe6a302b96361e7bd9cf4146b8d3f588d7e98a67fb54796a356943ca4db4f3a020256ff50502d1f4b1d1fe8052e7565bff0501c4d5bf2e2804f3e0d9816ae3709190a0afa01d8278b8ef60c20f7302f1e2ecf855a0838e37ecc3075c29565a8f1e20ce8a4315845db9cb0881340fb6370d162d3e94b3f29f3a04d0986cdbf5d4544b5020257671e0150477027621835b0e6f3f21617da591908d916edef76afb17b1ab242396620976f8b6a086354c0b1aa8b9f33fc47222ee2f4fb312ec1e970a9678b6309e8858762f3146b893f891808080808080808080a0de6340047cb9ede82bf2a6202ae60d894124335aedc750972ef2ec0403c0c2b38080a0a4e5c3b7098b57c72b991f90a5abfb9b975ff3681d5f3c821f4b2ec4e652c628a0c508b8465eeedc2dc7267c1463e30383a0a468ab48c786b72b98341b1581732680a096713de783bc6ac79cd7cd1615abebc41d335713eb814f08a5296b5c1a4a84c380f855a01e19437722233bf6fce9f3cd3d1c5f64d9866d9cd5d8d0eeb2d8d5e38534f6d4b3f29f35e2ed2227948a427d78d55a95089b07c392d4431bf56bc604891a7c21566a9190a0fb475982f17af6315435df2a900817f855a0246826d6f44560aaed00e8182a495f04fe72e32103d25876dfd78d0cad427088b3f29f30fb2dbb1df4d6da33389200ea98b7d5291de41d807f1bfefe3677deda7af49190f38c1b2c0e36831bd56ef99840675820f856a0586c29bf23f757845be4c490123634aba6e2706cee1998f6d96a4e4370bc405ab4f3a020538c1601966a6e8c3d7da035c4c83fe7b4b4981a6185399baa4cb73d1a38719190a049bf6045bc86ce6eb7e44a2fcc32f8f855a0d2d380017d8a3c16cb551a5fae345c3c3811339bbedb4d84b09f4db82be1d5eab3f29f31dcf21ffc260760a7a8fc97e57c3a475652b8127e4f215d2a3c94de6ac6f79190a0f786b7a78ad13d4040721be01f3616f856a0edea9e33957e7001db95110624e831dcc22113362dcb5d5587d69a682628c160b4f3a0200f132d651e3dcca1e744d09d1ce38eac860ee62da303646352e303fda856469190a081848ba2854cb906d9c14892cb0f8df856a0c1e05b8c9bdfeb9373d09c5f11a2dd2d744a3475a61cd44ecf89e80fef06d825b4f3a020a8f7710228bef9fa8a280ba1075ae7c2a644b0abc8cd68cd8e30ed5efe8df49190964c11d5b4853736f40a0d86123682edf856a0209a136e7a8dda8c3a35b6f5669a55f138460fef8f41f56e42ea9deb33121ccbb4f3a0204160e75b6e1ff6108570853fc7aa9811e22090c55642443e3b57871e3ca66291908a98f67bb79f3d0f68708d47777cdb65f856a002f9dff021023e42ffece3f4c9334bac397d8b0df5e6c239fded497eab253f19b4f3a020adb8dc4ef7be68b4bdb5c70691b0f547c2f6cde3aca2334d525888c912bea49190288f0a2bda324077db6625ee81e03bf4f876a0007127f398cda07396c650856033a313d8922d832a80b48af317d1dd1d29fc37b853f85180808080808080808080a0ab520b3e94949ca7420d05295d10cc92948bd7aa47fa281d6685e0b56435d2a98080a045ec8b42c484a3a615e7f2c1f29de223676d01ff44283f604bfa193047687b71808080f876a080c2c66f07023ebeb01e8eb1604c27ca59e5ffa5dad296ced7a6259f963ab009b853f851a08766d42606366b97e2ac6f55528f54edc16a016725d3d3cdeba7eb19ecaa959780808080808080a079a76d38ad2a0012b0cfcc4e1b201510f37abb5c61e6effeb4ab929f002d438f8080808080808080f856a0ee7986d9651898a13bd4959a0805f32d8df01881bc471875da51b5ce49da4c05b4f3a020efb47b0bde6fd52717884a917372ea487b4e35cd6fa779f084ad9eec8ced92919086430ef9a6cf924de5eb16d96e406828f856a0c2848e6e65983f215390515d4ae946779ad17ecf3ecd75e0da0ecc5fc58e78cab4f3a020ba3148f24bc8515d4f72935b3db036b59e44d7d176fe8bb108546433b8a654919081b254cf536da6e20f9ce5fb4c33d10bf855a055f291a740cc547fe69e1f0e07db384a5e655ab1a3a89c727e4a0eb0ff55ccdbb3f29f34e3ea25517c2f7582e8a46aa292d7008c4dea6017b0e18414bacb56e4e09f9190acdc1e909afec30cdf0df4d28ff14b85f855a0ec438b9f26018dd5e645a911c09772707ac9862c48c17eaf037fc16146cae63fb3f29f37cc096298e6679758edee8dcce9a9c02b086813027fe78ff11ea7f30ccfc09190a0746a04ba771a89fe4d9b42624e6509f855a09bf5df0b513d10dc40e7a7cea721789ccbf7d75a26aa438c54b7ccaf1310fbc2b3f29f3fd166eee9382a3029089efba7b5b9d2dbbe62b9b749c3fb779b5fb45eee48919071b00e436f17a86707b188023acbc9ccf856a03df35ac4bc698b7013facc83a82ea0e525794b345927ce476beaec4a1525080fb4f3a0207e4ae8a96ea4b29e514bc5ecf10a1d9664daf950a1b277f7157ac233151d079190e43e84d89136fa20d140f4b095887e64f855a06101c229e63a2bd8bdec99f2c478f5c35c45a0ad2e7e1d90fac147eb947693d4b3f29f35a85e3c28a07c13e8ebe73a3329afe79644150ddbc4915510b491488237f691901d5587a122e7b80e75b6cce85b3fe621f856a02e133b64986fd0fa7b35b2a9915c7f650886af765e233cf34214aa6117fbe6e0b4f3a020cc624139201ed80cef9684b054ace3b4e8dc49c81e62a17896affd3f5efb899190a0c54daf8d6fa0dd485ea29064438501f856a0628980afdc4047ce89688e1a807d3fac7835ca88da1b2cbfec494a7a62003d02b4f3a0208f4367f8e4caaca8e04745c3ba83740a0dff1afffd4519089b67fcb70c679c9190a02a5e024f2931802ae83885361421dbf855a032854656181ee5e33a9019f6a49f575c8a1e8027647b45c6038c365f1346d66bb3f29f3bdf41bc8297b94d33c3071b2e9aea36e9dc0baf0fb46517f1ced8c12b142c9190a0f29679c2cd05fa069570d5d3e6982af90116a0c1eaa11830162cf98ac055e498d51e368a6dcbf571ba4601019020d54e106932b8f3f8f1a0dcd9ec060d81a3dbea62b7010697ed4e0e2faa85c6402a92f0498ef84b7c2c2aa09a3ef7761d0b903c96d73d4bab5d27e1e9d5a08784c6f1fcddfa608760928d2980a0a13d663af660ab641efcccfbe7ffd5dbf67019845580faad4cbede0ff61701b880a00d900c1dc410323f8f27d3132ca6eee9f1225b28da9b1fae4b8afeaa29b9bfa8a058a6f0661f6f3839d27112ddf86dfee47bfdb7d1d89891f7c4fea9532b149d35808080a0c9851ae678278c9d79a8d748fa906932985c4d7aa15c3be32c130a9d2d715f0880808080a0167edd9cc78c90e4bf3d6cdb45da739bedbf034fc63dd9d22344930c6c4de53a80f876a0aef4baa4fa6aabd7ccd00f4544cc1cf0cc949a958301558ebd24e21d72e18ebdb853f851a03c2e2b1cbacaa97b8df5beba5629c2123c7d2f8c4c1adb1f81b06cb22b6754cd8080808080a06aeba2b6fce843619ff97d520ba19433d48e3aef9a486fd3a2391648599461c780808080808080808080f855a07d4f8ef2681b37ac04392c056961cbbe2794e7828f3dbd0750ba4e8bfaaae88cb3f29f3ceae4862bd53a46df2f2d1cffc5a8b975fcc2672d1abe84fe7da70aa81e419190cf49d2c106ab811c498919a520280628f90116a0cd2cec675736425bbb3fd37bf3dc0c299e8f4cd0231a93d136594b8386cf8609b8f3f8f180a0c86bdab224d904c98f72340512473cc70e1cde3d76b965f9551e2b53c16343cb80a091b7e79d6e72ac21ffe33de23b3f713019873f051996f03cfadc5e0daf29373580a012b3a5e27f1a627ded36fe42195bfd12052daf50413fa0cc64ced9c5ab4acdc98080808080a05244aeaeed7c115c656baff2e22737c800121cc1dd6adee2e963382d48d8fb77a0acc3faac9e76a4e2157344cf8f7aea08abfb9f0910ea4f32d43299d0443ffa5980a0da0990aa361aa1653b3cb5a9bf4eef6f01fce9dc47770c495696ca0d6ee5b355a0fe2f2871d1376fd701d4a5cb3148af0ef580c479602989667fbba6e2dba45ef580f896a0007ed198b150dcc4c083e213d26b8d042898a2f7022d86cec82cb367cba36a49b873f87180808080a08d3f4bc8b9096bfb078ad653064a745019c7ff398ce8fae42892f82a7ad70f5e80808080a08eff1bab17a52c2b834b7acc8996b14c27ed7ac8d091b6d68d29f9aed48d09d680808080a02080c51c3174571459f60853580881aa2a9cbfffed090a8f3bc6511857c5db8b8080f90238a0135dd21b3216ce2d867b4179cd23796511a15d4632289d30141fdee79f1852a7b90214f90211a0541c24cab756b6f4872448b547a06622f6678f9f91b95d2858b9bc3086b0c715a0c50242d2f5271b473e36b5afea94c0985e83972b9f6114f8e581fcc1b497c231a0d589608323b008e248fc03f2e8975993d2e44d95f9ef349b1c807035f04f9cbaa082ddafc1df998e4d8b3292699c6e911dc6024249e44d2a4fd48f544c8ca89a45a0f2b78e1d988669a6d32961881c06b38b43b78cf0f3dee6c5761d2db061fefeb7a00499c4395dfc97cd2230b0ce12727dbd0c7c715dc45be67317060dc9e7ae5734a0ff513c702034e655537bd1bd2f3b11233b8ace95897f490aad85b41c31b1f7f3a0137d8800d89769efb23873accae6c22ccde83090161d6f842e64a1d66a6a7498a0006dd4c3012713034fbac07d7f1599044ac500b348437dc7633bcd6de6cb47afa0baf90fea9ff8b8f43af00cf4c4ed649cea4e58c898c53559aed3c1a11728350aa0c9c40fad920775e50fc93330819dd2874a61100ecdc1c128d24897977c482d0aa0586779ed46f06e84727af5fecd5d3c355e38a230d547cc7115655573b479ddcaa0b2c7596f0580532f41fbf4992cb58117bcba53f0884751f9c6803805ddd86ea8a033053c569f0e2760c720c423c1ca704a4767ea9beda51d337129aeca77ad4e80a01cc43d708f6cb301d65b90e6bc827280624dffa8dfefd36914ecac36b227d0e4a04ef040783eb298ceed76abe55dd480d4dbf8068ce012e2eaddcce6ffb8d9035780f876a09fc4180b488b5d5479b6b5257c122dc7647d3ea31931b1ac71fff9d02e1088c9b853f8518080a09d07b69817466d2a7ba7b7aa4aebae362ce4f04f19186ba3e894ebf56de2339b80808080a065e921e3230b1c66091a79b9b6392b6d88abfc73c0a54f691ed09bff6ef138d7808080808080808080f855a05f05de2d433047d79bed14992bd0bcf4e8d0cdf65cd7f3388901b68a4fba495db3f29f34dba6013bc35481f4ea800c88ec181e866a205bba56cfb8ef21f32a78b8eb919022718053346cb3c2d846138955328b10f856a0c47cf2287e140982aa611b29478c70966bfff3ccda61b4552fa4421d738daeb8b4f3a020822cab0f28c939669000f646feedb1b39b62e4ec14f6ba6c4b655dfcc875ff919008da46b57cd44e47e6cb273e9a4685a1f855a036292961a97ec37ea7f74cc1d649d878c3d9ceca3c48aef76c9fc518aa6a3bf5b3f29f3c1c29994abb6728f6ca568e0e7a9fcd7d1b1a8a7db86633a7a11bcfe82ca7919019dea2fc145df483439274e0162c7726f876a006b37fc0f5218c277adbbc2a12929977b7a4958ff362048ef6893a1ac5a3b21ab853f85180808080808080a0d63b63cbb8bb0ba87fa3fa14dc758292ecff6f4550001f7d548e91acd1667ee98080a032e95a1fdec25fae5db541eebd1e3980bc63f2ff6fe96298d4025749b8c727f8808080808080f855a0b38a911b397a5a4d76ba750d7991002b33fb76355f30a03ba54330d419a813bbb3f29f39ab0c0e0584297b1bb640726e34ad53f4d92f11f246af548d33511247cdf99190a01f3d47903713072089c5915cd17c3ff856a0a9a09ac4bb7e4be1105e32cd0b2953dc5674f98444350089c10fbbd3e21277efb4f3a0206317b5a1ac3cab1437feb39af99c4de1c74dd7b7561bd9a2469ea034faee219190a0390cff91733550dd3868ff9926aa8cf856a03d845b179068319e1c2b18417a7d292c1598a1fc7ff76995bdf62060d604ed85b4f3a0202eb39435e361eed58e3bd44aed20aa02b852990c17eb60cdf233deab3fdb9091909634e6e6cb01dd639fb2a24659cb9577f855a041bda248c726f69d5fecaed2284c2083557f319cec23c01a8633ca45374ac5bbb3f29f3017edb5180ece041c041f7c5bf9a7518518e2dde522add081e71df6c073d99190a0afcff5f58bd469550965a03415977ff856a050c7b4c34c6f0b8b6536cc41ffb085a392e6c3640094bc4dc5ccf0f063648c79b4f3a0201d6456d7691f16ae5a6db2ed38f45566875cadc4d14696df3f9f580e898a359190a05fe8b6fb1d07a8584a98d49c266b95f856a0decc3bf537604389a2b68b888d78cf2b993dc2825fbdd91af0ec04584da0a20ab4f3a0209b859d6d942fa370c12dd2938406eb3700c810b2775923924cb7a8f1813c3d9190a0e29f33de69290fddaa983777ade6aef856a0783296e8e0a5785410a4d4d6d9f90ed610a1b179def0ce3a92cfb4e9d4a809fab4f3a0205d2e273ab2e5c9c0f9ae7a71f05246a46295733745951627c008a92ae0024b9190a0c6ed9486e9137802d0acdcd9a04992f856a0a7dff3aa298a62adb85491a97a9eee8e9f8dcb060cff685183bf162733673e59b4f3a02041556e16474fabd5271f544e08864a4cefe31084f437d744f542bd2dd160959190a08e8698d162f60c1c9cfe0d6c73b11af856a0d78fdb96b36398000b81bd80876197a9de8f15fbcb580fc79266d9ca9678e2c0b4f3a020eb00cc36aedf6e1cb35f0bfbeb6294b303021a86f7a0548ff2f7885a7d50009190c17649b2e82327319337e0e2fc4f85b3f876a078d1541df4c2cb0d8fd0ffaf1100c794f7c0cf4e4fa02caff4ef9e1dc86340fab853f8518080a02614a52440ed95cf875d74f2a8f67014c48c7c27ecccad33f9be0197fdad5d198080808080a02a502a104f24f1c190f23c447c4bd7d9d27bda878e8e65a8bd40d6f2dd9713278080808080808080f856a0cdd83d57fdf54c040f9e591e1192bd5712ebeb9ab05f552747cd96053743acdeb4f3a0200e6be36938a5f9d05c51c1c9123a3447b9a9b2d70886fe57e8dacc1adea81491902536383e0a0966a2f8af4a6e9a1c2c11f856a0afbae8f451a5ab19f6fbe5622f51123c40658b74a9217ae482943ca19eb279aab4f3a0209ce4be6565a22bcc6d598a0ca3d906eecb4f9c34cffc3c154670892a5190c99190aa3c467d6b6a7a2353fc3810e4b16926f876a0dd0d09879bb2b85aebd9e8cedba75ceabda5e4c90530c0c6099a739cf8434dd7b853f85180a0649000a6130cd2cb69d32b6780725cd451f4d617f5a74218047b507be2e6b6448080808080808080808080a0366da59cdd2fd25d8e66f9bdd6de89f25ef0dcf98aa0173fe79dea4be9c17d68808080f876a00427a68d7e9e6aa9b6374d47f131bd3925a68a37f6ecbe465b30c649f45ecd5bb853f8518080808080808080a0e5fc3c588fc5db734370f8bab118cc3095d1404e2db420dfb96f196e2dc31490a007a4e976b9115a031956cb6fb02b889334fbc1f55ee0b2454bcd3f95710c7c1780808080808080f855a0b0097f17e36bb378f50a4a3dd29ee5fb4365e83e55bcbe3e8978edf25bed2361b3f29f20a179d2db7e204ed511e5fcc45b8b1798c54aafe44ef172c09b931324568f9190a0120c0d46f7b31005f4c26ba60d9965f876a0da8ba3ceb988da569f04466b58a7d32795ca6f84031c026ecae33010f94769b0b853f85180808080a01af1a0bde7120c48481f13864f5d81ca0d6831423b03821756c909f77fb35dd78080808080a0682c8b621bd2493af7ca2e0ee08f1ae03e57761842cde588d44beca44a48f7fb808080808080f856a0a82b19665b47935ca185a484fd3b34a67f15c3d7fe311dcb302345c4beb8515ab4f3a020a6dd631e4908d1edc583f8866d35407b2e82ff543f1b8eb523e64f245b2aa59190a00ad202c0c7ab61afd556025f709b1af855a0836c99fec866d910cb492939c5e033d654f740666545243023d11053d4a1d822b3f29f30e28fdd35990e27346501108c26cdbd824a6c2ca47d217bf5aaaa5d6a95f49190a030fd8e6a631b69985a836a0d407e21f876a09ed614bcd83aa7822221dd00d91cf94f3d3bfc596a1da30539ebbc939a15262ab853f851808080a0511a726d85fd63c15268ff45759ae6e48a8b066f4d73ce8b9a5bd2a405d267d880808080808080a0bf037a6ac4d6649ea6d2ac159f441489ab682beb6380cf00260da50dcf7a4d658080808080f876a0034c0abc7c206dbdada02b24c26a563de0159d2bb03be0bcafdce3818b8bd714b853f85180808080808080808080a05fb6b885c57d7df64ddece6a499e5fcd438df1fff2d1c1bbe5d109a02e33fff080a0f708267c95d3ede35b8c210c4572d25954feb1b86e7830440779aad9db7b836080808080f856a0e29bf9c46d57600441de803500f0342dd1c1cdbc4b5bafe86421919cea020a33b4f3a020e5c292c24848e682aa111c569a60b3f29daf5a1ecafb6535b4c566a97e82d59190a0e649954342a814332c4e14a90ceaf9f855a0d1c538862786eaac8a5398c1025a1dae5d220d4ac1bffe1e54111168735f0256b3f29f2047936f71a787b183594df83c05a6792033479c6a98536a1d2330567a60d39190a03e4611dc10fce14060722e79618e53f856a0aeddd447d7cfd83cab0c0356b5f2f8f7e5483785c87f0a2c1aa9770ab5d461f5b4f3a0205900f7b51ddc6c507ec68ad1003b1cc9d1c38911df91f1897b577a8d9ae8c29190a062913c81a71b819e3f8b453ba65584f855a089d7a8027c385c45b37c3618740baafecd29a3e76233a81dcc83243e8050a45db3f29f3bf5ae170ba85b590c7d7eabaf4c1111ec6bdc9e51d8b2885c8195247a3ce99190cf92627f5433e7cbf8cc8fc9014b3258f856a04104688801b59418a111128a80dc3c8db3835d21aaf36d99afebc524bdefd072b4f3a0209876fff482174c409f697ba972168eb1a0a77fb3606a5ad82e73025c0a7ef99190a0e51279365d382a7da92a120c1f1641f856a0dee17360f32b96db8fca55e2cd0f31c1d512b502a9ac5eb0b287161994621856b4f3a020957709912fc41cfc9f4d0e1f06fddddcc918c3dce9165587c6337d5d5998f391906a73604e061e37ce722e1c117dd9ec8ff8d6a04a18a3b2fb83af7059804bae2f955e7a0f165a520ec9b01339dd3aeb425ea854b8b3f8b180808080a0ad48790e7e4f7c5fa4a8d28679688d72829aa55aaaee5270251e67c71895dceca03ece79f6f7eabfbbfa1dda8471eb84164e62c727d2770119b4bd0bffe1ca4a08a031351d34af011c2882e89b92bd009816071bd40907513502b068b62193c4614ea02b25e349c54dfa3a83fed3f1320059c27094be3931ebd34c8ce932668e7e3975808080a064e53231c4ec72f0518f1301ad55cb2ba707dfd494a2a80d3356a64f84927ac88080808080f856a0037f87bba25f82ce240afb9d85a46802237bce7bd1c074c83023b27226eceaebb4f3a02032a461fe54a6143d269d3c925687c99ef06a08bbaedd650b72e08fb74aaeeb9190d729c7457ec24ff6bc60f95752186359")).withContractIndex(contract_cab26, ByteArrayWrapper.wrap(Hex.decode("0d84c716d0160e91ba7dddfdadbb5389169d0112be9aa2fb540b3b3137c57768")), // block 1_577_075
    ByteArrayWrapper.wrap(Hex.decode("844358ea1e0368c7d37fe232a61687dde2254d3e4c99c797993c2b95fe835bab")), InternalVmType.FVM).withDetails(contract_c3d4f, Hex.decode("f90ba8a0a036264ea31559621f5950c1dfd063d0a3b89d555e7a3ce732e97fc2eebc3d4f8080b904bef904bbb901404b65395114484ea374ca9013c321c1b3f1710d74acedde69ee25a122ece3c3fb983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728231e29ecbb11a13ba8d6db103db022499af31a369101bbc4c784c150664f2db3d8228a98b9f4db8781419f64736de959a7a36afed886ded9567bf0796522bcd994ac109c366e489241e14908040e9ca58900271dffefe275a5d056702b25df353788799c262a2a8a390d5bcd28661b751d9982b9233f8ff73d0a375b78ae7abba95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e0162744527702e5c73fbbc12545e1f0e69c0cc219a090775b482225a65470c61b183ceb7b71fe070871b7db2f35bcc674bb89b0094bfe9d8878284a06a28cf87fae999bf6721d63fffb185b1504202a5a5ea47a93c84f0698f63b2f258fba72c04c088e6cf90338b8b3f8b1a094ac109c366e489241e14908040e9ca58900271dffefe275a5d056702b25df35a0d8228a98b9f4db8781419f64736de959a7a36afed886ded9567bf0796522bcd9808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728a0231e29ecbb11a13ba8d6db103db022499af31a369101bbc4c784c150664f2db38080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b4f3a035c749bcf708d70b69d4d2f4ebd726038bcbebf9ea7ce8481b6acc1e12014e4c9190f2c96b8e06caaf785f69ddf11637ab18abeaa031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe2888758d15e17628000abeaa035d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c88877c585087238000abeaa0329591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a288872386f26fc10000b893f891a094ac109c366e489241e14908040e9ca58900271dffefe275a5d056702b25df35a0d8228a98b9f4db8781419f64736de959a7a36afed886ded9567bf0796522bcd9808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728808080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b4f3a034c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a07d9895f295b815eb88268c820cfcfdb5f4a12094c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a07d9895f295b815eb88268c820cfcfdb853f8518080808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728808080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b873f871a094ac109c366e489241e14908040e9ca58900271dffefe275a5d056702b25df3580808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728808080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b83baced0005757200025b42acf317f8060854e00200007870000000204b65395114484ea374ca9013c321c1b3f1710d74acedde69ee25a122ece3c3fbf906c1b906be6050604052361561006a576000356c01000000000000000000000000900463ffffffff168063056499c61461007057806333c9f45f146100a65780638da5cb5b146100de5780638dbf2f961461010f578063c68e475a14610208578063cdf7edf7146102495761006a565b60006000fd5b341561007c5760006000fd5b6100a46004808035906010019091908035906010019091908035906010019091905050610281565b005b34156100b25760006000fd5b6100c8600480803590601001909190505061039b565b6040518082815260100191505060405180910390f35b34156100ea5760006000fd5b6100f26103cd565b604051808383825281601001526020019250505060405180910390f35b341561011b5760006000fd5b6101b06004808035906010019082018035906010019191908080601002601001604051908101604052809392919081815260100183836010028082843782019150505050505090909190803590601001908201803590601001919190808060100260100160405190810160405280939291908181526010018383601002808284378201915050505050509090919050506103dc565b6040518080601001828103825283818151815260100191508051906010019060100280838360005b838110156101f45780820151818401525b6010810190506101d8565b505050509050019250505060405180910390f35b34156102145760006000fd5b610233600480803590601001909190803590601001909190505061050e565b6040518082815260100191505060405180910390f35b34156102555760006000fd5b61026b60048080359060100190919050506105f7565b6040518082815260100191505060405180910390f35b600060005080600101549054339091149190141615156102a15760006000fd5b600083101580156102ba5750670de0b6b3a76400008311155b15156102c65760006000fd5b600082101580156102df5750670de0b6b3a76400008211155b15156102eb5760006000fd5b600081101515156102fc5760006000fd5b600360026000505060031415156103135760006000fd5b826002600050600060038110151561032757fe5b9090600191828204019190066010025b50819090905550816002600050600160038110151561035257fe5b9090600191828204019190066010025b50819090905550806002600050600260038110151561037d57fe5b9090600191828204019190066010025b508190909055505b5b505050565b60006002600050826003811015156103af57fe5b9090600191828204019190066010025b505490506103c8565b919050565b60006000508060010154905482565b6103e461067b565b6103ec61067b565b6000600085511115156103ff5760006000fd5b600084511115156104105760006000fd5b835185511415156104215760006000fd5b600360026000505060031415156104385760006000fd5b84516040518059106104475750595b90808252806010026010018201604052801561045e575b509150600090505b84518110156104dc576104ad858281518110151561048057fe5b90601001906010020151858381518110151561049857fe5b9060100190601002015161050e63ffffffff16565b82828151811015156104bb57fe5b906010019060100201909081815260100150505b8080600101915050610466565b600082511115156104ed5760006000fd5b815185511415156104fe5760006000fd5b819250610506565b505092915050565b6000600060008310158015610524575060028311155b15156105305760006000fd5b6000841115156105405760006000fd5b6003600260005050600314801561057a5750600060026000508460038110151561056657fe5b9090600191828204019190066010025b5054115b15156105865760006000fd5b6105d6670de0b6b3a76400006105c86002600050866003811015156105a757fe5b9090600191828204019190066010025b50548761062190919063ffffffff16565b61065a90919063ffffffff16565b90506000811115156105e85760006000fd5b8091506105f0565b5092915050565b60026000508160038110151561060957fe5b9090600191828204019190066010025b915090505481565b6000600082840290506000841480610643575082848281151561064057fe5b04145b151561064b57fe5b809150610653565b5092915050565b60006000828481151561066957fe5b049050809150610674565b5092915050565b6010604051908101604052806000815260100150905600a165627a7a72305820c0e0b4513d2521bb3705ceed0358cefcf6cac036cff927c986df9fc1602b29f60029")).withContractIndex(contract_c3d4f, ByteArrayWrapper.wrap(Hex.decode("d9b996cc544f2903fe6db6d7f6d92a3de61ff03a391293999b34c68a7c617a2a")), // block 3_275_742
    ByteArrayWrapper.wrap(Hex.decode("4f7237d7b2b65f2c6b2d3d8cf70bcbe02449f00b768d9d7c59a9f05f9561b586")), InternalVmType.FVM).withDetails(contract_62127, Hex.decode("f90d09a0a0fa1fc00ed6616df7bf795340019c773d12b66f834726f09e0cf86928b621278080b90601f905feb90180288f73f6e0b8957b858429756ad4103de113b7459d4491c63c2b0188029ba858bec71d882dd2095c9f5b380c925d7112500e13200254bb30fb98245ee343962ef8fad067525dcdf6a770949dcfe9ccdf0057ff17558a1cd91a27fefb0c9bcc8887cb9390c35f6823469614b39b5d481974e2a77119c9fd5835695d7388b97971c11419fd12a64dca85d163c694203bcf50777ad73f0cbd179328b1d280f376b9f4950050445a3ce8a5804c6dfe5c7a270b038ad7c272d692a7c745e010179f6d025d4cdae65a848f8afc30ea6a55b51a354dd3eaf285faca8fa78684d0701845e18e3ecb540a6697bad970707809114c767a6b8ace5333bd4a0a8c8f8c1fddfc95c5e69fc92c2f143ea9c3577e632890b96a1e379215beaa3856b810f57cc23e90c1220bf530e36c400bc005b041a0abf485abacd2c2a70c59718970c60dc131f2de8c6f856da811891d8d571db860e4f8281629b23be82a33ef4a9789cdd34ee4d739ab47c97d53f636b5bb7a34c9bce0eb9dba6ff6b5cfcd56341161254328f9043bb5f4a12015d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c9190a07d9895f295b815eb88268c820cfcfdb4f3a0336d54d269dbf7b38605af4b922cd4bdb091545c4af86905e0d525693d622c609190f2c96b8e06caaf785f69ddf11637ab18b4f3a035d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c9190a07d9895f295b815eb88268c820cfcfda3e2a0310fd29389f3567a079224bb7e842e71f5336547f050a107c6498ade29ae2e6701b873f87180a0f8fad067525dcdf6a770949dcfe9ccdf0057ff17558a1cd91a27fefb0c9bcc8880808080808080808080a0e4d739ab47c97d53f636b5bb7a34c9bce0eb9dba6ff6b5cfcd563411612543288080a0bec71d882dd2095c9f5b380c925d7112500e13200254bb30fb98245ee343962e80a3e2a031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe201b8b3f8b180a0f8fad067525dcdf6a770949dcfe9ccdf0057ff17558a1cd91a27fefb0c9bcc888080a087cb9390c35f6823469614b39b5d481974e2a77119c9fd5835695d7388b97971808080a095c5e69fc92c2f143ea9c3577e632890b96a1e379215beaa3856b810f57cc23e808080a0e4d739ab47c97d53f636b5bb7a34c9bce0eb9dba6ff6b5cfcd563411612543288080a0bec71d882dd2095c9f5b380c925d7112500e13200254bb30fb98245ee343962e80b853f85180a0f8fad067525dcdf6a770949dcfe9ccdf0057ff17558a1cd91a27fefb0c9bcc8880808080808080808080808080a0bec71d882dd2095c9f5b380c925d7112500e13200254bb30fb98245ee343962e80b4f3a03a2e35899e4d65137656445c9d43abe76d497c263f5e230f15573134849239239190be125ace76ea65b6d8f1e882c51e3633b8d3f8d180a0f8fad067525dcdf6a770949dcfe9ccdf0057ff17558a1cd91a27fefb0c9bcc888080a087cb9390c35f6823469614b39b5d481974e2a77119c9fd5835695d7388b9797180a0f4950050445a3ce8a5804c6dfe5c7a270b038ad7c272d692a7c745e010179f6d80a095c5e69fc92c2f143ea9c3577e632890b96a1e379215beaa3856b810f57cc23e808080a0e4d739ab47c97d53f636b5bb7a34c9bce0eb9dba6ff6b5cfcd563411612543288080a0bec71d882dd2095c9f5b380c925d7112500e13200254bb30fb98245ee343962e80b893f89180a0f8fad067525dcdf6a770949dcfe9ccdf0057ff17558a1cd91a27fefb0c9bcc88808080808080a095c5e69fc92c2f143ea9c3577e632890b96a1e379215beaa3856b810f57cc23e808080a0e4d739ab47c97d53f636b5bb7a34c9bce0eb9dba6ff6b5cfcd563411612543288080a0bec71d882dd2095c9f5b380c925d7112500e13200254bb30fb98245ee343962e80b4f3a03b691f64d892e254fb9233468a36bc4885860c6544616d382c4d0257092e00549190a0c0d2ce127aad2d35abf8abf643b40cb83baced0005757200025b42acf317f8060854e002000078700000002090c1220bf530e36c400bc005b041a0abf485abacd2c2a70c59718970c60dc131f906dfb906dc6050604052361561008b576000356c01000000000000000000000000900463ffffffff1680633336acd3146100915780633c7e11bb146100bd5780634fbf9d26146100fa57806356651994146101395780637412dbb3146101785780637baab3da146101bc5780638da5cb5b14610203578063ae61c5ae14610234578063d6dc726c146102605761008b565b60006000fd5b341561009d5760006000fd5b6100bb600480808060100135903590916020019091929050506102a4565b005b34156100c95760006000fd5b6100f8600480808060100135903590916020019091929080806010013590359091602001909192905050610397565b005b34156101065760006000fd5b61011c6004808035906010019091905050610496565b604051808383825281601001526020019250505060405180910390f35b34156101455760006000fd5b61015b60048080359060100190919050506104c9565b604051808383825281601001526020019250505060405180910390f35b34156101845760006000fd5b6101a2600480808060100135903590916020019091929050506104fc565b604051808215151515815260100191505060405180910390f35b34156101c85760006000fd5b6101e660048080806010013590359091602001909192905050610528565b604051808383825281601001526020019250505060405180910390f35b341561020f5760006000fd5b610217610550565b604051808383825281601001526020019250505060405180910390f35b34156102405760006000fd5b61025e6004808080601001359035909160200190919290505061055f565b005b341561026c5760006000fd5b61028a6004808080601001359035909160200190919290505061060e565b604051808215151515815260100191505060405180910390f35b336004600050806001015490549091149190141615156102c45760006000fd5b600060008383909114919014161515156102de5760006000fd5b60026000506000838382528160100152602001908152601001600020905060009054906101000a900460ff161515156103175760006000fd5b600160026000506000848482528160100152602001908152601001600020905060006101000a81548160ff021916908315150217905550600360005080548060010182816103659190610649565b91909060005260106000209050906002020160005b84849091929091925091909091806001018390555550505b5b5050565b600260005060003382528160100152602001908152601001600020905060009054906101000a900460ff16806103dd575033600460005080600101549054909114919014165b15156103e95760006000fd5b6000600085859091149190141615801561040d575060006000838390911491901416155b15156104195760006000fd5b8181600060005060008787825281601001526020019081526010016000209050600050828290918060010183905555505050600160005080548060010182816104629190610649565b91909060005260106000209050906002020160005b86869091929091925091909091806001018390555550505b5b50505050565b6003600050818154811015156104a857fe5b9060005260106000209050906002020160005b915090508060010154905482565b6001600050818154811015156104db57fe5b9060005260106000209050906002020160005b915090508060010154905482565b60026000506020528181600052601052603060002090506000915091509054906101000a900460ff1681565b6000600050602052818160005260105260306000209050600091509150508060010154905482565b60046000508060010154905482565b3360046000508060010154905490911491901416151561057f5760006000fd5b600060008383909114919014161515156105995760006000fd5b60026000506000838382528160100152602001908152601001600020905060009054906101000a900460ff1615156105d15760006000fd5b600060026000506000848482528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055505b5b5050565b600060026000506000848482528160100152602001908152601001600020905060009054906101000a900460ff169050610643565b92915050565b815481835581811511610678576002028160020283600052601060002090509182019101610677919061067d565b5b505050565b6106ad9190610687565b808211156106a957600081815080600090556001016000905550600201610687565b5090565b905600a165627a7a72305820b762c6a2ec4b955e3ee2a03a179a232fc9d28d354f9b0425ada392fa7fd3c9130029")).withContractIndex(contract_62127, ByteArrayWrapper.wrap(Hex.decode("80e6d70be43c0b739da58b5b9b870102b9b31ec2e33f508e8d251bebcddeac0e")), // block 3_275_867
    ByteArrayWrapper.wrap(Hex.decode("06e4f07d48e765eafc9ddabda106320805047afb3d4a860a024db299b8978038")), InternalVmType.FVM).withDetails(contract_aa803, Hex.decode("f909d3a0a0b75b3dffe8d4f0e3c5d07f31437e939040593230d6658cae57b2a0fd2aa8038080b90623f90620b901807702e5c73fbbc12545e1f0e69c0cc219a090775b482225a65470c61b183ceb7ba95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e016274452ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7ac34f7e16ca6b3566eae2dbf67e5b5e378cfb5ca600d070cad73a316796c9e8f7983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd8287281b5c97843f499dc69e2b32980177db3b6619a599af49eb80b127134f731b1f050f9934e3ffeee9a31165a97d947f1d7da93d62c6725f5cf0b9ff4f5a447c1535f2d2e35e09098b84c68bfec2652b237533867f2b6c6f3d3638219a1210037166fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be2b550472a606b31a4e0e3a854eca3a1dc266b1718fdc1e469bf9513f0571f8f1e6ec943aa4109baacaf489e22c9702e3c193cc05369f46a2bf4372c6117d5e83011869c08ce50715d669b5b13fba906d4a48b4106250a8026ca7ef85f0e06c648f9045db5f4a12094c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a07d9895f295b815eb88268c820cfcfdb4f3a034c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a07d9895f295b815eb88268c820cfcfdb4f3a0329591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a29190a0fa1fc00ed6616df7bf795340019c77b853f851a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7a8080808080808080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b4f3a035c749bcf708d70b69d4d2f4ebd726038bcbebf9ea7ce8481b6acc1e12014e4c9190f2c96b8e06caaf785f69ddf11637ab18b873f871a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7a80808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728808080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b4f3a035d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c9190a0b177c837e80040e16d9769fdd2b3c2b893f891a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa00f9934e3ffeee9a31165a97d947f1d7da93d62c6725f5cf0b9ff4f5a447c1535808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728808080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b4f3a031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe291903d12b66f834726f09e0cf86928b62127b8b3f8b1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa00f9934e3ffeee9a31165a97d947f1d7da93d62c6725f5cf0b9ff4f5a447c1535808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be28080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e01627445280808080808080b4f3a0336d54d269dbf7b38605af4b922cd4bdb091545c4af86905e0d525693d622c609190869a2a7e626cce0e65036cc22041be5ab8d3f8d1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa00f9934e3ffeee9a31165a97d947f1d7da93d62c6725f5cf0b9ff4f5a447c1535808080a0983661d2532855f34944d2037893ea14410178498d5b6c2ed0557c2fdd828728a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be28080a0a95617cf807e32e4b523902ef4e2737dfeccdc55a3932d8f00e4d4e0162744528080808080a06ec943aa4109baacaf489e22c9702e3c193cc05369f46a2bf4372c6117d5e83080b83baced0005757200025b42acf317f8060854e002000078700000002011869c08ce50715d669b5b13fba906d4a48b4106250a8026ca7ef85f0e06c648f90387b9038460506040526000356c01000000000000000000000000900463ffffffff1680632f921e411461005457806371a281ee1461009a5780638da5cb5b146100d7578063cb58993b146101085761004e565b60006000fd5b34156100605760006000fd5b610098600480808060100135903590916020019091929080806010013590359091602001909192908035906010019091905050610139565b005b34156100a65760006000fd5b6100d56004808080601001359035909160200190919290808060100135903590916020019091929050506102b6565b005b34156100e35760006000fd5b6100eb61033a565b604051808383825281601001526020019250505060405180910390f35b34156101145760006000fd5b61011c610349565b604051808383825281601001526020019250505060405180910390f35b6000600086869091149190141615801561015d575060006000848490911491901416155b15156101695760006000fd5b6000811115156101795760006000fd5b60026000508060010154905463d6dc726c336000604051601001526040518363ffffffff166c0100000000000000000000000002815260040180838382528160100152602001925050506010604051808303816000888881813b15156101df5760006000fd5b5af115156101ed5760006000fd5b505050506040518051906010015015156102075760006000fd5b8282637b7814528787600460005080600101549054876000604051601001526040518663ffffffff166c0100000000000000000000000002815260040180868682528160100152602001848482528160100152602001828152601001955050505050506010604051808303816000888881813b15156102865760006000fd5b5af115156102945760006000fd5b505050506040518051906010015015156102ae5760006000fd5b5b5050505050565b336000600050806001015490549091149190141615156102d65760006000fd5b600060008585909114919014161580156102fa575060006000838390911491901416155b15156103065760006000fd5b83836002600050828290918060010183905555505050818160046000508282909180600101839055555050505b5b50505050565b60006000508060010154905482565b600260005080600101549054825600a165627a7a723058201354df309f9093e1bd275c8e4b6ca8254861bef4925022a3d708d80ce87daf2c0029")).withContractIndex(contract_aa803, ByteArrayWrapper.wrap(Hex.decode("b0855cf505d1e461c3a94be7518b1000a367064a93355dda4f332704210c8dbc")), // block 3_275_893
    ByteArrayWrapper.wrap(Hex.decode("71d9ac36b276cdd634c8aff68c858a79c4498b91ae3e030d7fa3cb82e80b3319")), InternalVmType.FVM).withDetails(contract_e3633, Hex.decode("f93a53a0a0c0d2ce127aad2d35abf8abf643b40cbe125ace76ea65b6d8f1e882c51e36338080b91219f91216b904809c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece3748dcf700ccf9b3fe6e928003cb87e18a3b6b620e8b6082809b8a93b5ce4ed1a6ae14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb5f93a7deabb401ce54ef850b887e1cda6b50c23e7a14e1498efb436b1e60cd0d3209e59d16228e96e222b56f718c748b6c6c41450372c47659b47a4fed7eb85b8ed60b46d3916b7601b23272d15750e14b45c09c621c84d74c404fb652b606b49ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7a8076890e06dd36c1a9b723493a1d81b59712fffe6b3eb70487793b36faef635cfb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be28be2a97a418bd62e73dd7eb1c1e9fe3e72c815955f4531eca5c98d06f186a3c803e9f6312b8a7b69697b60df3ef2e978b79f365e261d5d55c6f5afa3421964f267bf50f99b14465aea16d77b8aac461d31b6e17444d9bd6ec71b2e434a7ccaf2b8251177c716a73cdf77239f7527feb5c4f49b0adfd69a58ffd41e96961edaa5ed98c93f47aa58ff1310bb02b15422833c7d2a984dd6bb2b1dce9bfa7534a8c4b617cf09dd06667fd38091c57e640797e509860a4fa130713aaf78998a616061afce2efe901439befe35f191144ad64f28d1b98220393e72aa9b028037789a718a78fcb208bc322a911020b9eee1a978227af1bc11777aaaffed8f9f9afa6b310f287c4e976f4de8bdbe9431b9e7f5941a5efe74a018ca118421e193d5a8d56a6005e8ce67606a0afee6f2dbf7ec4e18cb802ca5fd26a9a14c3c9fa5e2197815c02eedc0905b1257e15adc3182da8fcebbc9ad29dd869203ec1c68ccf080925b4f2ad91fc3a72280d3af0490f3c670a0ab110da61cf8806e2609902d88a9e551b6311f657ad1d11d53cc86967235df87ddb1d23d8a80f4f618fb81709309e85a72df23e1777a1ff9cae16e5de727013783bd9e80b72b3e30ed2507bf60a8c741d7c3721b7b1350e962857a4cb6056e46a21ba27f3cc00e027d9fa8883117d8a616a41abd43129b0603ec20897b85e93a9adece9713cc4a792ac9f572fe6697aa9633b1c901d31ba59897f2799d8ce116a3d6998f10e964416265867b6a756c387dbca5268f887fb633fd0553fce79c28c0e850527163853bfc1db6b6e136ad3e11e1ef5279569ea529d3375ecf20d8eb675a2d2b6d2df2b80bca00b2c38638894a1518f2c20a51c7ce8568eaba73746c831c6a34b5c7fbcaa419e2c2cb96284dddc1c6bcd97974811849a7884a7857c1720fb847f95a9adf5f21cd7c616bb578587709bd962a6fcccb8e7ce34557ed9d87320986dff8573522735356025f4be66184c86bb9608cce32ac3eb8109d59b0cb13962ecaf6653dd11ef2f5e11696b70716ad446738382ddbe00c7c6e35bc8aa4adf8657bcc1179850aa6180fa5e3bb8b43c4781e11f4e61ab9eae8f827522b33ded13bddf2fed039f2cc04bbe190af77db8fbae70901cc9ce09abc353abf3c39343466a3f5702620fbe8df85f81401465afd9e4774a9de3d64d2b3e16aeaaa351dc7554b636f608cfff059590ba54ef90d53b4f3a03616b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c9190f2c96b8e06caaf785f69ddf11637ab18b853f85180808080a00f287c4e976f4de8bdbe9431b9e7f5941a5efe74a018ca118421e193d5a8d56a80808080a07dbca5268f887fb633fd0553fce79c28c0e850527163853bfc1db6b6e136ad3e80808080808080b873f871808080a04f2ad91fc3a72280d3af0490f3c670a0ab110da61cf8806e2609902d88a9e5518080a0ed60b46d3916b7601b23272d15750e14b45c09c621c84d74c404fb652b606b498080808080808080a08076890e06dd36c1a9b723493a1d81b59712fffe6b3eb70487793b36faef635c80b873f87180a0ddc1c6bcd97974811849a7884a7857c1720fb847f95a9adf5f21cd7c616bb5788080808080a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580808080808080a09c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece37480b853f851808080a011e1ef5279569ea529d3375ecf20d8eb675a2d2b6d2df2b80bca00b2c38638898080a077db8fbae70901cc9ce09abc353abf3c39343466a3f5702620fbe8df85f8140180808080808080808080b4f3a020a619de1b82a680406341ad264fa371512a0502304a464699d821bed0cdf6b19190a0d270e7759e8fc020df5f1352bf4d32b4f3a0329591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a29190a0fa1fc00ed6616df7bf795340019c77b4f3a0200272fafa470233b338b3780462e879976eb1cc0e2ad6f4b38f94ad0f12b44a9190a07d9895f295b815eb88268c820cfcfdb4f3a031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe291903d12b66f834726f09e0cf86928b62127b4f3a034c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190312e3000000000000000000000000000b893f89180a0ddc1c6bcd97974811849a7884a7857c1720fb847f95a9adf5f21cd7c616bb5788080808080a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580a08be2a97a418bd62e73dd7eb1c1e9fe3e72c815955f4531eca5c98d06f186a3c88080808080a09c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece37480b4f3a020d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c9190a036264ea31559621f5950c1dfd063d0b8b3f8b1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa0b6311f657ad1d11d53cc86967235df87ddb1d23d8a80f4f618fb81709309e85a8080808080a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580a08be2a97a418bd62e73dd7eb1c1e9fe3e72c815955f4531eca5c98d06f186a3c88080808080a09c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece37480b8b3f8b1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa0ddc1c6bcd97974811849a7884a7857c1720fb847f95a9adf5f21cd7c616bb5788080808080a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580a08be2a97a418bd62e73dd7eb1c1e9fe3e72c815955f4531eca5c98d06f186a3c88080808080a09c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece37480b4f3a02081658ac6eea094e5b74b2318d1944de96ee646ec2aef6b187e52401588312c91909342c1bcdfe9297ef594fa352c7cab26b4f3a02081658ac6eea094e5b74b2318d1944de96ee646ec2aef6b187e52401588312c9190439c5629a8ff6c34d1a28281ffee26fdb853f85180808080a0afce2efe901439befe35f191144ad64f28d1b98220393e72aa9b028037789a71a067bf50f99b14465aea16d77b8aac461d31b6e17444d9bd6ec71b2e434a7ccaf28080808080808080808080b4f3a020c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190312e3000000000000000000000000000a3e217a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb5b4f3a020a619de1b82a680406341ad264fa371512a0502304a464699d821bed0cdf6b19190a062913c81a71b819e3f8b453ba65584b4f3a020447ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b691909040593230d6658cae57b2a0fd2aa803b853f85180808080a0b617cf09dd06667fd38091c57e640797e509860a4fa130713aaf78998a616061a067bf50f99b14465aea16d77b8aac461d31b6e17444d9bd6ec71b2e434a7ccaf28080808080808080808080b8d3f8d1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa0b6311f657ad1d11d53cc86967235df87ddb1d23d8a80f4f618fb81709309e85a80808080a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be2a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580a08dcf700ccf9b3fe6e928003cb87e18a3b6b620e8b6082809b8a93b5ce4ed1a6a8080808080a09c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece37480b853f85180a0ddc1c6bcd97974811849a7884a7857c1720fb847f95a9adf5f21cd7c616bb5788080808080a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb5808080808080808080b8d3f8d1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa0b6311f657ad1d11d53cc86967235df87ddb1d23d8a80f4f618fb81709309e85a80808080a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be2a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580a08be2a97a418bd62e73dd7eb1c1e9fe3e72c815955f4531eca5c98d06f186a3c88080808080a09c4cb88259a2302e79f96a57113d6eea2647fa66786ac8a10480be271cece37480b873f871808080a04f2ad91fc3a72280d3af0490f3c670a0ab110da61cf8806e2609902d88a9e5518080a0c02eedc0905b1257e15adc3182da8fcebbc9ad29dd869203ec1c68ccf080925b8080808080808080a08076890e06dd36c1a9b723493a1d81b59712fffe6b3eb70487793b36faef635c80b4f3a020dd23cc6874677a0fed19a6725becb32e729122c22cf2268b3568278a3909b09190a0b75b3dffe8d4f0e3c5d07f31437e93b4f3a0206d54d269dbf7b38605af4b922cd4bdb091545c4af86905e0d525693d622c609190a3b89d555e7a3ce732e97fc2eebc3d4fb5f4a12076a619de1b82a680406341ad264fa371512a0502304a464699d821bed0cdf6b19190a0d270e7759e8fc020df5f1352bf4d32b4f3a03481658ac6eea094e5b74b2318d1944de96ee646ec2aef6b187e52401588312c91909342c1bcdfe9297ef594fa352c7cab26b8d3f8d1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa0b6311f657ad1d11d53cc86967235df87ddb1d23d8a80f4f618fb81709309e85a80808080a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be2a0e14eb5861837bc2261127bf7df4398a7eafbffef02827bee84e9c8dd77112eb580a08dcf700ccf9b3fe6e928003cb87e18a3b6b620e8b6082809b8a93b5ce4ed1a6a8080808080a0209e59d16228e96e222b56f718c748b6c6c41450372c47659b47a4fed7eb85b880b853f851808080a04f2ad91fc3a72280d3af0490f3c670a0ab110da61cf8806e2609902d88a9e5518080a0ed60b46d3916b7601b23272d15750e14b45c09c621c84d74c404fb652b606b4980808080808080808080b8d3f8d1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa08a78fcb208bc322a911020b9eee1a978227af1bc11777aaaffed8f9f9afa6b3180808080a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be2a09633b1c901d31ba59897f2799d8ce116a3d6998f10e964416265867b6a756c3880a08dcf700ccf9b3fe6e928003cb87e18a3b6b620e8b6082809b8a93b5ce4ed1a6a8080808080a0209e59d16228e96e222b56f718c748b6c6c41450372c47659b47a4fed7eb85b880b8d3f8d1a0ff27f29b58098c0e32c5de52c27a50f4d0b23d8f7196066130dce781c6125a7aa0b6311f657ad1d11d53cc86967235df87ddb1d23d8a80f4f618fb81709309e85a80808080a0fb32f1be75297a697e0498627aec3b714ddea3bad8ff958d97c059f524c07be2a09633b1c901d31ba59897f2799d8ce116a3d6998f10e964416265867b6a756c3880a08dcf700ccf9b3fe6e928003cb87e18a3b6b620e8b6082809b8a93b5ce4ed1a6a8080808080a0209e59d16228e96e222b56f718c748b6c6c41450372c47659b47a4fed7eb85b880b4f3a02016b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c9190f2c96b8e06caaf785f69ddf11637ab18a3e217a06184c86bb9608cce32ac3eb8109d59b0cb13962ecaf6653dd11ef2f5e11696b7b83baced0005757200025b42acf317f8060854e00200007870000000200716ad446738382ddbe00c7c6e35bc8aa4adf8657bcc1179850aa6180fa5e3bbf92811b9280e60506040523615610096576000356c01000000000000000000000000900463ffffffff16806354fd4d501461009c5780635e6dbcc5146100d957806360dfab211461011a57806368c5b1931461014b5780636e667db3146102285780638da5cb5b14610259578063a1c8d3371461028a578063b00eb9fe146102e9578063b49835641461031a578063cb58993b1461041e57610096565b60006000fd5b34156100a85760006000fd5b6100b061044f565b604051808383906000191690906000191690825281601001526020019250505060405180910390f35b34156100e55760006000fd5b610104600480803590601001909190803590601001909190505061045e565b6040518082815260100191505060405180910390f35b34156101265760006000fd5b61012e6104f0565b604051808383825281601001526020019250505060405180910390f35b34156101575760006000fd5b610226600480808060100135903590916020019091929080359060100190820180359060100191919080806020026010016040519081016040528093929190818152601001838360200280828437820191505050505050909091908035906010019082018035906010019191908080601002601001604051908101604052809392919081815260100183836010028082843782019150505050505090909190803590601001909190803590601001909190808060100135903590600019169090916020019091929050506104ff565b005b34156102345760006000fd5b61023c6108ba565b604051808383825281601001526020019250505060405180910390f35b34156102655760006000fd5b61026d6108c9565b604051808383825281601001526020019250505060405180910390f35b34156102965760006000fd5b6102e7600480808060100135903590916020019091929080806010013590359091602001909192908080601001359035909160200190919290808060100135903590916020019091929050506108d8565b005b34156102f55760006000fd5b6102fd61095c565b604051808383825281601001526020019250505060405180910390f35b34156103265760006000fd5b6103f56004808080601001359035909160200190919290803590601001908201803590601001919190808060200260100160405190810160405280939291908181526010018383602002808284378201915050505050509090919080359060100190820180359060100191919080806010026010016040519081016040528093929190818152601001838360100280828437820191505050505050909091908035906010019091908035906010019091908080601001359035906000191690909160200190919290505061096b565b604051808383906000191690906000191690825281601001526020019250505060405180910390f35b341561042a5760006000fd5b610432610a4a565b604051808383825281601001526020019250505060405180910390f35b60006000508060010154905482565b600060046000508060010154905463c68e475a85856000604051601001526040518363ffffffff166c0100000000000000000000000002815260040180838152601001828152601001925050506010604051808303816000888881813b15156104c75760006000fd5b5af115156104d55760006000fd5b505050506040518051906010015090506104ea565b92915050565b60086000508060010154905482565b600060006000600060008c8c9091149190141615151561051f5760006000fd5b60008951118015610531575087518951145b151561053d5760006000fd5b60008711151561054d5760006000fd5b438611151561055c5760006000fd5b61056d87600161045e63ffffffff16565b92508a8a8a8a8a8a8a8a61057f610a59565b808989825281601001526020018060100180601001878152601001868152601001858590600019169090600019169082528160100152602001838103835289818151815260100191508051906010019060200280838360005b838110156105f45780820151818401525b6010810190506105d8565b50505050905001838103825288818151815260100191508051906010019060100280838360005b838110156106375780820151818401525b60108101905061061b565b505050509050019a5050505050505050505050604051809103906000f08015821516156106645760006000fd5b915091507fd1055ec94b4a7a0d56691f9dbf655f3a683a28857c2c565ed0c3e910645b34c78a6040518080601001828103825283818151815260100191508051906010019060200280838360005b838110156106ce5780820151818401525b6010810190506106b2565b505050509050019250505060405180910390a17f53e51eafcc6cc48771db669cdabad660678aa9510059c72a6bb42930a9a6fe128c8c85858830604051808383825281601001526020019250505060405180910390206040518088888252816010015260200186868252816010015260200184815260100183839060001916909060001916908252816010015260200180601001828103825260078152601001806f455847303030310000000000000000008152601001506010019850505050505050505060405180910390a1600260005080600101549054633c7e11bb8484336040518563ffffffff166c01000000000000000000000000028152600401808585825281601001526020018383825281601001526020019450505050506000604051808303816000888881813b15156108085760006000fd5b5af115156108165760006000fd5b50505050600660005080600101549054632f921e418d8d600860005080600101549054896040518663ffffffff166c0100000000000000000000000002815260040180868682528160100152602001848482528160100152602001828152601001955050505050506000604051808303816000888881813b151561089a5760006000fd5b5af115156108a85760006000fd5b505050505b5050505050505050505050565b60066000508060010154905482565b600a6000508060010154905482565b33600a600050806001015490549091149190141615156108f85760006000fd5b878760026000508282909180600101839055555050508585600460005082829091806001018390555550505083836006600050828290918060010183905555505050818160086000508282909180600101839055555050505b5b5050505050505050565b60046000508060010154905482565b60006000308b8b8b8b8b8b8b8b604051808b8b82528160100152602001898982528160100152602001878051906010019060200280838360005b838110156109c15780820151818401525b6010810190506109a5565b50505050905001868051906010019060100280838360005b838110156109f55780820151818401525b6010810190506109d9565b505050509050018581526010018481526010018383906000191690906000191690825281601001526020019a5050505050505050505050604051809103902091509150610a3d565b9850989650505050505050565b60026000508060010154905482565b604051611d7980610a6a83390190560060506040523415620000115760006000fd5b60405162001d7938038062001d7983398101604052808080601001519051909160200190919290805182019190601001805182019190601001805190601001909190805190601001909190808060100151905190916020019091929050505b6000888860006000506000016000508282909180600101839055555050508888600060005060020160005082829091806001018390555550505084600060005060040160005081909090555082826000600050600601600050828290600019169090918060010183905555505050836000600050600501600050819090905550600090505b86518110156200027e57600086828151811015156200011057fe5b906010019060100201511180156200014f57506000600088838151811015156200013657fe5b9060100190602002018060100151905190911491901416155b15156200015c5760006000fd5b6001600a600050600089848151811015156200017457fe5b9060100190602002018060100151905182528160100152602001908152601001600020905060006101000a81548160ff021916908315150217905550600b6000508054806001018281620001c991906200028e565b91909060005260106000209050906002020160005b8984815181101515620001ed57fe5b9060100190602002018060100151905190919290919250919090918060010183905555505085818151811015156200022157fe5b906010019060100201516009600050600089848151811015156200024157fe5b906010019060200201806010015190518252816010015260200190815260100160002090506000508190909055505b8080600101915050620000f5565b5b505050505050505050620002fc565b815481835581811511620002c0576002028160020283600052601060002090509182019101620002bf9190620002c5565b5b505050565b620002f99190620002d1565b80821115620002f557600081815080600090556001016000905550600201620002d1565b5090565b90565b611a6d806200030c6000396000f300605060405236156100f9576000356c01000000000000000000000000900463ffffffff1680630434acf8146100fd578063075d4782146101075780631fb976631461011d578063245935851461015d57806328a070251461018757806345d363c61461019d5780634895623f146101d25780634be67162146101f6578063686d22111461023557806376057d1a1461026a5780638f2790b3146102ae5780639f26d0ad146102ed578063a35d33a91461033e578063a6f2ae3a1461037b578063b9e7459914610385578063be9b1a9e14610451578063dab0abea1461047a578063f11b8188146104f6578063f59e38b714610536576100f9565b5b5b005b610105610587565b005b34156101135760006000fd5b61011b6105b1565b005b34156101295760006000fd5b610147600480808060100135903590916020019091929050506106f4565b6040518082815260100191505060405180910390f35b34156101695760006000fd5b610171610716565b6040518082815260100191505060405180910390f35b34156101935760006000fd5b61019b61072b565b005b34156101a95760006000fd5b6101d060048080806010013590359091602001909192908035906010019091905050610a2c565b005b34156101de5760006000fd5b6101f46004808035906010019091905050610c18565b005b34156102025760006000fd5b6102186004808035906010019091905050610ce9565b604051808383825281601001526020019250505060405180910390f35b34156102415760006000fd5b61026860048080806010013590359091602001909192908035906010019091905050610d28565b005b34156102765760006000fd5b61029460048080806010013590359091602001909192905050611013565b604051808215151515815260100191505060405180910390f35b34156102ba5760006000fd5b6102d0600480803590601001909190505061103f565b604051808383825281601001526020019250505060405180910390f35b34156102f95760006000fd5b610328600480808060100135903590916020019091929080806010013590359091602001909192905050611072565b6040518082815260100191505060405180910390f35b341561034a5760006000fd5b6103796004808080601001359035909160200190919290808060100135903590916020019091929050506110ab565b005b6103836112d4565b005b34156103915760006000fd5b61044f6004808035906010019091908035906010019091908035906010019082018035906010019191908080602002601001604051908101604052809392919081815260100183836020028082843782019150505050505090909190803590601001908201803590601001919190808060100260100160405190810160405280939291908181526010018383601002808284378201915050505050509090919080806010013590359060001916909091602001909192905050611462565b005b61047860048080806010013590359091602001909192908035906010019091905050611545565b005b34156104865760006000fd5b61048e6115d2565b604051808a8a825281601001526020018888825281601001526020018681526010018581526010018484906000191690906000191690825281601001526020018260038111156104da57fe5b60ff168152601001995050505050505050505060405180910390f35b34156105025760006000fd5b61052060048080806010013590359091602001909192905050611630565b6040518082815260100191505060405180910390f35b34156105425760006000fd5b610571600480808060100135903590916020019091929080806010013590359091602001909192905050611652565b6040518082815260100191505060405180910390f35b34600c6000506000338252816010015260200190815260100160002090506000508190909055505b565b336000600050600201600050806001015490549091149190141615156105d75760006000fd5b600360038111156105e457fe5b600060005060080160009054906101000a900460ff16600381111561060557fe5b148061063c57506000600381111561061957fe5b600060005060080160009054906101000a900460ff16600381111561063a57fe5b145b15156106485760006000fd5b6001600060005060080160006101000a81548160ff0219169083600381111561066d57fe5b02179055507fa84608b60f29a142fdf93af4c92c6e0600d4aa669e4373cd1c26fff30d54324660006000506002016000508060010154905460006000506004016000505460405180848482528160100152602001828152601001806f50545030303500000000000000000000815260100150601001935050505060405180910390a15b5b5b565b600c600050602052818160005260105260306000209050600091509150505481565b6000600b600050805490509050610728565b90565b6000600060006000336000600050600201600050806001015490549091149190141615156107595760006000fd5b6002600060005060080160006101000a81548160ff0219169083600381111561077e57fe5b02179055504360006000506005016000508190909055507f3d3dc5f62311c8d504eb0b5bf60174bb19486593410dbf78e60a3c8f8372087a60006000506002016000508060010154905460405180838382528160100152602001806f505450303037000000000000000000008152601001506010019250505060405180910390a1600091505b600b60005080549050821015610a2457600b6000508281548110151561082657fe5b9060005260106000209050906002020160005b50806001015490549350935083835050600a6000506000858582528160100152602001908152601001600020905060009054906101000a900460ff1680156108ce57506000600d60005060008686825281601001526020019081526010016000209050600050600060006000506002016000508060010154905482528160100152602001908152601001600020905060005054115b15610a1657600d6000506000858582528160100152602001908152601001600020905060005060006000600050600201600050806001015490548252816010015260200190815260100160002090506000505490506000600d600050600086868252816010015260200190815260100160002090506000506000600060005060020160005080600101549054825281601001526020019081526010016000209050600050819090905550838363fbb001d6600060005060020160005080600101549054856000604051601001526040518463ffffffff166c010000000000000000000000000281526004018084848252816010015260200182815260100193505050506010604051808303816000888881813b15156109ed5760006000fd5b5af115156109fb5760006000fd5b50505050604051805190601001501515610a155760006000fd5b5b5b8180600101925050610804565b5b5b50505050565b600081118015610a78575080600d600050600085858252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000505410155b1515610a845760006000fd5b7f797847cd24af3f2afd42c81caf3d2c377d9021b5edcab11d49dba60248551e673386868660405180868682528160100152602001848482528160100152602001828152601001806f505450303034000000000000000000008152601001506010019550505050505060405180910390a1610b4481600d60005060008686825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050546116a190919063ffffffff16565b600d60005060008585825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050819090905550828263fbb001d633856000604051601001526040518463ffffffff166c010000000000000000000000000281526004018084848252816010015260200182815260100193505050506010604051808303816000888881813b1515610bea5760006000fd5b5af11515610bf85760006000fd5b50505050604051805190601001501515610c125760006000fd5b5b505050565b33600060005060020160005080600101549054909114919014161515610c3e5760006000fd5b6002600060005060080160006101000a81548160ff02191690836003811115610c6357fe5b02179055508060006000506005016000508190909055507f3d3dc5f62311c8d504eb0b5bf60174bb19486593410dbf78e60a3c8f8372087a60006000506002016000508060010154905460405180838382528160100152602001806f505450303036000000000000000000008152601001506010019250505060405180910390a15b5b50565b60006000600b60005083815481101515610cff57fe5b9060005260106000209050906002020160005b508060010154905491509150610d23565b915091565b33600060005060020160005080600101549054909114919014161515610d4e5760006000fd5b60026003811115610d5b57fe5b600060005060080160009054906101000a900460ff166003811115610d7c57fe5b14151515610d8a5760006000fd5b600060096000506000858582528160100152602001908152601001600020905060005054118015610e2a5750610e0581600d60005060008686825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050546116c390919063ffffffff16565b6009600050600085858252816010015260200190815260100160002090506000505410155b1515610e365760006000fd5b600a6000506000848482528160100152602001908152601001600020905060009054906101000a900460ff161515610e6e5760006000fd5b610ebd81600d60005060008686825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050546116c390919063ffffffff16565b600d600050600085858252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000508190909055507f31fd1dc7157b84cef3d48f5614a7eabe829d8b4367a461d799875dfc347ab8a53386868660405180868682528160100152602001848482528160100152602001828152601001806f505450303031000000000000000000008152601001506010019550505050505060405180910390a18282637b7814523330876000604051601001526040518663ffffffff166c0100000000000000000000000002815260040180868682528160100152602001848482528160100152602001828152601001955050505050506010604051808303816000888881813b1515610fe35760006000fd5b5af11515610ff15760006000fd5b5050505060405180519060100150151561100b5760006000fd5b5b5b5b505050565b600a6000506020528181600052601052603060002090506000915091509054906101000a900460ff1681565b600b6000508181548110151561105157fe5b9060005260106000209050906002020160005b915090508060010154905482565b600d6000506020528383600052601052603060002090506000506020528181600052601052603060002090506000935093505050505481565b600060006000336000600050600201600050806001015490549091149190141615156110d75760006000fd5b600090505b600b600050805490508110156112c957600b600050818154811015156110fe57fe5b9060005260106000209050906002020160005b50806001015490549250925082825050600a6000506000848482528160100152602001908152601001600020905060009054906101000a900460ff16156112bb576111c360096000506000858582528160100152602001908152601001600020905060005054600d6000506000868682528160100152602001908152601001600020905060005060008a8a825281601001526020019081526010016000209050600050546116a190919063ffffffff16565b600d600050600085858252816010015260200190815260100160002090506000506000898982528160100152602001908152601001600020905060005081909090555061127760096000506000858582528160100152602001908152601001600020905060005054600d6000506000868682528160100152602001908152601001600020905060005060008888825281601001526020019081526010016000209050600050546116c390919063ffffffff16565b600d60005060008585825281601001526020019081526010016000209050600050600087878252816010015260200190815260100160002090506000508190909055505b5b80806001019150506110dc565b5b5b50505050505050565b60006000600160038111156112e557fe5b600060005060080160009054906101000a900460ff16600381111561130657fe5b1415156113135760006000fd5b600060005060040160005054600c600050600033825281601001526020019081526010016000209050600050541015151561134e5760006000fd5b600060005060020160005080600101549054915091506113958282600c6000506000338252816010015260200190815260100160002090506000505461154563ffffffff16565b6003600060005060080160006101000a81548160ff021916908360038111156113ba57fe5b02179055503360006000506002016000508282909180600101839055555050506113eb8282336110ab63ffffffff16565b7faa4189542ca8da242be9f3805ec348582b10a1c3c83dbc4a3b3091a743cf8f328383333460405180868682528160100152602001848482528160100152602001828152601001806f505450303039000000000000000000008152601001506010019550505050505060405180910390a15b5b5050565b336000600050600201600050806001015490549091149190141615156114885760006000fd5b6002600381111561149557fe5b600060005060080160009054906101000a900460ff1660038111156114b657fe5b141515156114c45760006000fd5b6000861115156114d45760006000fd5b6000851115156114e45760006000fd5b8560006000506004016000508190909055508181600060005060060160005082829060001916909091806001018390555550505084600060005060050160005081909090555061153a84846116ea63ffffffff16565b5b5b5b505050505050565b61157881600c600050600033825281601001526020019081526010016000209050600050546116a190919063ffffffff16565b600c60005060003382528160100152602001908152601001600020905060005081909090555082826108fc83908115029060405160006040518083038185898989f194505050505015156115cc5760006000fd5b5b505050565b60006000508060000160005080600101549054909180600201600050806001015490549091806004016000505490806005016000505490806006016000508060010154905490918060080160009054906101000a900460ff16905089565b6009600050602052818160005260105260306000209050600091509150505481565b6000600d6000506000848482528160100152602001908152601001600020905060005060008686825281601001526020019081526010016000209050600050549050611699565b949350505050565b60008282111515156116b35760006000fd5b81830390506116bd565b92915050565b6000818301905080508281101515156116dc5760006000fd5b8090506116e4565b92915050565b600060006000835185511415156117015760006000fd5b600092505b84518310156117af5761173b858481518110151561172057fe5b9060100190602002018060100151905161195f63ffffffff16565b15156117a157600b600050805480600101828161175891906119da565b91909060005260106000209050906002020160005b878681518110151561177b57fe5b906010019060200201806010015190519091929091925091909091806001018390555550505b5b8280600101935050611706565b600091505b600b60005080549050821015611834576000600a6000506000600b600050858154811015156117df57fe5b9060005260106000209050906002020160005b508060010154905482528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055505b81806001019250506117b4565b600090505b8451811015611957576000848281518110151561185257fe5b9060100190601002015111801561188f575060006000868381518110151561187657fe5b9060100190602002018060100151905190911491901416155b151561189b5760006000fd5b6001600a600050600087848151811015156118b257fe5b9060100190602002018060100151905182528160100152602001908152601001600020905060006101000a81548160ff02191690831515021790555083818151811015156118fc57fe5b9060100190601002015160096000506000878481518110151561191b57fe5b906010019060200201806010015190518252816010015260200190815260100160002090506000508190909055505b8080600101915050611839565b5b5050505050565b60006000600090505b600b600050805490508110156119ca578383600b6000508381548110151561198c57fe5b9060005260106000209050906002020160005b508060010154905490911491901416156119bc57600191506119d3565b5b8080600101915050611968565b600091506119d3565b5092915050565b815481835581811511611a09576002028160020283600052601060002090509182019101611a089190611a0e565b5b505050565b611a3e9190611a18565b80821115611a3a57600081815080600090556001016000905550600201611a18565b5090565b905600a165627a7a72305820c9d45ac561f06d35af2e9c53da13b7dcc7dc5486b211bec4c33236159313df0f0029a165627a7a723058207ffa7cd210e6b870d8a4af6dd8c6f7b13bbef4c516acea5e98c81aef728ad1bc0029")).withContractIndex(contract_e3633, ByteArrayWrapper.wrap(Hex.decode("128cc316b13b38523d62325034b4cc02127c39deea79aabccb63ac8a3414fbb7")), // block 3_275_912
    ByteArrayWrapper.wrap(Hex.decode("a2507317b2d98648c61359434b012b4b79fe73feb10d80b51a9f49954f0f0b01")), InternalVmType.FVM).withDetails(contract_685a1, Hex.decode("f93892a0a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a18080b91159f91156b903e008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c42347ccaaa3ec0fa58113f76a23f8b46df802fa379087a122779f9059ae376d6c971087cdd29d4282795c402cf244aa632a19e4049ee5a400cb3db841d4e3886faada75d04cb6ae5e267df5c5f5cf0e93272a5ba6ffff83e20c1d3135efd38345dcf34c67524db82fbb8e6f678ca9fb51303513e815a7d5b703b23022c0154638cb4d95ca4c64d9e37c9d1843ae4dd9fe219ea12e429f58cadfb3df102d001197e13c8e9d6ac805077d7f2487c257dbaa35796f4b068f373ddb5463b74f75c53ba084dcc306f5a1c6c02092155fa2683e717a37022e2e05ebd8b1eb060e7ffed3d15a830df4f6cee05bc0d1ef98b99dc8b4a7b080617ff2fd65c4332a29b763548944615df6156e6baf7ebe5b1925bfd4b8e9c2b5941cce036bf3737b0703905f8ed42a6b0f81a12abae587f8aa587a84872d3a8b7a13ec91c304db6272037e1a5432b278284fa49f6d05ee9d6f027dc4098f427a9f904d024e94f555d1fa6a9ab1a5437b1f69bc9fd55b1e41f4efd1e4333bd231463817a7d2ac2d38efd8174c1bbccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f6e51ea4a1df9ab733c542838bf212acafaa7ec17755d6061726f95e69ad9711a5b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9df7eb9b918b18676abb30d131df5a9ca4920c1faff46456c89a6bc5fb01ed045ef997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b5d9f9d340959cda61c1c150fa175b67ff623f439877a09e6a65552663236e4d6482b4514106064e3bee2f1d5d7a0d054239cddd5599624727f6c00f08a9c4e4d7921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b4493bcf7114217f569830622c492c4bcccc90c2a114fb30785eceb007788b01f5eb9de6e90a8fccdf2c05f725ed581605d060d29a3a5dfe41d62bf34f9515a0a89c5b986d438292a519dd54c8343f6d956fb5bc3da8c55874b69a867b07c54ab0aafb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c44042d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad12bc6a3d5c0d07cf56beece0d58e39c159988d8f85e641bafec5b8010217886a1f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d060e5837268d4318c794db647536a7be37cce1a97ae83b8b570020530dfc1734b3a592b5e719dda4ac89fd63830cec85a14cbb28ac4b4086a6a6033b59386925eef34569a090804f73abb60d75c7a65c6fe5399d8824fbeba6d23a9d9951892df90d33b4f3a031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe29190f2c96b8e06caaf785f69ddf11637ab18afeea020f213947568a2c4417f770b51f8667e76b20495aec1e7150dab3d5c339f6b538c8b10dfde374787bc6e000000afeea02016b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c8c8b10dfde374787bc6e000000b4f3a0206d54d269dbf7b38605af4b922cd4bdb091545c4af86905e0d525693d622c60919057414e44000000000000000000000008b853f851808080a02bc6a3d5c0d07cf56beece0d58e39c159988d8f85e641bafec5b8010217886a18080808080808080a093bcf7114217f569830622c492c4bcccc90c2a114fb30785eceb007788b01f5e80808080b8b3f8b1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9d80808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b80a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480a3e2a020dd23cc6874677a0fed19a6725becb32e729122c22cf2268b3568278a3909b001b853f851808080a0da75d04cb6ae5e267df5c5f5cf0e93272a5ba6ffff83e20c1d3135efd38345dc8080a01087cdd29d4282795c402cf244aa632a19e4049ee5a400cb3db841d4e3886faa80808080808080808080adeca0309489a9529008ce5afed97a80893cb79e2eb35654d88bcf4c1643d568a503f68a893635c9adc5dea00000b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0c5b986d438292a519dd54c8343f6d956fb5bc3da8c55874b69a867b07c54ab0a80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b873f87180808080808080a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b853f85180808080808080a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80808080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b4f3a034c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a0d270e7759e8fc020df5f1352bf4d32b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0c5b986d438292a519dd54c8343f6d956fb5bc3da8c55874b69a867b07c54ab0a80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080808080a084dcc306f5a1c6c02092155fa2683e717a37022e2e05ebd8b1eb060e7ffed3d180b4f3a0329591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a29190a07d9895f295b815eb88268c820cfcfdb8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0f34c67524db82fbb8e6f678ca9fb51303513e815a7d5b703b23022c0154638cb80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080808080a084dcc306f5a1c6c02092155fa2683e717a37022e2e05ebd8b1eb060e7ffed3d180b4f3a035c749bcf708d70b69d4d2f4ebd726038bcbebf9ea7ce8481b6acc1e12014e4c91909342c1bcdfe9297ef594fa352c7cab26b4f3a020c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a0d270e7759e8fc020df5f1352bf4d32b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0c5b986d438292a519dd54c8343f6d956fb5bc3da8c55874b69a867b07c54ab0a80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b853f85180808080a05d9f9d340959cda61c1c150fa175b67ff623f439877a09e6a65552663236e4d680808080a03c8e9d6ac805077d7f2487c257dbaa35796f4b068f373ddb5463b74f75c53ba080808080808080afeea020f213947568a2c4417f770b51f8667e76b20495aec1e7150dab3d5c339f6b538c8b10dfa8017dd9f68f600000b0efa12073447ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b68c8b3e09de2596099e2b000000b853f851808080a02bc6a3d5c0d07cf56beece0d58e39c159988d8f85e641bafec5b8010217886a18080808080808080a047ccaaa3ec0fa58113f76a23f8b46df802fa379087a122779f9059ae376d6c9780808080afeea03616b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c8c8b10dfde374787bc6e000000b4f3a035d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c919077616e6478000000000000000000000aafeea020447ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b68c8b3e09de2596099e2b000000afeea033447ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b68c8b3e09de2596099e2b000000b90114f90111a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0f34c67524db82fbb8e6f678ca9fb51303513e815a7d5b703b23022c0154638cb80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b44808080a05a830df4f6cee05bc0d1ef98b99dc8b4a7b080617ff2fd65c4332a29b763548980a084dcc306f5a1c6c02092155fa2683e717a37022e2e05ebd8b1eb060e7ffed3d180b893f891a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9d808080808080a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b8d3f8d1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da02d7747566a61c96c73ea6bda1882fa814956a51bba3668f083fb21a2bca0fad1808080a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b80a0f8ea7c5252fc782622cb7263f99643dc9aaa3f7cb704a288996edbbe26943d0d80a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080808080a0afb8a7d1e3ab56a02c08929bfcb018027a393899a32b133f5fb138f6ee2c440480b83baced0005757200025b42acf317f8060854e0020000787000000020060e5837268d4318c794db647536a7be37cce1a97ae83b8b570020530dfc1734f92710b9270d60506040523615610172576000356c01000000000000000000000000900463ffffffff16806305d2035b1461017857806306fdde03146101a6578063097c23f81461023657806311d0cbd71461026057806318160ddd1461029c578063313ce567146102c65780633323984d146102f6578063556f0dc7146103435780636de9f32b1461036d5780636f77f29e1461039757806370a082311461046b5780637b781452146104ab5780637ba944d1146105095780637d64bcb4146105b35780638355fa24146105e15780638da5cb5b1461067a578063958ec7d1146106ab578063959b8c3f146106f857806395d89b4114610724578063b239dff0146107b4578063b2d82245146108bc578063be29184f14610909578063d0dc282014610956578063d95b637114610a19578063dd62ed3e14610a6e578063f0a147ad14610abf578063f68deec214610b3b578063f99ef5a514610bf6578063fad8b32a14610c61578063fbb001d614610c8d57610172565b60006000fd5b34156101845760006000fd5b61018c610cda565b604051808215151515815260100191505060405180910390f35b34156101b25760006000fd5b6101ba610ced565b6040518080601001828103825283818151815260100191508051906010019080838360005b838110156101fb5780820151818401525b6010810190506101df565b50505050905090810190600f1680156102285780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b34156102425760006000fd5b61024a610d9f565b6040518082815260100191505060405180910390f35b341561026c5760006000fd5b6102826004808035906010019091905050610dd1565b604051808215151515815260100191505060405180910390f35b34156102a85760006000fd5b6102b0610e2f565b6040518082815260100191505060405180910390f35b34156102d25760006000fd5b6102da610e41565b604051808260ff1660ff16815260100191505060405180910390f35b34156103025760006000fd5b61032960048080806010013590359091602001909192908035906010019091905050610e4f565b604051808215151515815260100191505060405180910390f35b341561034f5760006000fd5b610357610f68565b6040518082815260100191505060405180910390f35b34156103795760006000fd5b610381610f7a565b6040518082815260100191505060405180910390f35b34156103a35760006000fd5b610469600480808060100135903590916020019091929080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050610f83565b005b34156104775760006000fd5b61049560048080806010013590359091602001909192905050610fc2565b6040518082815260100191505060405180910390f35b34156104b75760006000fd5b6104ef600480808060100135903590916020019091929080806010013590359091602001909192908035906010019091905050610ff3565b604051808215151515815260100191505060405180910390f35b34156105155760006000fd5b6105b16004808080601001359035909160200190919290808060100135903590600019169090916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190505061115d565b005b34156105bf5760006000fd5b6105c7611168565b604051808215151515815260100191505060405180910390f35b34156105ed5760006000fd5b610678600480808060100135903590600019169090916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506111de565b005b34156106865760006000fd5b61068e6111e7565b604051808383825281601001526020019250505060405180910390f35b34156106b75760006000fd5b6106de600480808060100135903590916020019091929080359060100190919050506111f6565b604051808215151515815260100191505060405180910390f35b34156107045760006000fd5b61072260048080806010013590359091602001909192905050611285565b005b34156107305760006000fd5b610738611322565b6040518080601001828103825283818151815260100191508051906010019080838360005b838110156107795780820151818401525b60108101905061075d565b50505050905090810190600f1680156107a65780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b34156107c05760006000fd5b6108ba600480808060100135903590916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190808060100135903590600019169090916020019091929080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506113d4565b005b34156108c85760006000fd5b6108ef600480808060100135903590916020019091929080359060100190919050506113e2565b604051808215151515815260100191505060405180910390f35b34156109155760006000fd5b61093c60048080806010013590359091602001909192908035906010019091905050611553565b604051808215151515815260100191505060405180910390f35b34156109625760006000fd5b610a1760048080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506116d3565b005b3415610a255760006000fd5b610a5460048080806010013590359091602001909192908080601001359035909160200190919290505061170c565b604051808215151515815260100191505060405180910390f35b3415610a7a5760006000fd5b610aa9600480808060100135903590916020019091929080806010013590359091602001909192905050611777565b6040518082815260100191505060405180910390f35b3415610acb5760006000fd5b610b3960048080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506117c6565b005b3415610b475760006000fd5b610bdc6004808035906010019082018035906010019191908080602002601001604051908101604052809392919081815260100183836020028082843782019150505050505090909190803590601001908201803590601001919190808060100260100160405190810160405280939291908181526010018383601002808284378201915050505050509090919050506117f7565b604051808215151515815260100191505060405180910390f35b3415610c025760006000fd5b610c5f6004808035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050611983565b005b3415610c6d5760006000fd5b610c8b600480808060100135903590916020019091929050506119ae565b005b3415610c995760006000fd5b610cc060048080806010013590359091602001909192908035906010019091905050611a4b565b604051808215151515815260100191505060405180910390f35b600c60009054906101000a900460ff1681565b610cf561255c565b60046000508054600181600116156101000203166002900480600f016010809104026010016040519081016040528092919081815260100182805460018160011615610100020316600290048015610d905780600f10610d6357610100808354040283529160100191610d90565b8201919060005260106000209050905b815481529060010190601001808311610d7357829003600f168201915b50505050509050610d9c565b90565b6000610dc7610db330610fc263ffffffff16565b600760005054611ad490919063ffffffff16565b9050610dce565b90565b600060026000508060010154905433909114919014161515610df35760006000fd5b610e15670de0b6b3a76400008302600760005054611af690919063ffffffff16565b600760005081909090555060019050610e29565b5b919050565b60006007600050549050610e3e565b90565b600060129050610e4c565b90565b6000610ea082600a6000506000338252816010015260200190815260100160002090506000506000878782528160100152602001908152601001600020905060005054611af690919063ffffffff16565b600a600050600033825281601001526020019081526010016000209050600050600086868252816010015260200190815260100160002090506000508190909055508383337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded600a60005060003382528160100152602001908152601001600020905060005060008b8b825281601001526020019081526010016000209050600050546040518082815260100191505060405180910390a360019050610f61565b9392505050565b60006006600050549050610f77565b90565b600b6000505481565b610f9433898961170c63ffffffff16565b1515610fa05760006000fd5b610fb833898989898989896001611b1d63ffffffff16565b5b50505050505050565b6000600860005060008484825281601001526020019081526010016000209050600050549050610fed565b92915050565b6000600a600050600087878252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000505482111515156110415760006000fd5b61109082600a6000506000898982528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060005054611ad490919063ffffffff16565b600a60005060008888825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050819090905550611110338888888888601060405190810160405280600081526010015060106040519081016040528060008152601001506000611b1d63ffffffff16565b838387877f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a360019050611154565b95945050505050565b5b5050505050505050565b60006002600050806001015490543390911491901416151561118a5760006000fd5b6001600c60006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1600190506111da565b5b90565b5b505050505050565b60026000508060010154905482565b600081600a600050600033825281601001526020019081526010016000209050600050600086868252816010015260200190815260100160002090506000508190909055508383337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded876040518082815260100191505060405180910390a36001905061127e565b9392505050565b3383839091149190141615151561129c5760006000fd5b600160096000506000848482528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055503383837ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a35b5050565b61132a61255c565b60056000508054600181600116156101000203166002900480600f0160108091040260100160405190810160405280929190818152601001828054600181600116156101000203166002900480156113c55780600f10611398576101008083540402835291601001916113c5565b8201919060005260106000209050905b8154815290600101906010018083116113a857829003600f168201915b505050505090506113d1565b90565b5b5050505050505050505050565b60006000600a6000506000338252816010015260200190815260100160002090506000506000868682528160100152602001908152601001600020905060005054905080831115611476576000600a600050600033825281601001526020019081526010016000209050600050600087878252816010015260200190815260100160002090506000508190909055506114cc565b6114898382611ad490919063ffffffff16565b600a600050600033825281601001526020019081526010016000209050600050600087878252816010015260200190815260100160002090506000508190909055505b8484337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded600a60005060003382528160100152602001908152601001600020905060005060008c8c825281601001526020019081526010016000209050600050546040518082815260100191505060405180910390a36001915061154b565b509392505050565b6000600260005080600101549054339091149190141615156115755760006000fd5b600c60009054906101000a900460ff161515156115925760006000fd5b670de0b6b3a76400008202915081506007600050546115bf83600b60005054611af690919063ffffffff16565b111515156115cd5760006000fd5b6115e582600b60005054611af690919063ffffffff16565b600b6000508190909055506116248260086000506000878782528160100152602001908152601001600020905060005054611af690919063ffffffff16565b60086000506000868682528160100152602001908152601001600020905060005081909090555083837f56e184a04f4acbb46419fef039f6ceb5f04cb0ae59e0a0f971f128a2274ded9c856040518082815260100191505060405180910390a28383600060007f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a3600190506116ca565b5b5b9392505050565b6116e433878761170c63ffffffff16565b15156116f05760006000fd5b611704338787878787611d9963ffffffff16565b5b5050505050565b600082828686909114919014168061176857506009600050600086868252816010015260200190815260100160002090506000506000848482528160100152602001908152601001600020905060009054906101000a900460ff165b905061176f565b949350505050565b6000600a60005060008686825281601001526020019081526010016000209050600050600084848252816010015260200190815260100160002090506000505490506117be565b949350505050565b6117f033338888888860106040519081016040528060008152601001506001611b1d63ffffffff16565b5b50505050565b600060006002600050806001015490543390911491901416151561181b5760006000fd5b6000845111151561182c5760006000fd5b8251845114151561183d5760006000fd5b600090505b83518110156119725760006000858381518110151561185d57fe5b90601001906020020180601001519051909114919014161515156118815760006000fd5b6000838281518110151561189157fe5b906010019060100201511115156118a85760006000fd5b6118f684828151811015156118b957fe5b90601001906020020180601001519051670de0b6b3a764000086858151811015156118e057fe5b9060100190601002015102611a4b63ffffffff16565b50838181518110151561190557fe5b90601001906020020180601001519051337f57fae1ac296aac0148b76b88b13e6c7b0f828ea10dee26f520382015ef4a5192888781518110151561194557fe5b906010019060100201516040518082815260100191505060405180910390a35b8080600101915050611842565b6001915061197b565b5b5092915050565b6119a9333386866010604051908101604052806000815260100150611d9963ffffffff16565b5b5050565b338383909114919014161515156119c55760006000fd5b600060096000506000848482528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055503383837f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a35b5050565b6000611a8a3333888888601060405190810160405280600081526010015060106040519081016040528060008152601001506000611b1d63ffffffff16565b8383337f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a360019050611acd565b9392505050565b6000828211151515611ae65760006000fd5b8183039050611af0565b92915050565b600081830190508050828110151515611b0f5760006000fd5b809050611b17565b92915050565b611b2c84611f7f63ffffffff16565b611b438a8a8a8a8a8a8a8a8a611fc063ffffffff16565b60006000878790911491901416151515611b5d5760006000fd5b30878790911491901416151515611b745760006000fd5b83600860005060008a8a8252816010015260200190815260100160002090506000505410151515611ba55760006000fd5b611bd984600860005060008b8b82528160100152602001908152601001600020905060005054611ad490919063ffffffff16565b600860005060008a8a825281601001526020019081526010016000209050600050819090905550611c348460086000506000898982528160100152602001908152601001600020905060005054611af690919063ffffffff16565b600860005060008888825281601001526020019081526010016000209050600050819090905550611c738a8a8a8a8a8a8a8a8a8a6121a763ffffffff16565b858589898d8d7f6565b4df665bcfc14a1b6f57e1795dca4db5db09ae197ee12abddf26cd59a9b08b8b8b604051808481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611ce85780820151818401525b601081019050611ccc565b50505050905090810190600f168015611d155780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611d4f5780820151818401525b601081019050611d33565b50505050905090810190600f168015611d7c5780820380516001836010036101000a031916815260100191505b509550505050505060405180910390a45b50505050505050505050565b611da883611f7f63ffffffff16565b82611db98686610fc263ffffffff16565b10151515611dc75760006000fd5b611dfb8360086000506000888882528160100152602001908152601001600020905060005054611ad490919063ffffffff16565b600860005060008787825281601001526020019081526010016000209050600050819090905550611e3a83600760005054611ad490919063ffffffff16565b6007600050819090905550611e5e8787878760006000898989611fc063ffffffff16565b848488887f01055277133200c3a8bacd68b8d67d1c54154ac94c975287d02eeb1d5f696b12888888604051808481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611ed15780820151818401525b601081019050611eb5565b50505050905090810190600f168015611efe5780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611f385780820151818401525b601081019050611f1c565b50505050905090810190600f168015611f655780820380516001836010036101000a031916815260100191505b509550505050505060405180910390a35b50505050505050565b80611faf600660005054611fa1600660005054856123b490919063ffffffff16565b6123df90919063ffffffff16565b141515611fbc5760006000fd5b5b50565b600060006120148989603060405190810160405280601181526010016f414950303034546f6b656e53656e646581526010016f7200000000000000000000000000000081526010015061242263ffffffff16565b91509150600060008383909114919014161561202f5761219a565b8181634e1524c18d8d8d8d8d8d8d8d8d6040518a63ffffffff166c01000000000000000000000000028152600401808a8a825281601001526020018888825281601001526020018686825281601001526020018481526010018060100180601001838103835285818151815260100191508051906010019080838360005b838110156120c95780820151818401525b6010810190506120ad565b50505050905090810190600f1680156120f65780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b838110156121305780820151818401525b601081019050612114565b50505050905090810190600f16801561215d5780820380516001836010036101000a031916815260100191505b509b5050505050505050505050506000604051808303816000888881813b15156121875760006000fd5b5af115156121955760006000fd5b505050505b5050505050505050505050565b600060006121fb8888603060405190810160405280601481526010016f414950303034546f6b656e526563697081526010016f69656e7400000000000000000000000081526010015061242263ffffffff16565b9150915060006000838390911491901416151561238157818163417bf7af8e8e8e8e8e8e8e8e8e6040518a63ffffffff166c01000000000000000000000000028152600401808a8a825281601001526020018888825281601001526020018686825281601001526020018481526010018060100180601001838103835285818151815260100191508051906010019080838360005b838110156122ac5780820151818401525b601081019050612290565b50505050905090810190600f1680156122d95780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b838110156123135780820151818401525b6010810190506122f7565b50505050905090810190600f1680156123405780820380516001836010036101000a031916815260100191505b509b5050505050505050505050506000604051808303816000888881813b151561236a5760006000fd5b5af115156123785760006000fd5b505050506123a5565b82156123a457612397888861254b63ffffffff16565b15156123a35760006000fd5b5b5b5b505050505050505050505050565b60006000821115156123c65760006000fd5b81838115156123d157fe5b0490506123d9565b92915050565b600060008314156123f3576000905061241c565b8183029050805081838281151561240657fe5b041415156124145760006000fd5b80905061241c565b92915050565b6000600060006000846040518082805190601001908083835b60108310151561246157805182525b60108201915060108101905060108303925061243b565b6001836010036101000a03801982511681845116808217855250505050505090500191505060405180910390209150915060006000508060010154905463ff42bfd6898986866000604051602001526040518563ffffffff166c01000000000000000000000000028152600401808585825281601001526020018383906000191690906000191690825281601001526020019450505050506020604051808303816000888881813b15156125155760006000fd5b5af115156125235760006000fd5b50505050604051808060100151905190916020015093509350612541565b5050935093915050565b600060019050612556565b92915050565b601060405190810160405280600081526010015090565b8260086000506000848482528160100152602001908152601001600020905060005081909090555081818460007f7f0c55adb7f69e3decf3ca20f9a2367b205d728e6905eea6c4fb6f3934f842cc60405160405180910390a35b505050565b60006000846040518082805190601001908083835b60108310151561260d57805182525b6010820191506010810190506010830392506125e7565b6001836010036101000a03801982511681845116808217855250505050505090500191505060405180910390209150915060006000508060010154905463a1e6b0663086868a8a6040518763ffffffff166c010000000000000000000000000281526004018087878252816010015260200185859060001916909060001916908252816010015260200183838252816010015260200196505050505050506000604051808303816000888881813b15156126c75760006000fd5b5af115156126d55760006000fd5b505050505b50505050505600a165627a7a7230582010e55ed479c7271d66651ea5c5f57d7437032caf45bedc8a05c6911cca9158090029")).withContractIndex(contract_685a1, ByteArrayWrapper.wrap(Hex.decode("4d93ab5e6fefb5b0fe77159447121edd788acb58b7ef48c3f4ab8fae417159f9")), // block 3_277_220
    ByteArrayWrapper.wrap(Hex.decode("7795219b807f58136f09981ad40e637d4e49e4d405204ed0188ec5643df7aea2")), InternalVmType.FVM).withDetails(contract_e26fd, Hex.decode("f93641a0a062913c81a71b819e3f8b453ba65584439c5629a8ff6c34d1a28281ffee26fd8080b913c2f913bfb9042008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c4232b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac05025443c8e9d6ac805077d7f2487c257dbaa35796f4b068f373ddb5463b74f75c53ba01c30046276bb7f1208d498ce729a1be65c625e6a58fc84b4433ca43c7410b8cfe4bd0c76bdb256450378016458f9d25da2fbb141bbf3e4dde3a88ea29326b6554941125a7035c8ff6ea49ba19f338747bc845cfbb0a06e8cd0f3c071aa47940dae22a132797e6645dbaa6ad9820289cbc09f976aee19859147cf3982fd7caf68c1ae0722b36755e4a342643b287c0133a47367bb0eeea8be329bd30828c4203002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d87c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a1a0e7a4b7004bbfe92e444aa88474d37d5f4cae6fae58f3ce7faca643fc99c273994667d33a2d2cfd58f184df1669df247f6f2468aa476c139bbacf47c9b1a885b8602961d90f1df1031e7a8aef415b61b550d8f45b05256688fa66c0b3beed5bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f5b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9df997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b5d9f9d340959cda61c1c150fa175b67ff623f439877a09e6a65552663236e4d6e16d9291c166ebe11818d209da552709fe3963fab0c0973d9ada8c09389fed0d7921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b44e417c800d9db5ce7682f04e2667718d7ce13b1a348951d4133320df070ebc9ee05bd33ffadb7dea3aeee2076c485e7f8ab017515ef226a7c2d486544c13f1dae3640160eb0add665b67d993b0d372140abd4832cc7093f31da906a474647a88edbf8254664854ac47e3e799f54a9757e74a3c7a990f5ce630cd19d5bade9a8d67dbf3a52a5bc922fec0c8476f0f62e633038d1cc462095a3279b1c490409ed355ee3efa435204348d4ceaf0ea9df59365b8009afedce74dcd220c19efc2854c1755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c14f002a0a162b31c33f9d52285ad5a594cca7f98c4966128a66b21f2aa1cecfd102a26bf5465482abaafe59de62ef1d3b9bfff829b0052489800b6c357cd10e8ddbacbecd1f9a4b946921a205a5f3067962072ae11a9b5d96d86c6dadf3eab8b1f9839b9167dd78e1679b14b4805371e325d7d20e3468b33c5723282b80c209eff60558f07a3287c03609554966939a12d0e287b905c9597ad474ba2e1ee53391818cce5875c3ae68ae716d5f5fd218ea9f103e082775af3f8cd681710f9cccc5e182d61584c60037b511832bc02dd5ab0ca21a32f856b52b813ec7002ec01bb3f90f5cb4f3a031509c452f6dfe111542c993fd69155807681a69d213608e19dad1bd20cfcbe29190f2c96b8e06caaf785f69ddf11637ab18b4f3a031254a74ec360b89b0720387c28f5e4808a10682322049574b6649da7318d1879190a07d9895f295b815eb88268c820cfcfda3e2a020dd23cc6874677a0fed19a6725becb32e729122c22cf2268b3568278a3909b001b90114f90111a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c4238080a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b90114f90111a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c4238080a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a05ee3efa435204348d4ceaf0ea9df59365b8009afedce74dcd220c19efc2854c180b893f89180808080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac050254480808080a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b873f87180808080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac050254480808080808080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880a3e2a02016b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c01a3e2a03616b59b01777a634c37228af48619b5b4e00f97e452138a2f63d20eb5c7057c01b4f3a03462725d95f5486b842eecbad59e8900bcedd98920b24929fc5f305b510eecd39190f2c96b8e06caaf785f69ddf11637ab18aceba0309489a9529008ce5afed97a80893cb79e2eb35654d88bcf4c1643d568a503f68988016345785d8a0000b853f85180808080a0f9839b9167dd78e1679b14b4805371e325d7d20e3468b33c5723282b80c209ef80808080808080a0dbf8254664854ac47e3e799f54a9757e74a3c7a990f5ce630cd19d5bade9a8d680808080b8f3f8f1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b808080a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b4f3a034c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a0d270e7759e8fc020df5f1352bf4d32b4f3a0329591f5e764398e2f85a631d09df021eeffaaaea7b1cf1ebcb4fc98d9e521a29190a07d9895f295b815eb88268c820cfcfdb4f3a035c749bcf708d70b69d4d2f4ebd726038bcbebf9ea7ce8481b6acc1e12014e4c91909342c1bcdfe9297ef594fa352c7cab26b4f3a020c1c088cc9453996779630ad3af45cbd92814828dd784cf2aa12df95d1b8afe9190a0d270e7759e8fc020df5f1352bf4d32b5f4a12041254a74ec360b89b0720387c28f5e4808a10682322049574b6649da7318d1879190a07d9895f295b815eb88268c820cfcfdb853f85180808080a05d9f9d340959cda61c1c150fa175b67ff623f439877a09e6a65552663236e4d680808080a03c8e9d6ac805077d7f2487c257dbaa35796f4b068f373ddb5463b74f75c53ba080808080808080b90114f90111a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c4238080a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b8d3f8d1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9d808080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797b808080a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b90134f90131a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0e182d61584c60037b511832bc02dd5ab0ca21a32f856b52b813ec7002ec01bb380a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a05ee3efa435204348d4ceaf0ea9df59365b8009afedce74dcd220c19efc2854c180abea9f38d897ae1e0273111b21587591f5872ac1f4889e743285b960a1798789b58c89880de0b6b3a7640000b90154f90151a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a002a26bf5465482abaafe59de62ef1d3b9bfff829b0052489800b6c357cd10e8d80a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4aa01a0e7a4b7004bbfe92e444aa88474d37d5f4cae6fae58f3ce7faca643fc99c2780a05ee3efa435204348d4ceaf0ea9df59365b8009afedce74dcd220c19efc2854c180b853f851808080a0818cce5875c3ae68ae716d5f5fd218ea9f103e082775af3f8cd681710f9cccc58080a0c1ae0722b36755e4a342643b287c0133a47367bb0eeea8be329bd30828c4203080808080808080808080b4f3a035d3b5e7ab6cee1adff7bc24adf9c021024a71e03173d0869ed100a9a9c7a83c919041696f6e546b6e00000000000000000eb90154f90151a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9da0755cf4fd2c9c8355bd12290f2d8f149897a483dc8f5195e6ff7983b4913aa2c18080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac0502544a0f997a7dce2d69c739e04698bc8788bbffac89728a3cd21b7f3183c415c8e797ba008256dbf20f8ca2a18f9651cca8ad7e437a9c71f1b0b72470fd107e66f29c423a0e182d61584c60037b511832bc02dd5ab0ca21a32f856b52b813ec7002ec01bb380a07921c1281c146c683810c99f9a7512b924eabb3f12f63025e2f3d1dc6eb82b448080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4aa01a0e7a4b7004bbfe92e444aa88474d37d5f4cae6fae58f3ce7faca643fc99c2780a05ee3efa435204348d4ceaf0ea9df59365b8009afedce74dcd220c19efc2854c180a3e213a03994667d33a2d2cfd58f184df1669df247f6f2468aa476c139bbacf47c9b1a88b853f85180808080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac050254480808080808080808080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880abea9f347ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b68988016345785d8a0000b8b3f8b1a05b2dee65d7ff69deffff62d05c9b7c96d3c7f0652c0d7e80cfb2590e4359aa9d808080a02b5fecfbad7885a9c6944a33b22c9171461d20194142274de9f186aac050254480808080a0bccc03602ccfd6c4edd3dbcbee75f1a4a0248fb4eb87dd9071aa18b2e711df5f8080a07c4405efc6eef4ebf6df19a6ebe89c7f78b707e303bfae35f6ab03f019d90d4a8080a002c5790462da6cff0114b4643fe54c766025715603a22448cbe5e24a75ae43d880b4f3a0206d54d269dbf7b38605af4b922cd4bdb091545c4af86905e0d525693d622c609190777841696f6e0000000000000000000caceba033447ea04229b1ba129b133e3cb7c198e88336b477f733dce518b03cae24b0b68988016345785d8a0000b83baced0005757200025b42acf317f8060854e00200007870000000207dbf3a52a5bc922fec0c8476f0f62e633038d1cc462095a3279b1c490409ed35f92256b922536050604052361561015c576000356c01000000000000000000000000900463ffffffff16806302387a7b1461018b57806306fdde03146101af57806307802a891461023f578063097c23f81461027457806318160ddd1461029e578063238dafe0146102c8578063313ce567146102f6578063556f0dc714610326578063607b9f97146103505780636f77f29e1461038157806370a08231146104555780637b781452146104955780637ba944d1146104f35780638355fa241461059d5780638da5cb5b14610636578063958ec7d114610667578063959b8c3f146106b457806395d89b41146106e0578063b239dff014610770578063bcb60fa914610878578063d0dc28201461089e578063d95b637114610961578063dd62ed3e146109b6578063f0a147ad14610a07578063f340fa0114610a83578063f99ef5a514610aa3578063fad8b32a14610b0e578063fbb001d614610b3a5761015c565b5b600b60009054906101000a900460ff1615156101795760006000fd5b61018833610b8763ffffffff16565b5b005b34156101975760006000fd5b6101ad6004808035906010019091905050610cc2565b005b34156101bb5760006000fd5b6101c3610cf2565b6040518080601001828103825283818151815260100191508051906010019080838360005b838110156102045780820151818401525b6010810190506101e8565b50505050905090810190600f1680156102315780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b341561024b5760006000fd5b61027260048080806010013590359091602001909192908035906010019091905050610da4565b005b34156102805760006000fd5b610288610f55565b6040518082815260100191505060405180910390f35b34156102aa5760006000fd5b6102b2610f87565b6040518082815260100191505060405180910390f35b34156102d45760006000fd5b6102dc610f99565b604051808215151515815260100191505060405180910390f35b34156103025760006000fd5b61030a610fac565b604051808260ff1660ff16815260100191505060405180910390f35b34156103325760006000fd5b61033a610fba565b6040518082815260100191505060405180910390f35b341561035c5760006000fd5b610364610fcc565b604051808383825281601001526020019250505060405180910390f35b341561038d5760006000fd5b610453600480808060100135903590916020019091929080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050610fdb565b005b34156104615760006000fd5b61047f6004808080601001359035909160200190919290505061101a565b6040518082815260100191505060405180910390f35b34156104a15760006000fd5b6104d960048080806010013590359091602001909192908080601001359035909160200190919290803590601001909190505061104b565b604051808215151515815260100191505060405180910390f35b34156104ff5760006000fd5b61059b6004808080601001359035909160200190919290808060100135903590600019169090916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506111b5565b005b34156105a95760006000fd5b610634600480808060100135903590600019169090916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506111c0565b005b34156106425760006000fd5b61064a6111c9565b604051808383825281601001526020019250505060405180910390f35b34156106735760006000fd5b61069a600480808060100135903590916020019091929080359060100190919050506111d8565b604051808215151515815260100191505060405180910390f35b34156106c05760006000fd5b6106de60048080806010013590359091602001909192905050611267565b005b34156106ec5760006000fd5b6106f4611304565b6040518080601001828103825283818151815260100191508051906010019080838360005b838110156107355780820151818401525b601081019050610719565b50505050905090810190600f1680156107625780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b341561077c5760006000fd5b610876600480808060100135903590916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190808060100135903590600019169090916020019091929080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506113b6565b005b34156108845760006000fd5b61089c600480803515159060100190919050506113c4565b005b34156108aa5760006000fd5b61095f60048080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050611404565b005b341561096d5760006000fd5b61099c60048080806010013590359091602001909192908080601001359035909160200190919290505061143d565b604051808215151515815260100191505060405180910390f35b34156109c25760006000fd5b6109f16004808080601001359035909160200190919290808060100135903590916020019091929050506114a8565b6040518082815260100191505060405180910390f35b3415610a135760006000fd5b610a8160048080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506114f7565b005b610aa160048080806010013590359091602001909192905050610b87565b005b3415610aaf5760006000fd5b610b0c6004808035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050611528565b005b3415610b1a5760006000fd5b610b3860048080806010013590359091602001909192905050611553565b005b3415610b465760006000fd5b610b6d600480808060100135903590916020019091929080359060100190919050506115f0565b604051808215151515815260100191505060405180910390f35b600b60009054906101000a900460ff161515610ba35760006000fd5b60006000838390911491901416151515610bbd5760006000fd5b60003414151515610bce5760006000fd5b610c02346008600050600085858252816010015260200190815260100160002090506000505461167990919063ffffffff16565b600860005060008484825281601001526020019081526010016000209050600050819090905550610c413460076000505461167990919063ffffffff16565b60076000508190909055507fcfc9ea1a968c72c91178476fa3b83a07e27018034488f6c866e54b86b1077f6f346040518082815260100191505060405180910390a18181307f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959346040518082815260100191505060405180910390a35b5050565b600b60009054906101000a900460ff161515610cde5760006000fd5b610cee3383610da463ffffffff16565b5b50565b610cfa612101565b60046000508054600181600116156101000203166002900480600f016010809104026010016040519081016040528092919081815260100182805460018160011615610100020316600290048015610d955780600f10610d6857610100808354040283529160100191610d95565b8201919060005260106000209050905b815481529060010190601001808311610d7857829003600f168201915b50505050509050610da1565b90565b600b60009054906101000a900460ff161515610dc05760006000fd5b60006000848490911491901416151515610dda5760006000fd5b60008114151515610deb5760006000fd5b600860005060008484825281601001526020019081526010016000209050600050548111151515610e1c5760006000fd5b82823090911491901416151515610e335760006000fd5b610e6781600860005060008686825281601001526020019081526010016000209050600050546116a090919063ffffffff16565b600860005060008585825281601001526020019081526010016000209050600050819090905550610ea6816007600050546116a090919063ffffffff16565b600760005081909090555030337f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959866040518082815260100191505060405180910390a37ff60ed2c5ae890dbad0839fd18e28b8599923aab42590a3e690920aa7830e7bd0826040518082815260100191505060405180910390a182826108fc83908115029060405160006040518083038185898989f19450505050501515610f4f5760006000fd5b5b505050565b6000610f7d610f693061101a63ffffffff16565b6007600050546116a090919063ffffffff16565b9050610f84565b90565b60006007600050549050610f96565b90565b600b60009054906101000a900460ff1681565b600060129050610fb7565b90565b60006006600050549050610fc9565b90565b600c6000508060010154905482565b610fec33898961143d63ffffffff16565b1515610ff85760006000fd5b611010338989898989898960016116c263ffffffff16565b5b50505050505050565b6000600860005060008484825281601001526020019081526010016000209050600050549050611045565b92915050565b6000600a600050600087878252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000505482111515156110995760006000fd5b6110e882600a60005060008989825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050546116a090919063ffffffff16565b600a600050600088888252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000508190909055506111683388888888886010604051908101604052806000815260100150601060405190810160405280600081526010015060006116c263ffffffff16565b838387877f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a3600190506111ac565b95945050505050565b5b5050505050505050565b5b505050505050565b60026000508060010154905482565b600081600a600050600033825281601001526020019081526010016000209050600050600086868252816010015260200190815260100160002090506000508190909055508383337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded876040518082815260100191505060405180910390a360019050611260565b9392505050565b3383839091149190141615151561127e5760006000fd5b600160096000506000848482528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055503383837ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a35b5050565b61130c612101565b60056000508054600181600116156101000203166002900480600f0160108091040260100160405190810160405280929190818152601001828054600181600116156101000203166002900480156113a75780600f1061137a576101008083540402835291601001916113a7565b8201919060005260106000209050905b81548152906001019060100180831161138a57829003600f168201915b505050505090506113b3565b90565b5b5050505050505050505050565b600260005080600101549054339091149190141615156113e45760006000fd5b8015600b60006101000a81548160ff0219169083151502179055505b5b50565b61141533878761143d63ffffffff16565b15156114215760006000fd5b61143533878787878761193e63ffffffff16565b5b5050505050565b600082828686909114919014168061149957506009600050600086868252816010015260200190815260100160002090506000506000848482528160100152602001908152601001600020905060009054906101000a900460ff165b90506114a0565b949350505050565b6000600a60005060008686825281601001526020019081526010016000209050600050600084848252816010015260200190815260100160002090506000505490506114ef565b949350505050565b611521333388888888601060405190810160405280600081526010015060016116c263ffffffff16565b5b50505050565b61154e33338686601060405190810160405280600081526010015061193e63ffffffff16565b5b5050565b3383839091149190141615151561156a5760006000fd5b600060096000506000848482528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055503383837f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a35b5050565b600061162f33338888886010604051908101604052806000815260100150601060405190810160405280600081526010015060006116c263ffffffff16565b8383337f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a360019050611672565b9392505050565b6000818301905080508281101515156116925760006000fd5b80905061169a565b92915050565b60008282111515156116b25760006000fd5b81830390506116bc565b92915050565b6116d184611b2463ffffffff16565b6116e88a8a8a8a8a8a8a8a8a611b6563ffffffff16565b600060008787909114919014161515156117025760006000fd5b308787909114919014161515156117195760006000fd5b83600860005060008a8a825281601001526020019081526010016000209050600050541015151561174a5760006000fd5b61177e84600860005060008b8b825281601001526020019081526010016000209050600050546116a090919063ffffffff16565b600860005060008a8a8252816010015260200190815260100160002090506000508190909055506117d9846008600050600089898252816010015260200190815260100160002090506000505461167990919063ffffffff16565b6008600050600088888252816010015260200190815260100160002090506000508190909055506118188a8a8a8a8a8a8a8a8a8a611d4c63ffffffff16565b858589898d8d7f6565b4df665bcfc14a1b6f57e1795dca4db5db09ae197ee12abddf26cd59a9b08b8b8b604051808481526010018060100180601001838103835285818151815260100191508051906010019080838360005b8381101561188d5780820151818401525b601081019050611871565b50505050905090810190600f1680156118ba5780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b838110156118f45780820151818401525b6010810190506118d8565b50505050905090810190600f1680156119215780820380516001836010036101000a031916815260100191505b509550505050505060405180910390a45b50505050505050505050565b61194d83611b2463ffffffff16565b8261195e868661101a63ffffffff16565b1015151561196c5760006000fd5b6119a083600860005060008888825281601001526020019081526010016000209050600050546116a090919063ffffffff16565b6008600050600087878252816010015260200190815260100160002090506000508190909055506119df836007600050546116a090919063ffffffff16565b6007600050819090905550611a038787878760006000898989611b6563ffffffff16565b848488887f01055277133200c3a8bacd68b8d67d1c54154ac94c975287d02eeb1d5f696b12888888604051808481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611a765780820151818401525b601081019050611a5a565b50505050905090810190600f168015611aa35780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611add5780820151818401525b601081019050611ac1565b50505050905090810190600f168015611b0a5780820380516001836010036101000a031916815260100191505b509550505050505060405180910390a35b50505050505050565b80611b54600660005054611b4660066000505485611f5990919063ffffffff16565b611f8490919063ffffffff16565b141515611b615760006000fd5b5b50565b60006000611bb98989603060405190810160405280601181526010016f414950303034546f6b656e53656e646581526010016f72000000000000000000000000000000815260100150611fc763ffffffff16565b915091506000600083839091149190141615611bd457611d3f565b8181634e1524c18d8d8d8d8d8d8d8d8d6040518a63ffffffff166c01000000000000000000000000028152600401808a8a825281601001526020018888825281601001526020018686825281601001526020018481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611c6e5780820151818401525b601081019050611c52565b50505050905090810190600f168015611c9b5780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611cd55780820151818401525b601081019050611cb9565b50505050905090810190600f168015611d025780820380516001836010036101000a031916815260100191505b509b5050505050505050505050506000604051808303816000888881813b1515611d2c5760006000fd5b5af11515611d3a5760006000fd5b505050505b5050505050505050505050565b60006000611da08888603060405190810160405280601481526010016f414950303034546f6b656e526563697081526010016f69656e74000000000000000000000000815260100150611fc763ffffffff16565b91509150600060008383909114919014161515611f2657818163417bf7af8e8e8e8e8e8e8e8e8e6040518a63ffffffff166c01000000000000000000000000028152600401808a8a825281601001526020018888825281601001526020018686825281601001526020018481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611e515780820151818401525b601081019050611e35565b50505050905090810190600f168015611e7e5780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611eb85780820151818401525b601081019050611e9c565b50505050905090810190600f168015611ee55780820380516001836010036101000a031916815260100191505b509b5050505050505050505050506000604051808303816000888881813b1515611f0f5760006000fd5b5af11515611f1d5760006000fd5b50505050611f4a565b8215611f4957611f3c88886120f063ffffffff16565b1515611f485760006000fd5b5b5b5b505050505050505050505050565b6000600082111515611f6b5760006000fd5b8183811515611f7657fe5b049050611f7e565b92915050565b60006000831415611f985760009050611fc1565b81830290508050818382811515611fab57fe5b04141515611fb95760006000fd5b809050611fc1565b92915050565b6000600060006000846040518082805190601001908083835b60108310151561200657805182525b601082019150601081019050601083039250611fe0565b6001836010036101000a03801982511681845116808217855250505050505090500191505060405180910390209150915060006000508060010154905463ff42bfd6898986866000604051602001526040518563ffffffff166c01000000000000000000000000028152600401808585825281601001526020018383906000191690906000191690825281601001526020019450505050506020604051808303816000888881813b15156120ba5760006000fd5b5af115156120c85760006000fd5b505050506040518080601001519051909160200150935093506120e6565b5050935093915050565b6000600190506120fb565b92915050565b601060405190810160405280600081526010015090565b60006000846040518082805190601001908083835b60108310151561215357805182525b60108201915060108101905060108303925061212d565b6001836010036101000a03801982511681845116808217855250505050505090500191505060405180910390209150915060006000508060010154905463a1e6b0663086868a8a6040518763ffffffff166c010000000000000000000000000281526004018087878252816010015260200185859060001916909060001916908252816010015260200183838252816010015260200196505050505050506000604051808303816000888881813b151561220d5760006000fd5b5af1151561221b5760006000fd5b505050505b50505050505600a165627a7a723058202c5097dec8aa5c968da2516576b53203aa99fa6cfd6210bec1186d5e103bcc0d0029")).withContractIndex(contract_e26fd, ByteArrayWrapper.wrap(Hex.decode("b3a5cd92ce03e981e8bcf866edb008818abb0962e7e18763ea76fe602e4399c3")), // block 3_292_810
    ByteArrayWrapper.wrap(Hex.decode("c6f118aed5d084d07c500602ba70136ead08459d552b97f4824e5106c784bb7a")), InternalVmType.FVM).withAvmEnabled().build().bc;
    // ensure the contract does not exist before the import
    AionAddress contract_12ee0 = AddressUtils.wrapAddress("a0002158871a9ea1ba36ca6488cd027d0cfdc4115a8dbe1096137ad5b9b12ee0");
    assertThat(blockchain.getRepository().getAccountState(contract_12ee0)).isNull();
    // import block
    Pair<ImportResult, AionBlockSummary> results = blockchain.tryToConnectAndFetchSummary(blockToImport);
    assertThat(results.getLeft()).isEqualTo(ImportResult.IMPORTED_BEST);
    // check that the new account state exists
    AccountState account_12ee0 = blockchain.getRepository().getAccountState(contract_12ee0);
    assertThat(account_12ee0).isNotNull();
    byte[] storedCodeHash = account_12ee0.getCodeHash();
    assertThat(storedCodeHash).isEqualTo(Hex.decode("391b46a6c577a9d1fb40ec7fd1b3f757c123fa68e16f3e481d86e6dec9ca4d10"));
    // check that the contract index was correctly updated
    ContractInformation ci = blockchain.getRepository().getIndexedContractInformation(contract_12ee0);
    assertThat(ci.getVmUsed(storedCodeHash)).isEqualTo(InternalVmType.FVM);
    assertThat(ci.getInceptionBlocks(storedCodeHash)).contains(blockToImport.getHashWrapper());
    // collect the consensus information from the block & receipt.
    AionBlockSummary blockSummary = results.getRight();
    long[] energyPerTx = new long[] { 21_000L, 682_044L, 21_000L, 21_000L };
    byte[][] postTxStates = new byte[][] { Hex.decode("4d0c77f874eae3b60fa464967ee4c5d273f28251c5653134339d9325ef4df437"), Hex.decode("3f9941fb0994827660ae7d93ff256ef05a75072bebbaa3a811e99be25324ae82"), Hex.decode("907cf5a610e2fc43805b592d8abd554da7e57f1c083dde75616a0c433f7caf48"), Hex.decode("a7ce7d4adb083485bad984bb69ed6e5f822672fdaeed5eac04707fbaca5e9cf6") };
    byte[][] txReceiptTrie = new byte[][] { Hex.decode("f90125a04d0c77f874eae3b60fa464967ee4c5d273f28251c5653134339d9325ef4df437b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0"), Hex.decode("f90429a03f9941fb0994827660ae7d93ff256ef05a75072bebbaa3a811e99be25324ae82b9010000088080000000000000100000000000000000000000000000000000000000000000000000001080000000000000000000000000080000000000000000000080000000020000000000000000000000000000000002000000000000101000000000000000040002000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000001000000000000000040000000000000002000000000000000000000000000000000000000000000000000000000000000000000000020000000000040100000000000000000000004000000000000000000000000000410040800000000f90302f885a0a0c0d2ce127aad2d35abf8abf643b40cbe125ace76ea65b6d8f1e882c51e3633e1a0d1055ec94b4a7a0d56691f9dbf655f3a683a28857c2c565ed0c3e910645b34c7b8400000000000000000000000000000001000000000000000000000000000000001a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a1f8e5a0a0c0d2ce127aad2d35abf8abf643b40cbe125ace76ea65b6d8f1e882c51e3633e1a053e51eafcc6cc48771db669cdabad660678aa9510059c72a6bb42930a9a6fe12b8a0a044857e4dec3533b0f5c0a390c7754156bc628565804685fe907d335705503da0002158871a9ea1ba36ca6488cd027d0cfdc4115a8dbe1096137ad5b9b12ee000000000000000000008e1bc9bf0400068a745df0db885e014513a5d98102e725fd5bb97a4fd39f9f574e15a5ec58015000000000000000000000000000000800000000000000000000000000000000745584730303031000000000000000000f8f9a0a062913c81a71b819e3f8b453ba65584439c5629a8ff6c34d1a28281ffee26fdf884a06565b4df665bcfc14a1b6f57e1795dca4db5db09ae197ee12abddf26cd59a9b0a0a0b75b3dffe8d4f0e3c5d07f31437e939040593230d6658cae57b2a0fd2aa803a0a044857e4dec3533b0f5c0a390c7754156bc628565804685fe907d335705503da0a0b177c837e80040e16d9769fdd2b3c2869a2a7e626cce0e65036cc22041be5ab85000000000000000000008e1bc9bf0400000000000000000000000000000000030000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000f897a0a062913c81a71b819e3f8b453ba65584439c5629a8ff6c34d1a28281ffee26fdf863a027772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959a0a044857e4dec3533b0f5c0a390c7754156bc628565804685fe907d335705503da0a0b177c837e80040e16d9769fdd2b3c2869a2a7e626cce0e65036cc22041be5a9000000000000000000008e1bc9bf04000"), Hex.decode("f90125a0907cf5a610e2fc43805b592d8abd554da7e57f1c083dde75616a0c433f7caf48b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0"), Hex.decode("f90125a0a7ce7d4adb083485bad984bb69ed6e5f822672fdaeed5eac04707fbaca5e9cf6b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0") };
    int[] expectedIntTxSizes = new int[] { 0, 9, 0, 0 };
    // check the receipts
    for (int i = 0; i < postTxStates.length; i++) {
        AionTxReceipt receipt = blockSummary.getSummaries().get(i).getReceipt();
        byte[] txHash = receipt.getTransaction().getTransactionHash();
        assertThat(receipt.isSuccessful()).isTrue();
        assertThat(receipt.getEnergyUsed()).isEqualTo(energyPerTx[i]);
        assertThat(receipt.getPostTxState()).isEqualTo(postTxStates[i]);
        assertThat(receipt.getReceiptTrieEncoded()).isEqualTo(txReceiptTrie[i]);
        List<InternalTransaction> internal = blockSummary.getSummaries().get(i).getInternalTransactions();
        assertThat(internal.size()).isEqualTo(expectedIntTxSizes[i]);
        assertThat(blockchain.getTransactionInfo(txHash).getInternalTransactions()).isEqualTo(internal.size() == 0 ? null : internal);
    }
    byte[] stateRoot = blockSummary.getBlock().getStateRoot();
    byte[] blockReceiptsRoot = blockSummary.getBlock().getReceiptsRoot();
    // verify the consensus information.
    String expectedRoot = "f30f1664810717a262352f1a04bf4baa93e350a070ae31713dd4de41eac99dea";
    String expectedReceiptsRoot = "e24c156b92a7f6d806de5dd349c768d839267e124d7b34cb44a463c343b466f4";
    assertThat(stateRoot).isEqualTo(Hex.decode(expectedRoot));
    assertThat(blockReceiptsRoot).isEqualTo(Hex.decode(expectedReceiptsRoot));
    // checking repository state and total difficulty
    assertThat(blockchain.getRepository().getRoot()).isEqualTo(Hex.decode(expectedRoot));
    assertThat(blockchain.getTotalDifficulty()).isEqualTo(expectedTotalDifficultyAfterImport);
}
Also used : AionAddress(org.aion.types.AionAddress) ImportResult(org.aion.zero.impl.core.ImportResult) Builder(org.aion.zero.impl.blockchain.StandaloneBlockchain.Builder) StandaloneBlockchain(org.aion.zero.impl.blockchain.StandaloneBlockchain) AccountState(org.aion.base.AccountState) InternalTransaction(org.aion.types.InternalTransaction) ContractInformation(org.aion.zero.impl.db.ContractInformation) AionBlockSummary(org.aion.zero.impl.types.AionBlockSummary) Block(org.aion.zero.impl.types.Block) BigInteger(java.math.BigInteger) AionTxReceipt(org.aion.base.AionTxReceipt) Test(org.junit.Test)

Example 3 with ContractInformation

use of org.aion.zero.impl.db.ContractInformation in project aion by aionnetwork.

the class MainnetConsensusTest method testImportBlock3277220.

/**
 * Test for importing block <a href="https://mainnet.aion.network/#/block/3277220">3277220</a>.
 */
@Test
public void testImportBlock3277220() {
    // data extracted from the main network
    Block grandparentBlock = BlockUtil.newBlockFromRlp(Hex.decode("f90791f9078d01833201a2a0a18ad0c32c35c8e62d177385991666f239e39d9c0b674bc38760f1c027b439d4a0a00983f07c11ee9160a64dd3ba3dc3d1f88332a2869f25725f56cbd0be32ef7aa0cc9ce51629c01f203251867e211d915d92526b8d03ad4947054494adfbdcf183a045b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0a045b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000008aa6d0a041494f4e000000000000000000000000000000000000000000000000000000008083e4ed7b845ced093ea0f32a00000000000000000000000000000000000000000000000000001af63326b905800090428cfad06f4e16cc773fe6df521226be292d08022663fdc05063d75e2756af3af5936cfa064b087b05231acc53603ec4dbecefa44451ec7961fccf2b937cd3d25f48c797802cf42fbfcf2e80c6fa99f729949faa7f4f093adb4b3671465c9ca2464a4fcad96d758754eed8821988675096f314d85a110b79f98fffc1cf06987e25df09fc14cb06e4bdd6d91001304d9dd2b853345d1f88af224011a76f8240e9a48c4d564ad74e497d8e27f95d3e0ae15fef29369b2e65bdf30d7a2d2f1336d1ad9b849016797ce03574ca346b9c703f92fe6e94879bfcb4bfd9133f40c7999352cfe1ab70753aae7a9a7c5d78bdbb2e564692c4e6c6ca9e30bd59639e577cdcfe6243fda2d40d48403864581ce8f65ffa59596328b227623f6914a911f7d7f0f345021af10fdb2aad38e775991c42ed598814755148f5c899aee4769a438f33ab79a58d08394d6d20196a5ad9b4ca01f919095e6d9e09b10a7163fa5419011bd7c9e120edb02292ce608a21e0825655faa2a90e63029a72493960e827223f6afcfb8b2f98ad8e6612600207d6853905cbad3ddb8930bc6e2baf947d42efc4f1067583fdc9e3c99ede7f6f358685d19f88e9bce59f5807f6b6fac0191ad9f98b2c1c92d247e0f47d2afa6193111e9e1d77515deca39d5f39c6afc09c34b754664c861114a3619221fb00a3b20697743ea53b1abcef3b9262442e571c6bf80dbc6c50987db0a6ede1fa4eaf2e5c30026162d890511aada4127f12336b89ca8ad83f7473c21845ce2d48e41d2d2fb61b1d688cfa959cff9e7a842404df5b60c8b7b380e49c1d618a07ccf2fcb932b757df21ba26e9f112f36aecb1f0497de78a9ea70f4edfa766028b7949591218b5e6a85809decce0737d6f01f7663a19999cff1aa9aac53ee2222175b9c37c83b5687d77c51e4aee8718b3361a3d5eb68e57fa82809be8f13165152b66ce776ba5a73b338b082c413f79cfcb6678f58b4f016d5a6a7040f7464b50420341225b61586c5dfb6d822843228f5d3d8c77778aa53da7f6a73526ad17e7f6fe163e15621c23b049b85e381e07bc7c8736f11dbe17283f623a8869477ed6f0cd438d84b6d5d68a6a877c68c00250bac4741186d94d0d9024d2f29e102a5a8474032b0c50fd7420526bf62763ac18a60cc81f34d6b7aca91c091db95e61361032d9f7691c7b12cfb704f5d7a2ffa14a9589ed842e3501f8ec778e98063d4a7f0c05bd473106228c5e399642a66abf0f697b877077bb1cb27f0d1d27f02bbbf362dc4a9232d450c0ee550abcdd5ff4bb171ca400bb8706811efcedde1fc5fef244b7cf4f60dd7528d372fffbfb01022c6e3f545d5bad6186e81b5c4faf0c16b26cd4e49f3d677df43a6b7ed5e95fd249bf6c3e388377213eda3d00741c58882147bf70ded36a7be12c26beeb711af5b1a3eeae8128ffc4e23447c8b421131c28f58b3ddf630514a8faed7dbeaedf1e183ccd3822b3032fe352fead7084b87e985b4ecfb36a1cd0073d653f1010baebc25b73e3b045372871c0c1f918e9e8b197920829bf8215378821392bad090135b40b348b1be6a1691e1c8e0c8fa5868db1d59d2fe679d37d96e0bee13b000457b7015f8cae53bd65e8367e8263959404d12489c83c10b7066b9953b92c19d4620846e43a170044a094f035daf90a707b0fc1ad7d22393a02f549a74240a3e4834e4731b39267eb89375c03599382d7f8299d5baf244f0bd656afa451ea75eeba410c7dcef234e2a8e74f1931157a74caff230bb028e2ea1bd1c9bb26866cf6b5aa9f1c6aa5543685aa702b468f4d597f70c9b83355be4c111cdbce2eff77801e73e28131c49556ef6481dd97c5ee16e883372a73c3a09b9876177a236879f8ab83f6cbaf2efb213868a38b88214811604171a1ce1cc273f4229c2e5a799d61d8721e36161760923228077725a0efc2ec322a2b48814b3f567ff0486ed81ad73fae53a73c0f4dc0"));
    BigInteger totalDifficultyForGrandparent = new BigInteger("37934960913408");
    Block parentBlock = BlockUtil.newBlockFromRlp(Hex.decode("f90791f9078d01833201a3a0c9824186ae3d7beae4956d38eba730ae40a942debfb2cb6d915b4a9000ef09e7a0a0305694d2c938b4b383f06946c1bd1363df40c86f721377e321da7abbf831b3a05dd4e451c91e5ef396ab04196db0273300a7874ff89c2d67925e5ba8a6694e49a045b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0a045b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0b901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090000000000000000000000000008ab824a06e3231306b396571753168617368536f6c7665640000000000000000000000008083e4b440845ced0944a09c65000000000000000000000000000000000000000000000000000070e05a00b90580009958d16a898903fcdb5b2ecf7d0459a38914348d2c2ac80a7e8d67bcfeb12c8e2d78f2659bb5aabd96c687182001622c8bb44130a73920aa948ccca277b833ea081ac1c485488c1085f5273d5aa15faf48ad80bffe99dc04bbb19595a2c0552da1ee3fbe56af398bf5a7b9631c3020a27f3fe9895a3a50b23fba69b97154a56a31f034241a8d8afef66de72ade1d27b67121623807607379ba7903f3a999ab9a9efd5a888825d7284d7c53ecb25a39097b3ba26355c7a53edea22e64a37c36d3d14df1423c1b7a65344c33c843165d31228663c6de53bf4e7035131e8d40f35a7712656b6185977c3ec8c63f27007f2b43394a8300a8e71c5f7e13a182035681029e16bb39642a11557758fc71b2eceda78966e03f0deff83f95f90a2b418d461d3409d55e3e41604c6bc7dd93160b3cb0c6b930c75169cea7c522603f49cf57376e9badb93cba73a86571422e3ebe41d5b9545c7301adf9561c03be7085c800b09e8a3e80d66f9fe7b1149fe86cceb55683b546010c9a64f01f1856a0e766976d68dbfa9d1d8af7be8b7c02371fc395657f8e3f6e521d0355b897c6facde5ecce23e13fa4dde45614d5722c80c7caf8ef39ff1636184c0240d878fef79955e6781a0eed0dfff046db2b30fde53029bce0b9a4a4969634fb330bfa352a870b1437d519061943f61ba066b3eaa11411770eef4242512430746015f3d05e8905d2976b2b0028c2bf8497bad0343e0d620797e87f20f243f39b1af82e306f44cb74813d5f6ed61ec70321e4b8cb3b309aba4bd1e22e127a5a393de0df1fed4b90efda7bff713b5859956bc6ddf80554f0c80540362f1841959e78f3ac6260cd6e79e5875afbac62a2148dfd5282c762c1225d4a5d30dbdac986752364613419e2e0e457b43819eec48955fc226a30185244676d211e600673d4a4504674e1fa40f643d00d9677c019e40930568eeb2dc7ca4674754a39fffb8dd33693a22faffb014d4737d9f518811bde271043015d19089633f122d61d124f39bef9d621b0a49a4c20b1ffa6190de128f9af0e2b96600064f1c25e223d824f1a424d38652277236713f5b58b7e7d98e339c3f02948051901683286af8fe911333f7dae93a833145db6555d1ab87b17edbea979281868e8e714fdad10fec63f7c0fd5f42ec90e00670c181869dca479e74962752c862e4d5ff1cae31c9b2f79c818d81704e042f79abff34267080bf8816bd7a96fb499030a3e69dab939ec35f0cf1356f6234dbeffe57d96180ea7c267315412b4986b6babc1633d9aed4b13f685a707a4bfb42734b8ff1f1dc5362785f96576b7a3abae0d3f6e0fa4c70919eaf13fb35b69a9e85d7c2c11f9f82b05d73a64282575786bd6eb303f6559cb6e80647da6553e0d2594a5486b3b7412f04c71b9c2d7155310d9716d0b2b44eb038479de79e1e6415d661d8838cc4a37ef1e354d926088949a0d31a4dc5b5f0d788d9717bd2d5b8904cc98fa4646ddb0e406c020ed693f9e7dc36338f6d31f6ce26d71033f5e65c78894ff9b1ee8a9df806d1f81098b406ee4b23ee138e742183913aca461f3bbee762013e7c7d3e0fa54eaf5511d44c88664fac7a889ea378b20c526bd8c34f36564de2f89f39a89b50bf4e37d2b103268915c6d54ef27b3241c4c38eff75fc614c3a94ad82c5109ac92441ced3fe85a2f71a0d93d4da02577690e3bd44371e695a0e99904454a6a67d60b9d6318ffc643082e2e3b2d670736fee0954a5cba51e614f56df8b67f0dc898731528291da1adba4836735efb44dd4df562fd31921da687a8f984ab58ea43e45ba0e2e8875e780dbb3613ca6783e406ae103493802132d58d89cf0aed38530bd8ec425e9bf945ba49300ebeb572d2f53def39d14027f74e6bfe48f885ad11f95f5ca798c9db5cba3d2d150da6325368222ce699eb570e3c6f295419fbf03cdffe257575b94f7514a09a94185fe63bd3344aa477ff5527c0"));
    BigInteger totalDifficultyForParent = new BigInteger("37934970004516");
    byte[] worldStateAfterParentImport = Hex.decode(hexEncodedStateData("mainnetStateAt3277219.txt"));
    // block to import
    Block blockToImport = BlockUtil.newBlockFromRlp(Hex.decode("f933c9f9079001833201a4a0216be29d6d21469c14affc06884a76673d3abfcf49fa2e979d5b9f1c73a245e9a0a0305694d2c938b4b383f06946c1bd1363df40c86f721377e321da7abbf831b3a0a97680f42d7bbb8e175981e9dd847967427edfc8c5279475b70ca131680d5e99a00ef131530619de95904f271e90ac821cee575320ee13d7d8393ff78488d62b73a02b229b5a2c86702495ee53c85cd34a85a8e0746239b947fe4c9d64fc8dd83070b901000000400000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000004000000000002000000400000000000004000000000000000000000000400000000008000000000000000004000010000000000000000000000000000000000000200000000000000000000000000000080000000000000000000000000000000000000000000000000000200000000000000020000000000100000000480000000000000000000000000000000000000000000000008000000000004000000040000000000090000000000000000000000000008ab824a06e3231306b396571753168617368536f6c7665640000000000000000000000008311dd6d83e4ed6d845ced0959a0644a00000000000000000000000000000000000000000000000000007565e809b905800148fdb26e1444c97e910b3ba417d71a9d8603bbda5c6cfd77a8db37990d1e8f2b84d716d17578af942da794267fb6242049d5e06dc7ee3315c9138f19305ff9b9aa2f4e81b83f8a6e4eeadf6c30149eb1f42c8be6f8038a03d21229a313488a9dc3dd24616d1db476e207dda980193ca980e16e1bc2ba57342e4df0f965e2fe0a114b1a0985e585ae54d146b984fd4260357238a4e39c765d970b89e9cb98075596709bb7da6d5bbff51dfef6fbebe7065502b393007254b9e02d459887309d4dd1077cfbcb20744aece877fd4331ebf8643622eddfcc30353e67961f4da1c37bea00e9fccab33a907d082da93603bc5d8922da82a2c6352e02b472382afff5c6ac3644f03723b30ad1b31e4a2100004702604594ca096bd682a9f7910e2d9438f1e464e365dedb7b61e2be838f7a7143b73a4628e11cacfd9a4350e941d02a214dfdfcf8079df4e1863dc9da300b56b42aa61c97b5b0b2e3546bfdaf70d625063666c3e3e451faebb7b1135a6c9a71520d5cb9ccf408f71664a870e987af3e252d0dcd7a82978eb4b14f221d870192b052577deaa62121a89f67b1ec9f7a7df90a3e1cb6d29bb5a5d7a8b302671693109da7815a38dc2e08614fd0112577745fb398373e33aa86dc2a87b3186e1f075a244fa8dcd4ebbf807ad8f397c01b3273ed64ee126ce3a72fb23ad666fdc74dd33dddde4ce560bbd0a713f3f8f08145d18869a87f2dc6129ebdf36c5def2d02063c99fa319200aace8d262a247dccd605246f73cd283a27a14c0a7a614c749b5a3e2d092f47d91cd433b6bd0e6794f8f095fb6b6f340d4a788662d9952c687eb1cd209a49819e57a1f5f1e11263300a0b56167a3e6eeb60099743c5cff0abc2c597a34ed5cf795f76330fadd53969abde0670c980f0a66cd86af5eaedd12a45ccbef2120f6e07b37fd12e66699b5ba8498f7d5afad8cb77c34c33cf812e60acb891f6283b7a2d06cd643abe193caa0b014ddfec1a3e02803d105923e4e0d875349245941c4b1bf5e87f9e0525172a71ff2272d112fa3799c2b3b61034273990384396d0a971ff6bc8eaf23317a7e161c480381c9de98f76d16766450595c7ee6d8bed25593cab390b067f739ac1d46618c2d817c0b2d9a9da99acb396c91adf66b272a47e1473e58a242a62ba19694d59b23885258802d0a4fb8076bb32a34f203ee68b95ec3721741230275aaa72d8d5f3e871ee4efeab62b7e89bc87f690e0238509dd0f298a29ba1a238c21a7eaa2d0be17f38ba08c120d9fef86bd8f2d03c9ab2b6dfae0d152f39df5f0e524fcf4a3202d9ee08c535dc9522b273892673b0690e66e35b37c336c9ddcded254b72093c56e2c4ebd3c402d23524de823d24fb44c93bac3b79959a956eadeaaa187fedc2959727bf26a27d247b22cbe105f4097c106e1158d1936293c629eb5f7b91c3fbb18d5e4c923f5a63302dacea0b0bb0acf1dca089e053f8120c729c74b405045b0c2b1a564bf1f86334123ada044c57c42aea6ed13f243674f8c74d0a322f6041453b7b7c080cafb0cce50f7f5381822443b07775031114fcd9bc01feb1ffc710303c4e81a5536948b1011836e721f4779a8efb2dd5630ff0ddd445d1b2346f203b5b54cf4f68e95164aa8c461b176f3652ca2dae3c6203261f0f1204539ff53e6d3126d808c8d929f43bb240d27db35eea1c2966f730bd0a3f42d64d197a2efebcad0f5769c5a8549576fcf567b6049983be246a3052b2e00a36dd2b457b5c14a931d9a04b18a74b8287f69c69b9e34ed5adc4360ae55dedddbb2a1d9144b2b72ef26f6649380d6e3e392d82c5b8716c4ffcfe3b6fb8e25768d673b32507b26fadc77279739f090ce66d3600c2afae49e711e720a753d41846b5534025e986896ea316555db3a540857bdcc60472c9a17d8615e84a29f408763cb4309d45b0216cb2749d54aa7373202c90924753038a53a76d460f439e4955cdcb65e7a7f92c33f92c30078080b92bb260506040527fa0d270e7759e8fc020df5f1352bf4d329342c1bcdfe9297ef594fa352c7cab2660006000509190825590600101556000600b6000509090556000600c60006101000a81548160ff0219169083151502179055503415620000655760006000fd5b60405160208062002b928339810160405280808060100151905190916020019091929050505b5b3360026000508282909180600101839055555050505b602060405190810160405280600581526010016f77616e6478000000000000000000000081526010015060046000509080519060100190620000e6929190620003b8565b50602060405190810160405280600481526010016f57414e44000000000000000000000000815260100150600560005090805190601001906200012b929190620003b8565b506a3e09de2596099e2b000000600760005081909090555060016006600050819090905550620001836a10dfde374787bc6e000000600b600050546200021d6401000000000262001af6179091906401000000009004565b600b600050819090905550600160066000505410151515620001a55760006000fd5b620001cb600b600050548383620002466401000000000262002573176401000000009004565b62000214602060405190810160405280600b81526010016f414950303034546f6b656e000000000081526010015030620002a564010000000002620025d2176401000000009004565b5b505062000475565b600081830190508050828110151515620002375760006000fd5b80905062000240565b92915050565b8260086000506000848482528160100152602001908152601001600020905060005081909090555081818460007f7f0c55adb7f69e3decf3ca20f9a2367b205d728e6905eea6c4fb6f3934f842cc60405160405180910390a35b505050565b60006000846040518082805190601001908083835b601083101515620002e257805182525b601082019150601081019050601083039250620002ba565b6001836010036101000a03801982511681845116808217855250505050505090500191505060405180910390209150915060006000508060010154905463a1e6b0663086868a8a6040518763ffffffff166c010000000000000000000000000281526004018087878252816010015260200185859060001916909060001916908252816010015260200183838252816010015260200196505050505050506000604051808303816000888881813b15156200039d5760006000fd5b5af11515620003ac5760006000fd5b505050505b5050505050565b8280546001816001161561010002031660029004906000526010600020905090600f016010900481019282600f10620003fd57805160ff191683800117855562000433565b8280016001018555821562000433579182015b8281111562000432578251826000509090559160100191906001019062000410565b5b50905062000442919062000446565b5090565b62000472919062000452565b808211156200046e576000818150600090555060010162000452565b5090565b90565b61270d80620004856000396000f30060506040523615610172576000356c01000000000000000000000000900463ffffffff16806305d2035b1461017857806306fdde03146101a6578063097c23f81461023657806311d0cbd71461026057806318160ddd1461029c578063313ce567146102c65780633323984d146102f6578063556f0dc7146103435780636de9f32b1461036d5780636f77f29e1461039757806370a082311461046b5780637b781452146104ab5780637ba944d1146105095780637d64bcb4146105b35780638355fa24146105e15780638da5cb5b1461067a578063958ec7d1146106ab578063959b8c3f146106f857806395d89b4114610724578063b239dff0146107b4578063b2d82245146108bc578063be29184f14610909578063d0dc282014610956578063d95b637114610a19578063dd62ed3e14610a6e578063f0a147ad14610abf578063f68deec214610b3b578063f99ef5a514610bf6578063fad8b32a14610c61578063fbb001d614610c8d57610172565b60006000fd5b34156101845760006000fd5b61018c610cda565b604051808215151515815260100191505060405180910390f35b34156101b25760006000fd5b6101ba610ced565b6040518080601001828103825283818151815260100191508051906010019080838360005b838110156101fb5780820151818401525b6010810190506101df565b50505050905090810190600f1680156102285780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b34156102425760006000fd5b61024a610d9f565b6040518082815260100191505060405180910390f35b341561026c5760006000fd5b6102826004808035906010019091905050610dd1565b604051808215151515815260100191505060405180910390f35b34156102a85760006000fd5b6102b0610e2f565b6040518082815260100191505060405180910390f35b34156102d25760006000fd5b6102da610e41565b604051808260ff1660ff16815260100191505060405180910390f35b34156103025760006000fd5b61032960048080806010013590359091602001909192908035906010019091905050610e4f565b604051808215151515815260100191505060405180910390f35b341561034f5760006000fd5b610357610f68565b6040518082815260100191505060405180910390f35b34156103795760006000fd5b610381610f7a565b6040518082815260100191505060405180910390f35b34156103a35760006000fd5b610469600480808060100135903590916020019091929080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050610f83565b005b34156104775760006000fd5b61049560048080806010013590359091602001909192905050610fc2565b6040518082815260100191505060405180910390f35b34156104b75760006000fd5b6104ef600480808060100135903590916020019091929080806010013590359091602001909192908035906010019091905050610ff3565b604051808215151515815260100191505060405180910390f35b34156105155760006000fd5b6105b16004808080601001359035909160200190919290808060100135903590600019169090916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190505061115d565b005b34156105bf5760006000fd5b6105c7611168565b604051808215151515815260100191505060405180910390f35b34156105ed5760006000fd5b610678600480808060100135903590600019169090916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506111de565b005b34156106865760006000fd5b61068e6111e7565b604051808383825281601001526020019250505060405180910390f35b34156106b75760006000fd5b6106de600480808060100135903590916020019091929080359060100190919050506111f6565b604051808215151515815260100191505060405180910390f35b34156107045760006000fd5b61072260048080806010013590359091602001909192905050611285565b005b34156107305760006000fd5b610738611322565b6040518080601001828103825283818151815260100191508051906010019080838360005b838110156107795780820151818401525b60108101905061075d565b50505050905090810190600f1680156107a65780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b34156107c05760006000fd5b6108ba600480808060100135903590916020019091929080359060100190919080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190808060100135903590600019169090916020019091929080806010013590359060001916909091602001909192908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506113d4565b005b34156108c85760006000fd5b6108ef600480808060100135903590916020019091929080359060100190919050506113e2565b604051808215151515815260100191505060405180910390f35b34156109155760006000fd5b61093c60048080806010013590359091602001909192908035906010019091905050611553565b604051808215151515815260100191505060405180910390f35b34156109625760006000fd5b610a1760048080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506116d3565b005b3415610a255760006000fd5b610a5460048080806010013590359091602001909192908080601001359035909160200190919290505061170c565b604051808215151515815260100191505060405180910390f35b3415610a7a5760006000fd5b610aa9600480808060100135903590916020019091929080806010013590359091602001909192905050611777565b6040518082815260100191505060405180910390f35b3415610acb5760006000fd5b610b3960048080806010013590359091602001909192908035906010019091908035906010019082018035906010019191908080600f0160108091040260100160405190810160405280939291908181526010018383808284378201915050505050509090919050506117c6565b005b3415610b475760006000fd5b610bdc6004808035906010019082018035906010019191908080602002601001604051908101604052809392919081815260100183836020028082843782019150505050505090909190803590601001908201803590601001919190808060100260100160405190810160405280939291908181526010018383601002808284378201915050505050509090919050506117f7565b604051808215151515815260100191505060405180910390f35b3415610c025760006000fd5b610c5f6004808035906010019091908035906010019082018035906010019191908080600f016010809104026010016040519081016040528093929190818152601001838380828437820191505050505050909091905050611983565b005b3415610c6d5760006000fd5b610c8b600480808060100135903590916020019091929050506119ae565b005b3415610c995760006000fd5b610cc060048080806010013590359091602001909192908035906010019091905050611a4b565b604051808215151515815260100191505060405180910390f35b600c60009054906101000a900460ff1681565b610cf561255c565b60046000508054600181600116156101000203166002900480600f016010809104026010016040519081016040528092919081815260100182805460018160011615610100020316600290048015610d905780600f10610d6357610100808354040283529160100191610d90565b8201919060005260106000209050905b815481529060010190601001808311610d7357829003600f168201915b50505050509050610d9c565b90565b6000610dc7610db330610fc263ffffffff16565b600760005054611ad490919063ffffffff16565b9050610dce565b90565b600060026000508060010154905433909114919014161515610df35760006000fd5b610e15670de0b6b3a76400008302600760005054611af690919063ffffffff16565b600760005081909090555060019050610e29565b5b919050565b60006007600050549050610e3e565b90565b600060129050610e4c565b90565b6000610ea082600a6000506000338252816010015260200190815260100160002090506000506000878782528160100152602001908152601001600020905060005054611af690919063ffffffff16565b600a600050600033825281601001526020019081526010016000209050600050600086868252816010015260200190815260100160002090506000508190909055508383337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded600a60005060003382528160100152602001908152601001600020905060005060008b8b825281601001526020019081526010016000209050600050546040518082815260100191505060405180910390a360019050610f61565b9392505050565b60006006600050549050610f77565b90565b600b6000505481565b610f9433898961170c63ffffffff16565b1515610fa05760006000fd5b610fb833898989898989896001611b1d63ffffffff16565b5b50505050505050565b6000600860005060008484825281601001526020019081526010016000209050600050549050610fed565b92915050565b6000600a600050600087878252816010015260200190815260100160002090506000506000338252816010015260200190815260100160002090506000505482111515156110415760006000fd5b61109082600a6000506000898982528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060005054611ad490919063ffffffff16565b600a60005060008888825281601001526020019081526010016000209050600050600033825281601001526020019081526010016000209050600050819090905550611110338888888888601060405190810160405280600081526010015060106040519081016040528060008152601001506000611b1d63ffffffff16565b838387877f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a360019050611154565b95945050505050565b5b5050505050505050565b60006002600050806001015490543390911491901416151561118a5760006000fd5b6001600c60006101000a81548160ff0219169083151502179055507fae5184fba832cb2b1f702aca6117b8d265eaf03ad33eb133f19dde0f5920fa0860405160405180910390a1600190506111da565b5b90565b5b505050505050565b60026000508060010154905482565b600081600a600050600033825281601001526020019081526010016000209050600050600086868252816010015260200190815260100160002090506000508190909055508383337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded876040518082815260100191505060405180910390a36001905061127e565b9392505050565b3383839091149190141615151561129c5760006000fd5b600160096000506000848482528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055503383837ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a35b5050565b61132a61255c565b60056000508054600181600116156101000203166002900480600f0160108091040260100160405190810160405280929190818152601001828054600181600116156101000203166002900480156113c55780600f10611398576101008083540402835291601001916113c5565b8201919060005260106000209050905b8154815290600101906010018083116113a857829003600f168201915b505050505090506113d1565b90565b5b5050505050505050505050565b60006000600a6000506000338252816010015260200190815260100160002090506000506000868682528160100152602001908152601001600020905060005054905080831115611476576000600a600050600033825281601001526020019081526010016000209050600050600087878252816010015260200190815260100160002090506000508190909055506114cc565b6114898382611ad490919063ffffffff16565b600a600050600033825281601001526020019081526010016000209050600050600087878252816010015260200190815260100160002090506000508190909055505b8484337f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded600a60005060003382528160100152602001908152601001600020905060005060008c8c825281601001526020019081526010016000209050600050546040518082815260100191505060405180910390a36001915061154b565b509392505050565b6000600260005080600101549054339091149190141615156115755760006000fd5b600c60009054906101000a900460ff161515156115925760006000fd5b670de0b6b3a76400008202915081506007600050546115bf83600b60005054611af690919063ffffffff16565b111515156115cd5760006000fd5b6115e582600b60005054611af690919063ffffffff16565b600b6000508190909055506116248260086000506000878782528160100152602001908152601001600020905060005054611af690919063ffffffff16565b60086000506000868682528160100152602001908152601001600020905060005081909090555083837f56e184a04f4acbb46419fef039f6ceb5f04cb0ae59e0a0f971f128a2274ded9c856040518082815260100191505060405180910390a28383600060007f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a3600190506116ca565b5b5b9392505050565b6116e433878761170c63ffffffff16565b15156116f05760006000fd5b611704338787878787611d9963ffffffff16565b5b5050505050565b600082828686909114919014168061176857506009600050600086868252816010015260200190815260100160002090506000506000848482528160100152602001908152601001600020905060009054906101000a900460ff165b905061176f565b949350505050565b6000600a60005060008686825281601001526020019081526010016000209050600050600084848252816010015260200190815260100160002090506000505490506117be565b949350505050565b6117f033338888888860106040519081016040528060008152601001506001611b1d63ffffffff16565b5b50505050565b600060006002600050806001015490543390911491901416151561181b5760006000fd5b6000845111151561182c5760006000fd5b8251845114151561183d5760006000fd5b600090505b83518110156119725760006000858381518110151561185d57fe5b90601001906020020180601001519051909114919014161515156118815760006000fd5b6000838281518110151561189157fe5b906010019060100201511115156118a85760006000fd5b6118f684828151811015156118b957fe5b90601001906020020180601001519051670de0b6b3a764000086858151811015156118e057fe5b9060100190601002015102611a4b63ffffffff16565b50838181518110151561190557fe5b90601001906020020180601001519051337f57fae1ac296aac0148b76b88b13e6c7b0f828ea10dee26f520382015ef4a5192888781518110151561194557fe5b906010019060100201516040518082815260100191505060405180910390a35b8080600101915050611842565b6001915061197b565b5b5092915050565b6119a9333386866010604051908101604052806000815260100150611d9963ffffffff16565b5b5050565b338383909114919014161515156119c55760006000fd5b600060096000506000848482528160100152602001908152601001600020905060005060003382528160100152602001908152601001600020905060006101000a81548160ff0219169083151502179055503383837f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a35b5050565b6000611a8a3333888888601060405190810160405280600081526010015060106040519081016040528060008152601001506000611b1d63ffffffff16565b8383337f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d0959876040518082815260100191505060405180910390a360019050611acd565b9392505050565b6000828211151515611ae65760006000fd5b8183039050611af0565b92915050565b600081830190508050828110151515611b0f5760006000fd5b809050611b17565b92915050565b611b2c84611f7f63ffffffff16565b611b438a8a8a8a8a8a8a8a8a611fc063ffffffff16565b60006000878790911491901416151515611b5d5760006000fd5b30878790911491901416151515611b745760006000fd5b83600860005060008a8a8252816010015260200190815260100160002090506000505410151515611ba55760006000fd5b611bd984600860005060008b8b82528160100152602001908152601001600020905060005054611ad490919063ffffffff16565b600860005060008a8a825281601001526020019081526010016000209050600050819090905550611c348460086000506000898982528160100152602001908152601001600020905060005054611af690919063ffffffff16565b600860005060008888825281601001526020019081526010016000209050600050819090905550611c738a8a8a8a8a8a8a8a8a8a6121a763ffffffff16565b858589898d8d7f6565b4df665bcfc14a1b6f57e1795dca4db5db09ae197ee12abddf26cd59a9b08b8b8b604051808481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611ce85780820151818401525b601081019050611ccc565b50505050905090810190600f168015611d155780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611d4f5780820151818401525b601081019050611d33565b50505050905090810190600f168015611d7c5780820380516001836010036101000a031916815260100191505b509550505050505060405180910390a45b50505050505050505050565b611da883611f7f63ffffffff16565b82611db98686610fc263ffffffff16565b10151515611dc75760006000fd5b611dfb8360086000506000888882528160100152602001908152601001600020905060005054611ad490919063ffffffff16565b600860005060008787825281601001526020019081526010016000209050600050819090905550611e3a83600760005054611ad490919063ffffffff16565b6007600050819090905550611e5e8787878760006000898989611fc063ffffffff16565b848488887f01055277133200c3a8bacd68b8d67d1c54154ac94c975287d02eeb1d5f696b12888888604051808481526010018060100180601001838103835285818151815260100191508051906010019080838360005b83811015611ed15780820151818401525b601081019050611eb5565b50505050905090810190600f168015611efe5780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b83811015611f385780820151818401525b601081019050611f1c565b50505050905090810190600f168015611f655780820380516001836010036101000a031916815260100191505b509550505050505060405180910390a35b50505050505050565b80611faf600660005054611fa1600660005054856123b490919063ffffffff16565b6123df90919063ffffffff16565b141515611fbc5760006000fd5b5b50565b600060006120148989603060405190810160405280601181526010016f414950303034546f6b656e53656e646581526010016f7200000000000000000000000000000081526010015061242263ffffffff16565b91509150600060008383909114919014161561202f5761219a565b8181634e1524c18d8d8d8d8d8d8d8d8d6040518a63ffffffff166c01000000000000000000000000028152600401808a8a825281601001526020018888825281601001526020018686825281601001526020018481526010018060100180601001838103835285818151815260100191508051906010019080838360005b838110156120c95780820151818401525b6010810190506120ad565b50505050905090810190600f1680156120f65780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b838110156121305780820151818401525b601081019050612114565b50505050905090810190600f16801561215d5780820380516001836010036101000a031916815260100191505b509b5050505050505050505050506000604051808303816000888881813b15156121875760006000fd5b5af115156121955760006000fd5b505050505b5050505050505050505050565b600060006121fb8888603060405190810160405280601481526010016f414950303034546f6b656e526563697081526010016f69656e7400000000000000000000000081526010015061242263ffffffff16565b9150915060006000838390911491901416151561238157818163417bf7af8e8e8e8e8e8e8e8e8e6040518a63ffffffff166c01000000000000000000000000028152600401808a8a825281601001526020018888825281601001526020018686825281601001526020018481526010018060100180601001838103835285818151815260100191508051906010019080838360005b838110156122ac5780820151818401525b601081019050612290565b50505050905090810190600f1680156122d95780820380516001836010036101000a031916815260100191505b50838103825284818151815260100191508051906010019080838360005b838110156123135780820151818401525b6010810190506122f7565b50505050905090810190600f1680156123405780820380516001836010036101000a031916815260100191505b509b5050505050505050505050506000604051808303816000888881813b151561236a5760006000fd5b5af115156123785760006000fd5b505050506123a5565b82156123a457612397888861254b63ffffffff16565b15156123a35760006000fd5b5b5b5b505050505050505050505050565b60006000821115156123c65760006000fd5b81838115156123d157fe5b0490506123d9565b92915050565b600060008314156123f3576000905061241c565b8183029050805081838281151561240657fe5b041415156124145760006000fd5b80905061241c565b92915050565b6000600060006000846040518082805190601001908083835b60108310151561246157805182525b60108201915060108101905060108303925061243b565b6001836010036101000a03801982511681845116808217855250505050505090500191505060405180910390209150915060006000508060010154905463ff42bfd6898986866000604051602001526040518563ffffffff166c01000000000000000000000000028152600401808585825281601001526020018383906000191690906000191690825281601001526020019450505050506020604051808303816000888881813b15156125155760006000fd5b5af115156125235760006000fd5b50505050604051808060100151905190916020015093509350612541565b5050935093915050565b600060019050612556565b92915050565b601060405190810160405280600081526010015090565b8260086000506000848482528160100152602001908152601001600020905060005081909090555081818460007f7f0c55adb7f69e3decf3ca20f9a2367b205d728e6905eea6c4fb6f3934f842cc60405160405180910390a35b505050565b60006000846040518082805190601001908083835b60108310151561260d57805182525b6010820191506010810190506010830392506125e7565b6001836010036101000a03801982511681845116808217855250505050505090500191505060405180910390209150915060006000508060010154905463a1e6b0663086868a8a6040518763ffffffff166c010000000000000000000000000281526004018087878252816010015260200185859060001916909060001916908252816010015260200183838252816010015260200196505050505050506000604051808303816000888881813b15156126c75760006000fd5b5af115156126d55760006000fd5b505050505b50505050505600a165627a7a7230582010e55ed479c7271d66651ea5c5f57d7437032caf45bedc8a05c6911cca9158090029a000356e7deb04eb8ccfd2bcc756c6159762edc0512760387e2ab5413587443e870589efe3cdaae8834c4b408800000002540be40001b860ff7cea7af4d57d3c1b82f74b74ac4b6b16caf26457098fd4ded4ec3e3baa163fa71e4522b536ea063d9bb48d05b0aed2ab38c5e80c5985728bb681b8c249700c65974a56bed1c048e0312b1a719f8cb0a8da7b08fb06d4f26d58668920ba950d"));
    BigInteger expectedTotalDifficultyAfterImport = new BigInteger("37934979095624");
    AionAddress contract_cab26 = AddressUtils.wrapAddress("a0d270e7759e8fc020df5f1352bf4d329342c1bcdfe9297ef594fa352c7cab26");
    // setup blockchain with state before imported block
    StandaloneBlockchain blockchain = new Builder().withState(grandparentBlock, totalDifficultyForGrandparent, parentBlock, totalDifficultyForParent, worldStateAfterParentImport).withDetails(contract_cab26, Hex.decode("f9066ea0a0d270e7759e8fc020df5f1352bf4d329342c1bcdfe9297ef594fa352c7cab2601a055a7bfc64c75d229d85868ecf47e903f46327d582eb883fb6b2db2fe746de3bc80f90627b9062460506040526000356c01000000000000000000000000900463ffffffff1680633d5840631461005f5780635df8122f146100a657806365ba36c1146100e3578063a1e6b0661461016c578063ff42bfd6146101c057610059565b60006000fd5b341561006b5760006000fd5b6100896004808080601001359035909160200190919290505061021e565b604051808383825281601001526020019250505060405180910390f35b34156100b25760006000fd5b6100e16004808080601001359035909160200190919290808060100135903590916020019091929050506102a2565b005b34156100ef5760006000fd5b6101436004808035906010019082018035906010019191908080600f01601080910402601001604051908101604052809392919081815260100183838082843782019150505050505090909190505061034d565b604051808383906000191690906000191690825281601001526020019250505060405180910390f35b34156101785760006000fd5b6101be60048080806010013590359091602001909192908080601001359035906000191690909160200190919290808060100135903590916020019091929050506103c3565b005b34156101cc5760006000fd5b610201600480808060100135903590916020019091929080806010013590359060001916909091602001909192905050610592565b604051808383825281601001526020019250505060405180910390f35b60006000600060006001600050600087878252816010015260200190815260100160002090506000508060010154905490911491901416156102695783839150915061029b5661029a565b600160005060008585825281601001526020019081526010016000209050600050806001015490549150915061029b565b5b9250929050565b8383336102b5848461021e63ffffffff16565b9091149190141615156102c85760006000fd5b85858585909114919014166102de5783836102e3565b600060005b600160005060008989825281601001526020019081526010016000209050600050828290918060010183905555505050838387877f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a435060405160405180910390a35b5b505050505050565b60006000826040518082805190601001908083835b60108310151561038857805182525b601082019150601081019050601083039250610362565b6001836010036101000a0380198251168184511680821785525050505050509050019150506040518091039020915091506103be565b915091565b8585336103d6848461021e63ffffffff16565b9091149190141615156103e95760006000fd5b6000600085859091149190141615801561040a575033858590911491901416155b156104f45760405180806f4149525f4143434550545f4d4147494381526010015060100190506040518091039020906000191690858563cf0c64b28c8c8c8c6000604051602001526040518563ffffffff166c01000000000000000000000000028152600401808585825281601001526020018383906000191690906000191690825281601001526020019450505050506020604051808303816000888881813b15156104b75760006000fd5b5af115156104c55760006000fd5b5050505060405180806010015190519091602001509060001916909091149190141615156104f35760006000fd5b5b8383600060005060008b8b82528160100152602001908152601001600020905060005060008989906000191690906000191690825281601001526020019081526010016000209050600050828290918060010183905555505050838387879060001916908b8b7f9096ccaf3bc136981b8a043d4e5ef1396a340697147a05ff0597f635003acc0060405160405180910390a45b5b5050505050505050565b600060006000600050600087878252816010015260200190815260100160002090506000506000858590600019169090600019169082528160100152602001908152601001600020905060005080600101549054915091506105ef565b945094925050505600a165627a7a723058208af95ce52c89ecffb3f67449a149ba9fbea69fe903e07d6c514ced5b647aa6e40029")).withStorage(contract_cab26, Hex.decode("f93be5f876a00ddbafc0e0dff8f22a92e7903b867321a60f798c4639cbef611cf0552ca5a823b853f8518080a0b4e19cdd265a84c641fcaa76a0df3b55978bb4e0bb67ecc76d6931e6a16a88628080a06455b04f6d09f136dd027a31d55c5b067625fa66d50d9f9dc17f27c63b46ed4a8080808080808080808080f856a056ac4d64284d26e2d19d4fb99066e966d4fc401f33b18c1b0d72e439b25f5074b4f3a020b1ba3c94d5fabffff795bef10799adca52b893507b4b4367d6724e9b9ada3b9190a06ec711ee13d913bab46cfd615914ccf856a01f2b0e22a8bc542a934a4e459b8e91725687ed5da13748ad94aeb17524411602b4f3a020bb51e3896f5f735473094765f1f8b64548c9ab9327804b487d837bfb32c3cf9190723c5c86298a4b99d436b0de6959de93f876a0955f0457ab439b9f4b15dda9497eaf9ecd6963dbf74da2c51ecd821955ae9c36b853f85180a045cee60ae09659bf5f2eaccedf67490ace96654ef0505fdcd27ef867d0b2f68780a087847a340d57eeae7fbfc972b7a1ed7880191cb88b9e76c9c7c0cc472e26732180808080808080808080808080f856a0fac7cbbb14065869b5224580430971a0216e98a78ef2db9f9baa7af62123f5f6b4f3a0200e08b9fab50def1c8ae0ad44dd6bb2e992b3a7dbed7818daf82440eca808a79190a0fd1887216c9620a64a6e41fa4c345ff856a0600dd1fb01dd454ee579f34adf14158573e9830a7a79faf4d7477a5b7e15d1cbb4f3a020dc68d1fa04172661606a74d732819bb4d8af249a7c6c5d91eb5d17cce6da709190a07406a455df4ca89c7157ce24201690f876a02c8933c959c8670ba40616e739a92e6a211be8d8525929fa9b1f40d03323efcbb853f851808080808080808080a0685c7c2d67d4135c7c31b6ef59f25e693db934ea9968b0c7a1e835fc8ae71f988080808080a0d52ddb4ce2b7dd123ea5788a701bc30089cc51942f64ace7b000cd7c89d8a95580f856a00bce8dfeacbce07a70b90ce5627048422e3bfa665944a1bcd11d8456ca5aac11b4f3a0200e9944f3bfff038388fadb35f0009874823db1fa7ed5fffe6b44ace05bc89f9190a0e8dddbb3f2b316c091707848fa374df856a0ad120a4993a5e5ddadc96299eb3cecd605dbaebf50946df6219d685952c4f470b4f3a020e248d2ae1eefa6f91e6b60926386cdec846024b9c3decbf704b26de67d8938919066ffd2c92d3b521444069cc15043bdd7f856a094aa3b5c3dcdf6e7baf220b040370ae5522f52f87bc38ced3ed95b7e6ac0c0bcb4f3a02018a65f4ebe3f9022e7ca55d51aca34441586ba206e29f3544b43f70089f0c79190fc496abed83b2db7f9f5a574605880e3f8d6a0d1618349e6813f5cfc0ae3b99ad6873d060a114b17346662f891ac210ac837b9b8b3f8b1808080a007ccad3194eaafeb7460acf796fc03d3f47fe4ed7855353702fcfc01da0bf8798080a0dfc0b6993fb99afc1fea1f2353fa6639f79faa2fd26adcf5758936c1c98a451380a0d9e5ea4d5e838fe45f2f0885a9e68244694bb817ebeb923fed8baf8802c4e6d4a0f86f339d1058feebf6a3402d0ce64e02c325f727dd8c9cbf280ea192970b756f80808080a0542f5709895e3c35d1c02c0a8df15b0d46089fbaee4feeb421dd2ce499e3277a8080f876a013885e2135b874cc911fc7d2e634ea5a4609909c77052d7866f632cf30860f90b853f8518080808080a009334c0a25eecf4c9e6407db49c7ad8f72e12552a8e29916850d2c41d62203208080808080808080a0b9cc52b39eaf087d273375174d57ebe5ff72641261492a2c5fe32dad88ab96688080f856a0cc833978e1e833773b84d44e6006e269daf282e398623700b10ff7473be4e8c8b4f3a02097ad7c7175976d0a000bb4a5fcc8188a5f863aeee161317d37d19591f460f59190a0a4ac19dcf51daefa0a947684c72fc5f856a01c7ff598db30daec33600d09269afe7ada647ece3612b702ac5679876061d651b4f3a020c1dced084213c05967ede93e35cf3596b6be5ccb3586fb0552d22a836cd1129190a03410cf24ef75ff527e74e050870b0df855a01348d7ae5fc621432eb0425b0aa7d937061739521d86a841738c8052cb5ecaf4b3f29f3856e897bf71ef4803a78b94b499d27991a5bc479be8a074498ec8c2c835279190a0c4b8687c3305930ebbb6e4739dd4b2f856a07e455536af2128bccc47b352d1a400a7d75e0d1c545cf3258453cb25a4d24794b4f3a020fb25d0e55776100e595a7f879bb8d56aab714d63ee6bd7b93c99e858361b0891908916256fd5b13bc6ee8db13140505e51f855a03601b9d51bf36810e943a1a5cf5fe72e688dae218132306130138b5d42408cfbb3f29f319fe1a7ef2face250842978e4ae1b8789549fa03f518b68d874c399bc3f4591900f094353e6859ed3c3ba95488ddbdb0cf8d6a027314e383f05c19820211f382ab314a1bce529f43a65e1c30c97dded2ab5b489b8b3f8b1a01760bdebf089437225e92799947534f492e7cc4299de7f8182e7eedbca01a49380a066616365197170703d9e6e51f23ce102acdb965634c07e460858966e98879601a07cda752225944feaa452349dabb8d078c44feda7302b9cc376de68fd2e2fa2f9a09042d896f8fcc1590e04c0fb3276d44b86c10e269518de14dac8876a90476bbf80808080808080a00f266e34698dd7c4c44fecae103196ecfad5a6b8b79ff345350c584230dd071280808080f856a0a00d207dccba60799f6fffdbd7ea253543b1afb6f3846e7bfb5af2d01cd56d2bb4f3a0207b9c96cd2abb41891642dd40f3128462990a0cf81a24d90f5a532bda670f5b91909fbddf134523c5efa403914f7c4adcf1f856a0d8310fccc8b094655e94574a74d633e0dac1f65b289b786b145852ecb1fb8729b4f3a02099c1dce788770d78f265b53fe0858691159e741cc1ea35aaa6c60c8c8a1a0291902759c01b70dd3ca22cb610c48acd1a0ef855a09b361790f433c5d6133b1b8997ee3c49ae8cc0e53dd754d3143e40847525414cb3f29f3c079e8d0f6144c4b7d3fe03a79d7b46dff37d735ff6f304107b2acabb8aa29190f0b5c3ad891553ca6d8d4f6fe1946a82f856a00978efd7012105813bd133585ee7304725cc07f634404d57af9b22bed33e14abb4f3a0200b0c3cd38c23984d65c40f90d3ea592a9c5f39fbc7bd05ca24b54b987bcf1f9190a03d2f7fc9f53b8513691b3d5309c704f856a0795c6b220a9ad547c58c5c7f03fa6e1f6e1fa401ad11eac5edbba04ec15b03dab4f3a020c5ef3f9174eda80f0fae1c9a0e61f4c35dca1add27305bb799ce51543c2f309190a0725a463c7dd5eed6b27cdbbedd0112f876a003645975db51b49767714792dc7eb8c0e63d4210ed3b734e0cd0bb80ecfc232db853f85180808080a05bed3de7860170692f1bf4d25991625a3c3e9128b20ca1c16d106a9eb53de25e8080a09fdef45a3102f268a7cdfbc2e5afe2e77a629c3bd30c062af02f9c908fa2ea4f808080808080808080f856a0c6f07d74b36b9b59b2d1d92016aed4fe72b45f5db36473b9ef8c9b8f2bb9eb82b4f3a020bcbb6e3622b85b66b6e65d1440fc8b918b05cfdd8b1b21c9e6c34d49b569929190a05bf4d1c9482130810617277169fa3cf856a0db285553fa88ad42ab1cff6821bbb8972371f6f13cb18e0c9198ead5330dee10b4f3a0202cc07a47058b77aad1518393326f43882b2cb5357b522ba3c0d824fb41331b9190a01fedb4e549efd13f406c152f8250caf856a0fce72e67195d52ebebd190967c18f893759c7061811d1d5f6bcb96223a193b20b4f3a020d698c06198eeae263f6529042ef845acca916a4d3774f20619746293afc8869190a3ea6fa432cf8a57ef404ac5ee8deb32f856a0cceeaf6d578506fab791725a471cb242c68c7b550f9902ef7159f94230144185b4f3a02050f85c51a4cd3c5d0bddaf580cdb6221ea15afb8ad9d6ceb061d8ebafddf169190a037d06f632254d77be16bb3c5f428c3f855a02eb8c9da8a15c67f2404dc0f0e0a0977069586596055375159510ae62710b824b3f29f3945ce35a3eb27996b5c9186a93e3deb0ae27c2bf0a599086ce18380756efa91905b581aeca5e78781efcef4c957a7a14af855a00af169f694a0204c2bbbd4cbb7a7c0c0030c1bbb89585f038bbeba2fc760ab98b3f29f3ca938465fa95c5fdddc58dd3ea55a7ee6d45e4904fb604bcafac894bfd0139190a00da8071a3aeea71737c92f909535b0f856a08e67b7d19bdc0a0947b8a6d0c50a1fdd297b40e08d3c21295d809b0217b42f1bb4f3a0200c06d0de54bebe8a4b99e8440ced39e1ab391fe72bda818d35325e55e73e589190a000912b440f6a5daf60f37b06b4b85af856a0fc87d057d569c9554255a0667ea790ac17cbabf93357ce46cc1f7d866d8cde6cb4f3a0207453907317d2cae3729228861bb611d9de4c023065986284742309dc7e216a9190862a10a5b24a5b5c533d14489b92a54bf855a0f3e0c5b650e2da5def7ac14737330cf78010ed6680a362bde36876cd21fc2863b3f29f20f6d14146d06acabad0bf828bb99ec288c7b98275e506de9958aac9a20e839190a0cd91d0bd7937032c0b20b73decbdd6f8d6a0ccc84d4fb717b937a137bc6794222effb7df967a90077df8bb845abe01eb4705b8b3f8b1a08d8a0281a5d75e401eabf298aa1f5d963377b6131abc59889a367ecef651ce39808080a0ea57938d6f6adecb3fe7da79e1d92bc7d0044854cc369cce111a8b3abcac85bd8080a061a32707b1ec79647c453bd8450533a7da1205d9d0767ecdc5e16d91c6b02fc1a0466a117cd13c96b18818d49859d920201e3917676bcfe88b91e5776a01e79fbb8080808080a0a3371060ecbb55130ca271e208df30204b6397d8e2243aa867aeca33c9e0955a8080f856a0db1ce4e424839fc809bab015def4cc4ebbc7d5e39db93329eeb223425165ccf5b4f3a020e03206ae4972889c137db05f252d811b0bb3ba175f5ba9d2cfac438f1d73da91902ba158587e9bbb709172ef72d8156e0ef8f6a0be11ec205ac98f4a8e06ecbfb6acba323ea00416761e67a04ac21db5edaf9e09b8d3f8d180a0189716521e01ed528796ed4254db20d40e8a2210d8c9e5fb4847a5939ae67d528080a000cf4547bbaf5d1702c1ad0c83706397f148d6e91837ecbfbf211a5d0ed96658a007976471676eb57090fc1bd6f7e5b6acf79592a53f1b2631d4326e66dc6b41e880a07aadb6fc6a101f0278b15319a3e5de0903b051c2ba87a1dc604217315e55ec9780a0c66c6da4a0a9089fe766b11638a898d94e3f2211d01627193e1f104b3f09d3c98080808080a0c2189ebe765aace70627396b64ef0a50a65a03835dbf21400b9d479bd13e408180f855a019f5d07cbc29e6d520561bc52bc3317494a51e2110765e33123ac7e420803bd8b3f29f38d27b068f98b6821d87d414c4b8b8812e48529fc7f2faa886cbea2f1293d89190912df815452ed5a4b8e601c998c5c5dff855a0bbeb99a001e7532012244c5eed05ca277f8677358d5b9df9c21c791935fde666b3f29f3e4b4322748a30d01b3d6998e39e0f99ca5d7e0515ee16dd08927d168d365e919041872f648b51a5ab49a534a0d440f62cf855a06cb49fe7a2e524e2c8c756a42bb380c7e957683477b3e23e45f9e9e87060b49bb3f29f209aaf35dd47af6276675480c471c0705103193b5846bdbd9b34ec2d1f24539190a07721ac7826c585b675bed7394d8028f855a060bd5385a838c68869f49a7aa71d85a8a2cba6b83bd6cd64256efbd2c1c14649b3f29f202825e7ade676cf281d007e594d37954f5afbe2d777d0b9297f35c1836d069190a0ef004560df78f883969dd3626df926f855a0758a094be7201f66baf4903b597a9a8944b0e6e6f0c54c73ea2f3e786eee3646b3f29f3318c04c6d8b9a19d400898199c6072a33dbbff718921e9f51188131b3b7fa9190a010259b8e42c408e6b3d8ff5b6fec57f856a0dd0ebc1e02ce5c39c9793d46bc5dca663ef5276ecf68805d6ce51eb405f7ffc1b4f3a020074a110e2c62f9727e781dbd2ed8376079ebbae9e38d416eb408e7bd5c32869190c5c6f99930f2db94f6afab2d03c387ccf876a03030d5e273742ea2ddb9f1ed780b732dda81dd0659c237d92ac9c870dc8ef404b853f85180808080808080a07162ea81221128d80e0270702b3b4427905eba381e1e1e8a0e3ee26c94699d45808080a091c3563caf8f76d7c44c6b8a291bb148f8c97f2ccf225b62ce6c5b780c54ea278080808080f856a026598322ae014331078ac5c25aef16cec574d858a535de77360f46383025e8c5b4f3a020a478ee1343878f1f6070fd398320f52da2265e8729273b1194ebeac245a1119190720986f93e79524284e3eb69ef459bd8f856a04282f2b6140da10f3cee34d32b98fe8ecad74bb98514ba7275f4ab7efb6034b8b4f3a020b6ab82af7f2a820e23f7771a5bc6c147454ab12cf57444e3afd39ee9eb19139190a0e4cc383be0044f367468b9c5ed02b2f90138a004853709c41624bdfb4c20360d5447aa9e2b5c6da6982f3e872a11791c4cecacb90114f90111a0049632527461eb7a74750258a02a53aafc76fe29ecf6d4372c3d6f733124c14aa0391bb90e7958bccea70c2cc8da6f7e4bf19717eab7fc9cbe8ffb305eefa2a30c8080a0ea916513a029af1f8f2275d17a442d83591e445f529c4a8c3e4069dab35de706808080a0396cb8dd55590620a8ddf80a083cf782c176fd22912c3b6c59e7fc742c83468680a0a0a06218bed9c7ccc69f1fe8adbd5a573cf6096734ccc50e9a7930ad821865cc8080a0a9a02598f858b93d880c08b3d85e1c1f0dd2186ab2d073e4be9da8aca9a2160aa034d83628b645191c694f11a60a4aad830e6f81d8b7196520ced8146426095f07a0aff40ed122791aaee2c940e733552989bb4f817b2ed7b7d84ad696e875d6d7b980f90238a0514f5c0c8944e5976cae88a7863f4e9192dc2186c063d1028f3c6eea8eea48bfb90214f90211a023d9adf2fa34f62694d7ff7358f2ca0f680b752ad4beb33ae88601f9d0321f8aa086f80955897e82ebd6664a386f204722029e7b6ff5b43def9182282e623b249ca0d589608323b008e248fc03f2e8975993d2e44d95f9ef349b1c807035f04f9cbaa082ddafc1df998e4d8b3292699c6e911dc6024249e44d2a4fd48f544c8ca89a45a01dd762f9bdb281cfaea5fd1c1f51c54901f5a3520487517f39e1f3b533b1fc43a00499c4395dfc97cd2230b0ce12727dbd0c7c715dc45be67317060dc9e7ae5734a0cf5572eb5fb9e19b16093752c60323c1377b31c633e0c983fff216cad4fd5787a09d95fd0fee7d134078544b9c3b7754f55ddd92c274d26e75ae39dacc404e6804a0006dd4c3012713034fbac07d7f1599044ac500b348437dc7633bcd6de6cb47afa0baf90fea9ff8b8f43af00cf4c4ed649cea4e58c898c53559aed3c1a11728350aa0c9c40fad920775e50fc93330819dd2874a61100ecdc1c128d24897977c482d0aa0f5712389f9148a985ceeb39279cce705eefda516376d464fb48a07feeb1b9c07a029b622addb444e4b3a4d46bc262183870ae050584a77962912c8dbfa074383b8a0c820ae8572268e8915c15c2ce663f0516331caa47edc2f015f9586aafb6cec06a01cc43d708f6cb301d65b90e6bc827280624dffa8dfefd36914ecac36b227d0e4a04ef040783eb298ceed76abe55dd480d4dbf8068ce012e2eaddcce6ffb8d9035780f856a0a44881d27be8f0727269ffa3dffc84f9e81855b9da1797f77e68ecb9789fcecfb4f3a0209eac2d44fd38e83247bde6107d52d413757b56e1ee828bb5e4856cbd7d837c919074da540ade4dc522afd5eaa85768d23cf856a05c4e13acda5e0f876687f2968a2c204aaf13eb0f3643c30e20ef7547d1933636b4f3a020fffc970b03556eb993d3a73d137edacb47c53c6ab7a3ba096bc0335fcb4cae919058d7c42d5d64feb122ea4dd0ccdfde86f855a06cc468a8dee37e84433cce4592cec44eeab92ac6ac16b771305a30b0b0cf5cf8b3f29f36de13920a777b43d41f874472b69fb8bddc7a46ec11c746cd747c3db77d8a91903e3be1a0057af3dd7388d6d672640c21f855a0bbd415b25ca9fd96ea4194e019bb42398dd80a95cf49a8c8e2ceb9c7234e13b4b3f29f3edcd793d6f636dc1162ebdc53273d911053562076d7bd3945ecbd3e9c82af9190244aa1de7e38b135c70b51b95b1e1023f856a0654bc4cd74dd4edac8b3db933744ed090efc59073ead2c3421f0b1853c3784c2b4f3a02013bbae4ceb6ed0bcfaf9cbef6fb02586babb23f8932787d8c975914da196c19190d0dab1ba79d63a35322601dd3e08decdf856a0182cdeba4a5d84bf62ad70adcec3ac2eb6a3a37631348190f0fd702248a07be7b4f3a03272747956ae87ff7a2a4b58a3f98859907a511fc3c9e4cab430fd8dfbd504ad9190a0909e96e631750a5cf5995b65783a97f855a0412605c025a76e01ebd84c85ad2697a41a7839901e8b0d25366f24732a355d84b3f29f3f3d85ecc359bfe08726ae3d9b2e22e00e4fb874b1f5067f87bd5b057b439f9190e242316b567a64f5da28cda4293809fbf855a06da23c373fdf4c496895dcae617c7dff19085e33f09e357842d7588024fc48d2b3f29f388e3eabc485e180f9c1af38835f5b29ec5efebdfab7d24311bbf69d2a971e9190a0ccb37891fbdff7cfafa67e7f399d97f856a03c5c54a27633de03c524bdc3f4e01968ac323c928a815790a4a6d6b47cef956fb4f3a020c5e616d43b2354cb5a91209c6a7305e4360d069e107336dbf435d9c7b387fe9190a08024faefbf2a5035ae74b95102b4fdf855a0e114df924af4eccdf78618f1c359129e413f1c90c36f72265d7ec57ad744bf93b3f29f37a5bed6b0adf940ef2b39dabc3056bf711edd63fb8832eaf2f4ba13b00f449190a07bd83ff79f6a511f019c8324c998f4f855a06078e36cd63de575dd25cb2cf233827a851a8ac91b7c10e1e06a8c6f18611d47b3f29f38e7709d461d463ac4823e376c52d7d0e086f61f9fdea32473a9ce6336666c9190cd3c108a2a51a7e911b14f72dc4613a8f855a08a17f861d2941b9537bd9a87fbd76fe2f30326163e4ae42f693825ba2e0aa2d5b3f29f332c8f4f4fdf84b68e1d95d020ef84ccd8858431b0bea92ab48dab6924d4829190a0908d0110c82854ce0750473b82a21af856a0a5d585f033519cdaaa0a2cb095be0b75229e455abb5ba854a8af021b0c90aabbb4f3a020a1dcfc5195002aa8f368287abf5f8bc81aede815d301f207a7b37e948a6c179190c198779b6d22926fd46fcceb567d8198f876a03a269a3c32db88054eeb3acf03aa5ab89a8c9bf93cac53e050acd7eb1b4de10bb853f85180808080a0bf3cf6789998ca285eb774ab6bfa9c975936564b2192fa3106df65d3d9c9b8b7808080808080808080a032c1caab6c4ff4c01301ac8aa40806d617379214d293fc0e888e190c50ed90f68080f856a09299de2d468d5d7928212d5d67ea356ac9dd0bcd055a1df14138b748e0cd2fc0b4f3a0200b6cee850a00880fc62ac6279d892cba4f489643ef3daa9d913266e07ff47e9190a0ef815c27b4e00bcfaef644a87cebf6f855a0952bb5f66abe416970ba8bc15b5a6fe62c2723f221f9099b2a7d876cf6d34124b3f29f3c950d4d1d0c715c575369acda455956af50c2ba36c3dbc376e5e00e8a392f9190a0e789c18a5761ad66b2538bce24e76af876a02fcd0083007ccd84370833ba4041876ca47ae2e7df3081b568f8ee7274f99276b853f851808080a017a034649af716fd9a46a21078e60799d2f9658cf35dfab8979d5c4631d961f78080808080808080808080a00e198a3c519117f29f4d3480c5e61e6ed7e2476567830dfa6faf663b3de7009b80f876a0ab1ced1be7482d10563fa0ac4114f7276fa1dda5c00ce521aec74afc8f517cbab853f85180808080808080a0e8ab6855e330ba6b52b3495ab2d6acdeae27daf2a61a2c56e76e1d75bc4d4d3ca0b76272d1fc4b6df3c24c95460bd0de85e7152aebb1ebf2c24152ecc0e32fb8b88080808080808080f855a0bd24b1795b9e3fc393c5955c3f16354b2b9c38cc8f9278d5bbf2f1b9722c3d6bb3f29f3cb3e36acfbb067096c27bf680e6258e991ad64da171ada6a35ca46a2a7d279190f2a4b18eacd82be83c1a1fed262b37e0f856a04b5006baf9dc32821f41ffba921e16506aed63e6aff2bc1b1b376b1f564d61c3b4f3a02017e1c952cd59537681f4be6139e0302ca29e4fa74ecf64e8081011c97503539190a00c172d5d18a9329dae0d4489339c87f856a0ad48c6523d698e833cfae8f8aa1fc2b1d93c44b45c0b211d5a8c74b85325bd09b4f3a0200fd7bbe5bf5ed33f8b2dd4a8557523597eb1deb86fa5ea1a07cfc14c80660e9190a30ab1b435c557c082b485c1f409805ef876a0cd6df92cbd16bb23cd5e370388d1b79c4cb211a44f87691ac802d689d7f6f40bb853f8518080a01d1d33b67918d16b94a0fb8e5982efda404b42fffead0ccaf62b1bf0da0790db8080a0694adffdfaee7bf7dc633ce5133da351cde602ed1e456781a6c68494de7be3d18080808080808080808080f90116a08210ea9f4c4fb5556290aa731d61998cd67027b11b6f6f167593f43a98bc8f9fb8f3f8f1a0dcd9ec060d81a3dbea62b7010697ed4e0e2faa85c6402a92f0498ef84b7c2c2aa09a3ef7761d0b903c96d73d4bab5d27e1e9d5a08784c6f1fcddfa608760928d2980a0a13d663af660ab641efcccfbe7ffd5dbf67019845580faad4cbede0ff61701b880a00d900c1dc410323f8f27d3132ca6eee9f1225b28da9b1fae4b8afeaa29b9bfa8a058a6f0661f6f3839d27112ddf86dfee47bfdb7d1d89891f7c4fea9532b149d35808080a0c9851ae678278c9d79a8d748fa906932985c4d7aa15c3be32c130a9d2d715f0880808080a0f931247472c96d26aba2aace12a9e03edb01543746add907189d35fbc668f82580f856a0eebf7047aa5be9758b113a329398f56904ea148a22edce37f50b572e462b2ebeb4f3a0209a90ca74e49312ed4cdab0dbc74c0ce085461d511b0ec25ddf242f75bfabdd9190b95603ca47322a5ccb7bf08583c88b11f856a0165b4628ba2b55c359c01e096b1a23bcd1c3f38eafe4f23580df05d151cd66cab4f3a020bdb88fb9320df4ae6f27df2a1c58edeaecfc83654d083202de73a8edc1fd7a9190a0c046bd23c852f58e741f3ce6d975cef855a022fc46ee85dca27133ab94b9dab7aeba106220f90217ffca1dafdd83072af61ab3f29f31f22ff575793aeea2b96e37597648de75e90cda64cc4b68882736f9fc6d1f919061f325b78e91cf5dd679f69a9ac6e2fcf856a0e03c879e23f9c5f07c750f984e5b442018226fa76864b07726688dbffc158dcdb4f3a020df72ebc7815d6f739ab9d74676a5a481310649986bb9bee1f8c3f15116807f9190a0dfa4052752626266c681eb9104436df856a003244efb51db9855c0964cbce4bddd7d2091b833968e67cee6ed2015208c537ab4f3a0205e25317fb1ccb6101951194e973fa61eb0a5ec0d0352fd69bd953a9875b8ad9190fccb639e86aafd938118d1ceb8973781f856a086b92955a5dcf11d1d41f1c7484bd98b51323eb3014ee430e1a9ff091c316b76b4f3a020763afb94a20e9411e8574d134b12e51d2ea4f2fd7ef087c202b1b7271df1f89190a0e62b6a13b71e4afbf5008faebaef01f855a05b5e5b4f004c4a48f9282e213bdf81639763ad211c0a934201c0d5b4d4b454f3b3f29f208f6a170b663ecd4d94734504263968feda83af7685541cf569047924e0389190f2a48dd6953c1ecd0ec19b1e322bdacff856a035ddfefe6a302b96361e7bd9cf4146b8d3f588d7e98a67fb54796a356943ca4db4f3a020256ff50502d1f4b1d1fe8052e7565bff0501c4d5bf2e2804f3e0d9816ae3709190a0afa01d8278b8ef60c20f7302f1e2ecf855a0838e37ecc3075c29565a8f1e20ce8a4315845db9cb0881340fb6370d162d3e94b3f29f3a04d0986cdbf5d4544b5020257671e0150477027621835b0e6f3f21617da591908d916edef76afb17b1ab242396620976f8b6a086354c0b1aa8b9f33fc47222ee2f4fb312ec1e970a9678b6309e8858762f3146b893f891808080808080808080a0de6340047cb9ede82bf2a6202ae60d894124335aedc750972ef2ec0403c0c2b38080a0a4e5c3b7098b57c72b991f90a5abfb9b975ff3681d5f3c821f4b2ec4e652c628a0c508b8465eeedc2dc7267c1463e30383a0a468ab48c786b72b98341b1581732680a096713de783bc6ac79cd7cd1615abebc41d335713eb814f08a5296b5c1a4a84c380f855a01e19437722233bf6fce9f3cd3d1c5f64d9866d9cd5d8d0eeb2d8d5e38534f6d4b3f29f35e2ed2227948a427d78d55a95089b07c392d4431bf56bc604891a7c21566a9190a0fb475982f17af6315435df2a900817f855a0246826d6f44560aaed00e8182a495f04fe72e32103d25876dfd78d0cad427088b3f29f30fb2dbb1df4d6da33389200ea98b7d5291de41d807f1bfefe3677deda7af49190f38c1b2c0e36831bd56ef99840675820f856a0586c29bf23f757845be4c490123634aba6e2706cee1998f6d96a4e4370bc405ab4f3a020538c1601966a6e8c3d7da035c4c83fe7b4b4981a6185399baa4cb73d1a38719190a049bf6045bc86ce6eb7e44a2fcc32f8f855a0d2d380017d8a3c16cb551a5fae345c3c3811339bbedb4d84b09f4db82be1d5eab3f29f31dcf21ffc260760a7a8fc97e57c3a475652b8127e4f215d2a3c94de6ac6f79190a0f786b7a78ad13d4040721be01f3616f856a0fdd9c7beb7f85a981f544a8560e83e900fef08e9a8768bfefc8ce9ef3cef5326b4f3a020a259daee149f0ee1f61a95346cafca2d11098dfeb71b5bfce9408a4ea06b0b9190a0dfc2605618cc0c658c6f5a04e911a7f856a0c1e05b8c9bdfeb9373d09c5f11a2dd2d744a3475a61cd44ecf89e80fef06d825b4f3a020a8f7710228bef9fa8a280ba1075ae7c2a644b0abc8cd68cd8e30ed5efe8df49190964c11d5b4853736f40a0d86123682edf856a0209a136e7a8dda8c3a35b6f5669a55f138460fef8f41f56e42ea9deb33121ccbb4f3a0204160e75b6e1ff6108570853fc7aa9811e22090c55642443e3b57871e3ca66291908a98f67bb79f3d0f68708d47777cdb65f856a002f9dff021023e42ffece3f4c9334bac397d8b0df5e6c239fded497eab253f19b4f3a020adb8dc4ef7be68b4bdb5c70691b0f547c2f6cde3aca2334d525888c912bea49190288f0a2bda324077db6625ee81e03bf4f876a0007127f398cda07396c650856033a313d8922d832a80b48af317d1dd1d29fc37b853f85180808080808080808080a0ab520b3e94949ca7420d05295d10cc92948bd7aa47fa281d6685e0b56435d2a98080a045ec8b42c484a3a615e7f2c1f29de223676d01ff44283f604bfa193047687b71808080f876a080c2c66f07023ebeb01e8eb1604c27ca59e5ffa5dad296ced7a6259f963ab009b853f851a08766d42606366b97e2ac6f55528f54edc16a016725d3d3cdeba7eb19ecaa959780808080808080a079a76d38ad2a0012b0cfcc4e1b201510f37abb5c61e6effeb4ab929f002d438f8080808080808080f856a0ee7986d9651898a13bd4959a0805f32d8df01881bc471875da51b5ce49da4c05b4f3a020efb47b0bde6fd52717884a917372ea487b4e35cd6fa779f084ad9eec8ced92919086430ef9a6cf924de5eb16d96e406828f856a0c2848e6e65983f215390515d4ae946779ad17ecf3ecd75e0da0ecc5fc58e78cab4f3a020ba3148f24bc8515d4f72935b3db036b59e44d7d176fe8bb108546433b8a654919081b254cf536da6e20f9ce5fb4c33d10bf90138a0997d1ec52b4c24fecca2abd749368a5b8933ce1c9a093c8c4a2806d8bac9c307b90114f90111a07db488e8cfabe2f9717abc3471bbb0b1baf1f8df43cab83c09aa7c5a3bdca8d9a0025b9c0a3010bb99ce2d5c6160d347d9634ac9511db956771298e60e3f241919a0c930de9d38c47bbabb68b95563d363f9c605b7445e8407dea3dc4a11cdc407dd808080a01bc3ede86d8d639427bcae0ee9cf4fdc8269b1834fec1a5470bf6d61dec6bd0180a0d9e65fd4c7ff6b877d8fdd0dce1c14c8ea1b7bb021b3d2a488f4c2a0ff7054c280a0078cbabf1e608329d387a7d9ae3f666e32d31ece03e021b7e8c16794167b882e80a0e6731a0ea86657baf528607e72b1ea83052f9162a580fd1180304d881085a1308080a006113c3ae43309fc4b1a03bfbb729502ed93d7d31b3d90c019fc956a51a2941a80f855a055f291a740cc547fe69e1f0e07db384a5e655ab1a3a89c727e4a0eb0ff55ccdbb3f29f34e3ea25517c2f7582e8a46aa292d7008c4dea6017b0e18414bacb56e4e09f9190acdc1e909afec30cdf0df4d28ff14b85f855a0ec438b9f26018dd5e645a911c09772707ac9862c48c17eaf037fc16146cae63fb3f29f37cc096298e6679758edee8dcce9a9c02b086813027fe78ff11ea7f30ccfc09190a0746a04ba771a89fe4d9b42624e6509f856a03df35ac4bc698b7013facc83a82ea0e525794b345927ce476beaec4a1525080fb4f3a0207e4ae8a96ea4b29e514bc5ecf10a1d9664daf950a1b277f7157ac233151d079190e43e84d89136fa20d140f4b095887e64f856a02e133b64986fd0fa7b35b2a9915c7f650886af765e233cf34214aa6117fbe6e0b4f3a020cc624139201ed80cef9684b054ace3b4e8dc49c81e62a17896affd3f5efb899190a0c54daf8d6fa0dd485ea29064438501f856a0628980afdc4047ce89688e1a807d3fac7835ca88da1b2cbfec494a7a62003d02b4f3a0208f4367f8e4caaca8e04745c3ba83740a0dff1afffd4519089b67fcb70c679c9190a02a5e024f2931802ae83885361421dbf855a032854656181ee5e33a9019f6a49f575c8a1e8027647b45c6038c365f1346d66bb3f29f3bdf41bc8297b94d33c3071b2e9aea36e9dc0baf0fb46517f1ced8c12b142c9190a0f29679c2cd05fa069570d5d3e6982af855a07d4f8ef2681b37ac04392c056961cbbe2794e7828f3dbd0750ba4e8bfaaae88cb3f29f3ceae4862bd53a46df2f2d1cffc5a8b975fcc2672d1abe84fe7da70aa81e419190cf49d2c106ab811c498919a520280628f90116a0cd2cec675736425bbb3fd37bf3dc0c299e8f4cd0231a93d136594b8386cf8609b8f3f8f180a0c86bdab224d904c98f72340512473cc70e1cde3d76b965f9551e2b53c16343cb80a091b7e79d6e72ac21ffe33de23b3f713019873f051996f03cfadc5e0daf29373580a012b3a5e27f1a627ded36fe42195bfd12052daf50413fa0cc64ced9c5ab4acdc98080808080a05244aeaeed7c115c656baff2e22737c800121cc1dd6adee2e963382d48d8fb77a0acc3faac9e76a4e2157344cf8f7aea08abfb9f0910ea4f32d43299d0443ffa5980a0da0990aa361aa1653b3cb5a9bf4eef6f01fce9dc47770c495696ca0d6ee5b355a0fe2f2871d1376fd701d4a5cb3148af0ef580c479602989667fbba6e2dba45ef580f896a0007ed198b150dcc4c083e213d26b8d042898a2f7022d86cec82cb367cba36a49b873f87180808080a08d3f4bc8b9096bfb078ad653064a745019c7ff398ce8fae42892f82a7ad70f5e80808080a08eff1bab17a52c2b834b7acc8996b14c27ed7ac8d091b6d68d29f9aed48d09d680808080a02080c51c3174571459f60853580881aa2a9cbfffed090a8f3bc6511857c5db8b8080f855a05f05de2d433047d79bed14992bd0bcf4e8d0cdf65cd7f3388901b68a4fba495db3f29f34dba6013bc35481f4ea800c88ec181e866a205bba56cfb8ef21f32a78b8eb919022718053346cb3c2d846138955328b10f855a036292961a97ec37ea7f74cc1d649d878c3d9ceca3c48aef76c9fc518aa6a3bf5b3f29f3c1c29994abb6728f6ca568e0e7a9fcd7d1b1a8a7db86633a7a11bcfe82ca7919019dea2fc145df483439274e0162c7726f876a006b37fc0f5218c277adbbc2a12929977b7a4958ff362048ef6893a1ac5a3b21ab853f85180808080808080a0d63b63cbb8bb0ba87fa3fa14dc758292ecff6f4550001f7d548e91acd1667ee98080a032e95a1fdec25fae5db541eebd1e3980bc63f2ff6fe96298d4025749b8c727f8808080808080f855a0b38a911b397a5a4d76ba750d7991002b33fb76355f30a03ba54330d419a813bbb3f29f39ab0c0e0584297b1bb640726e34ad53f4d92f11f246af548d33511247cdf99190a01f3d47903713072089c5915cd17c3ff856a0a9a09ac4bb7e4be1105e32cd0b2953dc5674f98444350089c10fbbd3e21277efb4f3a0206317b5a1ac3cab1437feb39af99c4de1c74dd7b7561bd9a2469ea034faee219190a0390cff91733550dd3868ff9926aa8cf856a03d845b179068319e1c2b18417a7d292c1598a1fc7ff76995bdf62060d604ed85b4f3a0202eb39435e361eed58e3bd44aed20aa02b852990c17eb60cdf233deab3fdb9091909634e6e6cb01dd639fb2a24659cb9577f856a050c7b4c34c6f0b8b6536cc41ffb085a392e6c3640094bc4dc5ccf0f063648c79b4f3a0201d6456d7691f16ae5a6db2ed38f45566875cadc4d14696df3f9f580e898a359190a05fe8b6fb1d07a8584a98d49c266b95f856a0decc3bf537604389a2b68b888d78cf2b993dc2825fbdd91af0ec04584da0a20ab4f3a0209b859d6d942fa370c12dd2938406eb3700c810b2775923924cb7a8f1813c3d9190a0e29f33de69290fddaa983777ade6aef856a0783296e8e0a5785410a4d4d6d9f90ed610a1b179def0ce3a92cfb4e9d4a809fab4f3a0205d2e273ab2e5c9c0f9ae7a71f05246a46295733745951627c008a92ae0024b9190a0c6ed9486e9137802d0acdcd9a04992f856a0a7dff3aa298a62adb85491a97a9eee8e9f8dcb060cff685183bf162733673e59b4f3a02041556e16474fabd5271f544e08864a4cefe31084f437d744f542bd2dd160959190a08e8698d162f60c1c9cfe0d6c73b11af856a0d78fdb96b36398000b81bd80876197a9de8f15fbcb580fc79266d9ca9678e2c0b4f3a020eb00cc36aedf6e1cb35f0bfbeb6294b303021a86f7a0548ff2f7885a7d50009190c17649b2e82327319337e0e2fc4f85b3f8d6a0f199c0433c25bd26e81853d90b8d39ab3a13f9c8d9b614b6509bdbea119c3704b8b3f8b180a08251ca9f60edc6a3a9b7118c3a0a072585dc626def95b6c905b8231de6b6c075808080a0c8064ca792b4314403679211355d6cec1262278be142501695482556ca93ea868080a0a9fae9835694d263193f82d2997d3278d135f261be4f3f0fc58cb44da8435f73808080a02472f0a4bfbced328ec356be14db8b5feca85331619aa797a6fb41ffc995b7c880a02afbd8ae5d5ee744cfc352e2e31da1cbdc68f3a8b0f86e0aa6057675ed7c4de38080f876a078d1541df4c2cb0d8fd0ffaf1100c794f7c0cf4e4fa02caff4ef9e1dc86340fab853f8518080a02614a52440ed95cf875d74f2a8f67014c48c7c27ecccad33f9be0197fdad5d198080808080a02a502a104f24f1c190f23c447c4bd7d9d27bda878e8e65a8bd40d6f2dd9713278080808080808080f856a0cdd83d57fdf54c040f9e591e1192bd5712ebeb9ab05f552747cd96053743acdeb4f3a0200e6be36938a5f9d05c51c1c9123a3447b9a9b2d70886fe57e8dacc1adea81491902536383e0a0966a2f8af4a6e9a1c2c11f856a0afbae8f451a5ab19f6fbe5622f51123c40658b74a9217ae482943ca19eb279aab4f3a0209ce4be6565a22bcc6d598a0ca3d906eecb4f9c34cffc3c154670892a5190c99190aa3c467d6b6a7a2353fc3810e4b16926f876a0dd0d09879bb2b85aebd9e8cedba75ceabda5e4c90530c0c6099a739cf8434dd7b853f85180a0649000a6130cd2cb69d32b6780725cd451f4d617f5a74218047b507be2e6b6448080808080808080808080a0366da59cdd2fd25d8e66f9bdd6de89f25ef0dcf98aa0173fe79dea4be9c17d68808080f8d6a0193f81337883b6711a531d576d101be7d51bff8cea5c0386ddf02fa1c9365740b8b3f8b1a02ba0d9e8d7c5574daf657b5da992a26d3740ad325df33df2bcd175aeda38c9678080808080a07c39b7d731f3fcb33b261fe46341193a232e9390a17b7e5610fe420932e4ebf9808080808080a022b160e86b30748fb37c258928aec860119a84864bee8c8ed21e9a2ccaa243c6a05c84ca75e6c6603aef1224db6077ea05720c2cb200c2ca0f3d7b92578a3beb59a0842a25a5c233090004e86efa120df9648d0ba37b3409c43733b7f98b6cbd1b0a80f876a00427a68d7e9e6aa9b6374d47f131bd3925a68a37f6ecbe465b30c649f45ecd5bb853f8518080808080808080a0e5fc3c588fc5db734370f8bab118cc3095d1404e2db420dfb96f196e2dc31490a007a4e976b9115a031956cb6fb02b889334fbc1f55ee0b2454bcd3f95710c7c1780808080808080f855a0b0097f17e36bb378f50a4a3dd29ee5fb4365e83e55bcbe3e8978edf25bed2361b3f29f20a179d2db7e204ed511e5fcc45b8b1798c54aafe44ef172c09b931324568f9190a0120c0d46f7b31005f4c26ba60d9965f876a0da8ba3ceb988da569f04466b58a7d32795ca6f84031c026ecae33010f94769b0b853f85180808080a01af1a0bde7120c48481f13864f5d81ca0d6831423b03821756c909f77fb35dd78080808080a0682c8b621bd2493af7ca2e0ee08f1ae03e57761842cde588d44beca44a48f7fb808080808080f856a0a82b19665b47935ca185a484fd3b34a67f15c3d7fe311dcb302345c4beb8515ab4f3a020a6dd631e4908d1edc583f8866d35407b2e82ff543f1b8eb523e64f245b2aa59190a00ad202c0c7ab61afd556025f709b1af855a0836c99fec866d910cb492939c5e033d654f740666545243023d11053d4a1d822b3f29f30e28fdd35990e27346501108c26cdbd824a6c2ca47d217bf5aaaa5d6a95f49190a030fd8e6a631b69985a836a0d407e21f845a02f483a2212f460f31b939b16dbd37cc3e3aef1ecb3286f0b58c0a9ba20bf6264a3e21da02861d0039cf950b510f0f6ac4be8f0c4f5f5b406bc827b037f0e9cc4c9a444c8f856a08962e14b60e669feaa5d12d3d85e8338e799eacdf4670b717e27a2da0cd6653ab4f3a02075a85e3c28a07c13e8ebe73a3329afe79644150ddbc4915510b491488237f691901d5587a122e7b80e75b6cce85b3fe621f876a09ed614bcd83aa7822221dd00d91cf94f3d3bfc596a1da30539ebbc939a15262ab853f851808080a0511a726d85fd63c15268ff45759ae6e48a8b066f4d73ce8b9a5bd2a405d267d880808080808080a0bf037a6ac4d6649ea6d2ac159f441489ab682beb6380cf00260da50dcf7a4d658080808080f896a02d5ec1671e7579f58ebba6f754605d29de0e0c86a4acc4d0f6d907eefdc428bbb873f87180808080a08a8f541b5eed3db7f34e469bb74bc173fd951c3e63e773d0b9914716ed33841880a0da24d83ff251743716406bc3ff3911854dd39e5cb1668be314fdd84cb72709098080808080808080a04fb8e5703ced053cabb71ff1e05fc8febe033f384129eee2ff26b70baccacac080f876a0034c0abc7c206dbdada02b24c26a563de0159d2bb03be0bcafdce3818b8bd714b853f85180808080808080808080a05fb6b885c57d7df64ddece6a499e5fcd438df1fff2d1c1bbe5d109a02e33fff080a0f708267c95d3ede35b8c210c4572d25954feb1b86e7830440779aad9db7b836080808080f856a0289c0bea08dca40dcf42a5a9c138004c193ff00da9015cfe385e0c830dbd05ecb4f3a020db69fafa0b845b63a7f55ed4f34ca80fefff1b9aed4c96209df0aa5e38d84f91903502fccd078bd1ff0321ae88f8ae6521f856a0e29bf9c46d57600441de803500f0342dd1c1cdbc4b5bafe86421919cea020a33b4f3a020e5c292c24848e682aa111c569a60b3f29daf5a1ecafb6535b4c566a97e82d59190a0e649954342a814332c4e14a90ceaf9f855a0d1c538862786eaac8a5398c1025a1dae5d220d4ac1bffe1e54111168735f0256b3f29f2047936f71a787b183594df83c05a6792033479c6a98536a1d2330567a60d39190a03e4611dc10fce14060722e79618e53f8f6a0cbbd91219a88d625a2ffd719b442fd6fe3956d18dd3b9b7a1be3cade2e7afc84b8d3f8d1808080808080a02c74e820cded93b37bb445e2b379dee2cdd1acd347da0e07dc4fd097f73aaeef808080a0e4d46454e6c8f24ec883efd33c1a9a8ecccc337986bfe28ec27951ab069226cea0d367385c7652afbebf775dcbf52049070a61492525835d3e767705de6cff49c3a038b4b768b302e9bd71d25d8886a1c7c678dc604c645a056940b70aa086683e6c80a0f80fcdaddc6c65555f2770dd0e59263da1722cbf6fc64fa68fda4a36c09e9023a0dff4072ee1b2a876bd4c505eacb512e06f29893d736261d00aa3ff56abe267f680f855a089d7a8027c385c45b37c3618740baafecd29a3e76233a81dcc83243e8050a45db3f29f3bf5ae170ba85b590c7d7eabaf4c1111ec6bdc9e51d8b2885c8195247a3ce99190cf92627f5433e7cbf8cc8fc9014b3258f856a04104688801b59418a111128a80dc3c8db3835d21aaf36d99afebc524bdefd072b4f3a0209876fff482174c409f697ba972168eb1a0a77fb3606a5ad82e73025c0a7ef99190a0e51279365d382a7da92a120c1f1641f856a0dee17360f32b96db8fca55e2cd0f31c1d512b502a9ac5eb0b287161994621856b4f3a020957709912fc41cfc9f4d0e1f06fddddcc918c3dce9165587c6337d5d5998f391906a73604e061e37ce722e1c117dd9ec8ff8d6a04a18a3b2fb83af7059804bae2f955e7a0f165a520ec9b01339dd3aeb425ea854b8b3f8b180808080a0ad48790e7e4f7c5fa4a8d28679688d72829aa55aaaee5270251e67c71895dceca03ece79f6f7eabfbbfa1dda8471eb84164e62c727d2770119b4bd0bffe1ca4a08a031351d34af011c2882e89b92bd009816071bd40907513502b068b62193c4614ea02b25e349c54dfa3a83fed3f1320059c27094be3931ebd34c8ce932668e7e3975808080a064e53231c4ec72f0518f1301ad55cb2ba707dfd494a2a80d3356a64f84927ac88080808080f856a0037f87bba25f82ce240afb9d85a46802237bce7bd1c074c83023b27226eceaebb4f3a02032a461fe54a6143d269d3c925687c99ef06a08bbaedd650b72e08fb74aaeeb9190d729c7457ec24ff6bc60f95752186359")).withContractIndex(contract_cab26, ByteArrayWrapper.wrap(Hex.decode("0d84c716d0160e91ba7dddfdadbb5389169d0112be9aa2fb540b3b3137c57768")), ByteArrayWrapper.wrap(Hex.decode("844358ea1e0368c7d37fe232a61687dde2254d3e4c99c797993c2b95fe835bab")), InternalVmType.FVM).withAvmEnabled().build().bc;
    // ensure the contract does not exist before the import
    AionAddress contract_685a1 = AddressUtils.wrapAddress("a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a1");
    assertThat(blockchain.getRepository().getAccountState(contract_685a1)).isNull();
    // import block
    Pair<ImportResult, AionBlockSummary> results = blockchain.tryToConnectAndFetchSummary(blockToImport);
    assertThat(results.getLeft()).isEqualTo(ImportResult.IMPORTED_BEST);
    // check that the new account state exists
    AccountState account_685a1 = blockchain.getRepository().getAccountState(contract_685a1);
    assertThat(account_685a1).isNotNull();
    byte[] storedCodeHash = account_685a1.getCodeHash();
    assertThat(storedCodeHash).isEqualTo(Hex.decode("4d93ab5e6fefb5b0fe77159447121edd788acb58b7ef48c3f4ab8fae417159f9"));
    // check that the contract index was correctly updated
    ContractInformation ci = blockchain.getRepository().getIndexedContractInformation(contract_685a1);
    assertThat(ci.getVmUsed(storedCodeHash)).isEqualTo(InternalVmType.FVM);
    assertThat(ci.getInceptionBlocks(storedCodeHash)).contains(blockToImport.getHashWrapper());
    // collect the consensus information from the block & receipt.
    AionBlockSummary blockSummary = results.getRight();
    // check the receipt
    AionTxReceipt receipt = blockSummary.getSummaries().get(0).getReceipt();
    assertThat(receipt.isSuccessful()).isTrue();
    assertThat(receipt.getEnergyUsed()).isEqualTo(1_170_797L);
    assertThat(receipt.getPostTxState()).isEqualTo(Hex.decode("3acbd8e5b0f259e1bd292a4b688cabe9f91c67a51c3e14d893a488349c4f6859"));
    assertThat(receipt.getReceiptTrieEncoded()).isEqualTo(Hex.decode("f9025aa03acbd8e5b0f259e1bd292a4b688cabe9f91c67a51c3e14d893a488349c4f6859b9010000004000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000040000000000020000004000000000000040000000000000000000000004000000000080000000000000000040000100000000000000000000000000000000000002000000000000000000000000000000800000000000000000000000000000000000000000000000000002000000000000000200000000001000000004800000000000000000000000000000000000000000000000080000000000040000000400000000000f90133f887a0a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a1f863a07f0c55adb7f69e3decf3ca20f9a2367b205d728e6905eea6c4fb6f3934f842cca000000000000000000000000000000000000000000010dfde374787bc6e000000a0a000356e7deb04eb8ccfd2bcc756c6159762edc0512760387e2ab5413587443e80f8a8a0a0d270e7759e8fc020df5f1352bf4d329342c1bcdfe9297ef594fa352c7cab26f884a09096ccaf3bc136981b8a043d4e5ef1396a340697147a05ff0597f635003acc00a0a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a1a087c6410c4c8253a24871535e38b61ccf76bfc709cbfb34b3a5a65be94a2d84a6a0a081848ba2854cb906d9c14892cb0f8d08da46b57cd44e47e6cb273e9a4685a180"));
    byte[] stateRoot = blockSummary.getBlock().getStateRoot();
    byte[] blockReceiptsRoot = blockSummary.getBlock().getReceiptsRoot();
    // verify the consensus information.
    String expectedRoot = "a97680f42d7bbb8e175981e9dd847967427edfc8c5279475b70ca131680d5e99";
    String expectedReceiptsRoot = "2b229b5a2c86702495ee53c85cd34a85a8e0746239b947fe4c9d64fc8dd83070";
    assertThat(stateRoot).isEqualTo(Hex.decode(expectedRoot));
    assertThat(blockReceiptsRoot).isEqualTo(Hex.decode(expectedReceiptsRoot));
    // checking repository state and total difficulty
    assertThat(blockchain.getRepository().getRoot()).isEqualTo(Hex.decode(expectedRoot));
    assertThat(blockchain.getTotalDifficulty()).isEqualTo(expectedTotalDifficultyAfterImport);
}
Also used : AionAddress(org.aion.types.AionAddress) ImportResult(org.aion.zero.impl.core.ImportResult) Builder(org.aion.zero.impl.blockchain.StandaloneBlockchain.Builder) StandaloneBlockchain(org.aion.zero.impl.blockchain.StandaloneBlockchain) AccountState(org.aion.base.AccountState) ContractInformation(org.aion.zero.impl.db.ContractInformation) AionBlockSummary(org.aion.zero.impl.types.AionBlockSummary) Block(org.aion.zero.impl.types.Block) BigInteger(java.math.BigInteger) AionTxReceipt(org.aion.base.AionTxReceipt) Test(org.junit.Test)

Example 4 with ContractInformation

use of org.aion.zero.impl.db.ContractInformation in project aion by aionnetwork.

the class BlockchainIntegrationTest method testDeployCryptoKitties.

@Test
public void testDeployCryptoKitties() {
    String cryptoKittiesCode = "0x60506040526000600660006101000a81548160ff02191690831515021790555060e060405190810160405280603c63ffffffff1663ffffffff168152601001607863ffffffff1663ffffffff16815260100161012c63ffffffff1663ffffffff16815260100161025863ffffffff1663ffffffff16815260100161070863ffffffff1663ffffffff168152601001610e1063ffffffff1663ffffffff168152601001611c2063ffffffff1663ffffffff16815260100161384063ffffffff1663ffffffff16815260100161708063ffffffff1663ffffffff16815260100161e10063ffffffff1663ffffffff1681526010016201518063ffffffff1663ffffffff1681526010016202a30063ffffffff1663ffffffff1681526010016205460063ffffffff1663ffffffff16815260100162093a8063ffffffff1663ffffffff16815260100150600760005090600e6200015b92919062000673565b50600f600b60005090905566071afd498d000060176000509090553415620001835760006000fd5b5b6001600660006101000a81548160ff021916908315150217905550336000600050828290918060010183905555505050336004600050828290918060010183905555505050620002026000600060006fffffffffffffffffffffffffffffffff600060006200020a640100000000026200335e176401000000009004565b505b620008df565b60006000620002186200071f565b60008963ffffffff168a141515620002305760006000fd5b8863ffffffff1689141515620002465760006000fd5b8761ffff16881415156200025a5760006000fd5b6002888115156200026757fe5b049250600d8361ffff1611156200027f57600d925082505b6080604051908101604052808881526010014267ffffffffffffffff168152601001600067ffffffffffffffff1681526010018b63ffffffff1681526010018a63ffffffff168152601001600063ffffffff1681526010018461ffff1681526010018961ffff1681526010015091506001600c600050805480600101828162000309919062000795565b9190906000526010600020905090600191828204019190066010025b85909190915060008201518160000160005090905560108201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060308201518160020160006101000a81548163ffffffff021916908363ffffffff16021790555060408201518160020160046101000a81548163ffffffff021916908363ffffffff16021790555060508201518160020160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600201600c6101000a81548161ffff021916908361ffff160217905550607082015181600201600e6101000a81548161ffff021916908361ffff16021790555050500390508063ffffffff16811415156200046e5760006000fd5b7f355092523187d7f20a6cdccceeea14bc7c399e83c75232c899b1ab5753c1e8b5878784866030015163ffffffff16876040015163ffffffff16886000015160405180878782528160100152602001858152601001848152601001838152601001828152601001965050505050505060405180910390a16200050a60006000888885620005206401000000000262003a4a176401000000009004565b80935062000513565b5050509695505050505050565b600e6000506000848482528160100152602001908152601001600020905060008181505480929190600101919050909055508282600d600050600084815260100190815260100160002090506000508282909180600101839055555050506000600086869091149190141615156200061457600e60005060008686825281601001526020019081526010016000209050600081815054809291906001900391905090905550601060005060008281526010019081526010016000209050600050806000905560010160009055600f600050600082815260100190815260100160002090506000508060009055600101600090555b7f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d09598686868686604051808686825281601001526020018484825281601001526020018281526010019550505050505060405180910390a15b5050505050565b82600e90906003016004900481019282156200070c5791601002820160005b83821115620006d857835183826101000a81548163ffffffff021916908363ffffffff160217905550926010019260040160108160030104928301926001030262000692565b80156200070a5782816101000a81549063ffffffff0219169055600401601081600301049283019260010302620006d8565b505b5090506200071b9190620007cc565b5090565b60806040519081016040528060008152601001600067ffffffffffffffff168152601001600067ffffffffffffffff168152601001600063ffffffff168152601001600063ffffffff168152601001600063ffffffff168152601001600061ffff168152601001600061ffff1681526010015090565b815481835581811511620007c7576003028160030283600052601060002090509182019101620007c6919062000807565b5b505050565b620008049190620007d8565b808211156200080057600081816101000a81549063ffffffff021916905550600101620007d8565b5090565b90565b620008dc919062000813565b80821115620008d857600060008201600050600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556002820160006101000a81549063ffffffff02191690556002820160046101000a81549063ffffffff02191690556002820160086101000a81549063ffffffff021916905560028201600c6101000a81549061ffff021916905560028201600e6101000a81549061ffff02191690555060030162000813565b5090565b90565b61418680620008ef6000396000f300605060405236156102b1576000356c01000000000000000000000000900463ffffffff16806301ffc9a7146102f05780630519ce791461033b57806305e455461461036c57806306fdde03146103965780630a0f8168146104265780630e583df01461045757806314001f4c1461048157806318160ddd146104ad578063183a7947146104d757806319c2f2011461050157806321717ebf1461052b57806322d1d20b1461055c57806324e7a38a1461059457806325ae86da146105c057806327d7874c146105ff5780632ba73c151461062b578063399153aa146106575780633c3fce591461068c5780633cfb772a146106cb5780633f4ba83a146106ef578063421182b7146107055780634e0a3379146107295780635761e2e3146107555780635c975abb1461078a5780635fd8c710146107b85780636044a275146107ce578063680eba27146107ef5780636a1f17a2146108195780636af04a57146108985780636fbde40d146108c957806370a08231146108f557806371587988146109355780637a7d4937146109615780637b7814521461098b5780638456cb59146109d15780638462151c146109e757806391876e5714610a69578063951dc01014610a7f5780639530ab0e14610ac4578063958ec7d114610b0357806395d89b4114610b38578063960cf3ad14610bc8578063aee0237914610c7a578063b047fb5014610c9b578063b0c35c0514610ccc578063bc4006f514610cf6578063c477e0c014610d27578063cd3301d814610d4b578063d357fb2e14610d8f578063defb958414610dcb578063dfebeffa14610df5578063e17b25af14610e34578063e6cbe35114610e60578063eff2762e14610e91578063f1ca941014610ed0578063f2a3789a14610efa578063f2b47d5214610f39578063fb59730414610f6a578063fbb001d614610fa6576102b1565b5b6011600050806001015490543390911491901416806102e1575060136000508060010154905433909114919014165b15156102ed5760006000fd5b5b005b34156102fc5760006000fd5b61032160048080356bffffffffffffffffffffffff1916906010019091905050610fdb565b604051808215151515815260100191505060405180910390f35b34156103475760006000fd5b61034f6112c2565b604051808383825281601001526020019250505060405180910390f35b34156103785760006000fd5b6103806112d1565b6040518082815260100191505060405180910390f35b34156103a25760006000fd5b6103aa6112da565b6040518080601001828103825283818151815260100191508051906010019080838360005b838110156103eb5780820151818401525b6010810190506103cf565b50505050905090810190600f1680156104185780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b34156104325760006000fd5b61043a611307565b604051808383825281601001526020019250505060405180910390f35b34156104635760006000fd5b61046b611316565b6040518082815260100191505060405180910390f35b341561048d5760006000fd5b6104ab60048080806010013590359091602001909192905050611321565b005b34156104b95760006000fd5b6104c16113d7565b6040518082815260100191505060405180910390f35b34156104e35760006000fd5b6104eb6113ef565b6040518082815260100191505060405180910390f35b341561050d5760006000fd5b6105156113f8565b6040518082815260100191505060405180910390f35b34156105375760006000fd5b61053f6113ff565b604051808383825281601001526020019250505060405180910390f35b34156105685760006000fd5b61057e600480803590601001909190505061140e565b6040518082815260100191505060405180910390f35b34156105a05760006000fd5b6105be60048080806010013590359091602001909192905050611821565b005b34156105cc5760006000fd5b6105e260048080359060100190919050506118d7565b604051808383825281601001526020019250505060405180910390f35b341561060b5760006000fd5b61062960048080806010013590359091602001909192905050611925565b005b34156106375760006000fd5b6106556004808080601001359035909160200190919290505061197b565b005b34156106635760006000fd5b61068a600480803590601001909190808060100135903590916020019091929050506119d1565b005b34156106985760006000fd5b6106c96004808035906010019091908035906010019091908035906010019091908035906010019091905050611a6f565b005b34156106d75760006000fd5b6106ed6004808035906010019091905050611b76565b005b34156106fb5760006000fd5b610703611ba7565b005b34156107115760006000fd5b6107276004808035906010019091905050611c85565b005b34156107355760006000fd5b61075360048080806010013590359091602001909192905050611dac565b005b34156107615760006000fd5b61078860048080806010013590359091602001909192908035906010019091905050611e02565b005b34156107965760006000fd5b61079e611e6e565b604051808215151515815260100191505060405180910390f35b34156107c45760006000fd5b6107cc611e81565b005b6107ed6004808035906010019091908035906010019091905050611ef9565b005b34156107fb5760006000fd5b610803612092565b6040518082815260100191505060405180910390f35b34156108255760006000fd5b61083b6004808035906010019091905050612098565b604051808b1515151581526010018a1515151581526010018981526010018881526010018781526010018681526010018581526010018481526010018381526010018281526010019a505050505050505050505060405180910390f35b34156108a45760006000fd5b6108ac612226565b604051808383825281601001526020019250505060405180910390f35b34156108d55760006000fd5b6108f360048080806010013590359091602001909192905050612235565b005b34156109015760006000fd5b61091f600480808060100135903590916020019091929050506122eb565b6040518082815260100191505060405180910390f35b34156109415760006000fd5b61095f6004808080601001359035909160200190919290505061231c565b005b341561096d5760006000fd5b6109756123b4565b6040518082815260100191505060405180910390f35b34156109975760006000fd5b6109cf6004808080601001359035909160200190919290808060100135903590916020019091929080359060100190919050506123bd565b005b34156109dd5760006000fd5b6109e5612460565b005b34156109f35760006000fd5b610a11600480808060100135903590916020019091929050506124f3565b6040518080601001828103825283818151815260100191508051906010019060100280838360005b83811015610a555780820151818401525b601081019050610a39565b505050509050019250505060405180910390f35b3415610a755760006000fd5b610a7d612621565b005b3415610a8b5760006000fd5b610aaa6004808035906010019091908035906010019091905050612735565b604051808215151515815260100191505060405180910390f35b3415610ad05760006000fd5b610b0160048080359060100190919080359060100190919080359060100190919080359060100190919050506127f2565b005b3415610b0f5760006000fd5b610b36600480808060100135903590916020019091929080359060100190919050506128f8565b005b3415610b445760006000fd5b610b4c61299f565b6040518080601001828103825283818151815260100191508051906010019080838360005b83811015610b8d5780820151818401525b601081019050610b71565b50505050905090810190600f168015610bba5780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b3415610bd45760006000fd5b610bfe600480803590601001909190803590601001908201803590601001919091929050506129cc565b6040518080601001828103825283818151815260100191508051906010019080838360005b83811015610c3f5780820151818401525b601081019050610c23565b50505050905090810190600f168015610c6c5780820380516001836010036101000a031916815260100191505b509250505060405180910390f35b610c996004808035906010019091908035906010019091905050612ae7565b005b3415610ca75760006000fd5b610caf612e83565b604051808383825281601001526020019250505060405180910390f35b3415610cd85760006000fd5b610ce0612e92565b6040518082815260100191505060405180910390f35b3415610d025760006000fd5b610d0a612e9b565b604051808383825281601001526020019250505060405180910390f35b3415610d335760006000fd5b610d496004808035906010019091905050612eaa565b005b3415610d575760006000fd5b610d6d6004808035906010019091905050612f57565b604051808263ffffffff1663ffffffff16815260100191505060405180910390f35b3415610d9b5760006000fd5b610db16004808035906010019091905050612f8e565b604051808215151515815260100191505060405180910390f35b3415610dd75760006000fd5b610ddf61311f565b6040518082815260100191505060405180910390f35b3415610e015760006000fd5b610e176004808035906010019091905050613125565b604051808383825281601001526020019250505060405180910390f35b3415610e405760006000fd5b610e5e60048080806010013590359091602001909192905050613148565b005b3415610e6c5760006000fd5b610e74613180565b604051808383825281601001526020019250505060405180910390f35b3415610e9d5760006000fd5b610eb3600480803590601001909190505061318f565b604051808383825281601001526020019250505060405180910390f35b3415610edc5760006000fd5b610ee46131b2565b6040518082815260100191505060405180910390f35b3415610f065760006000fd5b610f1c60048080359060100190919050506131bb565b604051808383825281601001526020019250505060405180910390f35b3415610f455760006000fd5b610f4d6131de565b604051808383825281601001526020019250505060405180910390f35b3415610f765760006000fd5b610f8c60048080359060100190919050506131ed565b604051808215151515815260100191505060405180910390f35b3415610fb25760006000fd5b610fd960048080806010013590359091602001909192908035906010019091905050613256565b005b600060405180806f737570706f727473496e74657266616381526010016f652862797465733429000000000000008152601001506019019050604051809103902090506bffffffffffffffffffffffff1916826bffffffffffffffffffffffff191614806112b6575060405180806f746f6b656e4d6574616461746128756981526010016f6e743132382c737472696e6729000000815260100150601d0190506040518091039020905060405180806f746f6b656e734f664f776e657228616481526010016f6472657373290000000000000000000081526010015060160190506040518091039020905060405180806f7472616e7366657246726f6d2861646481526010016f726573732c616464726573732c75696e81526010016f7431323829000000000000000000000081526010015060250190506040518091039020905060405180806f7472616e73666572286164647265737381526010016f2c75696e74313238290000000000000081526010015060190190506040518091039020905060405180806f617070726f766528616464726573732c81526010016f75696e7431323829000000000000000081526010015060180190506040518091039020905060405180806f6f776e65724f662875696e743132382981526010015060100190506040518091039020905060405180806f62616c616e63654f662861646472657381526010016f7329000000000000000000000000000081526010015060120190506040518091039020905060405180806f746f74616c537570706c792829000000815260100150600d0190506040518091039020905060405180806f73796d626f6c2829000000000000000081526010015060080190506040518091039020905060405180806f6e616d652829000000000000000000008152601001506006019050604051809103902090501818181818181818186bffffffffffffffffffffffff1916826bffffffffffffffffffffffff1916145b90506112bd565b919050565b60026000508060010154905482565b601b6000505481565b602060405190810160405280600d81526010016f43727970746f4b69747469657300000081526010015081565b60006000508060010154905482565b662386f26fc1000081565b60006000600060005080600101549054339091149190141615156113455760006000fd5b83839150915081816376190f8f6000604051601001526040518163ffffffff166c010000000000000000000000000281526004016010604051808303816000888881813b15156113955760006000fd5b5af115156113a35760006000fd5b505050506040518051906010015015156113bd5760006000fd5b8181601360005082828255906001015550505b5b50505050565b60006001600c600050805490500390506113ec565b90565b60186000505481565b6201518081565b60136000508060010154905482565b600060006000600060006000600060006000600660009054906101000a900460ff1615151561143d5760006000fd5b600c6000508a81548110151561144f57fe5b906000526010600020905090600191828204019190066010025b50975060008860010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161415151561149f5760006000fd5b6115e08860806040519081016040529081600082016000505481526010016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526010016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526010016002820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526010016002820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526010016002820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260100160028201600c9054906101000a900461ffff1661ffff1661ffff16815260100160028201600e9054906101000a900461ffff1661ffff1661ffff168152601001505061331d63ffffffff16565b15156115ec5760006000fd5b8760020160089054906101000a900463ffffffff1663ffffffff169650600c6000508781548110151561161b57fe5b906000526010600020905090600191828204019190066010025b50955087600201600e9054906101000a900461ffff16945087600201600e9054906101000a900461ffff1661ffff1686600201600e9054906101000a900461ffff1661ffff1611156116995785600201600e9054906101000a900461ffff16945084505b60196000508060010154905463614778d28a60000160005054896000016000505460018d60010160089054906101000a900467ffffffffffffffff16036000604051601001526040518463ffffffff166c01000000000000000000000000028152600401808481526010018381526010018267ffffffffffffffff16815260100193505050506010604051808303816000888881813b151561173b5760006000fd5b5af115156117495760006000fd5b50505050604051805190601001509350600d60005060008b8152601001908152601001600020905060005080600101549054925092506117b48a8960020160089054906101000a900463ffffffff1663ffffffff166001880161ffff1687878761335e63ffffffff16565b90508760020160086101000a81549063ffffffff02191690556018600081815054809291906001900391905090905550336108fc601760005054908115029060405160006040518083038185898989f194505050505050809850611813565b5b5050505050505050919050565b60006000600060005080600101549054339091149190141615156118455760006000fd5b83839150915081816354c15b826000604051601001526040518163ffffffff166c010000000000000000000000000281526004016010604051808303816000888881813b15156118955760006000fd5b5af115156118a35760006000fd5b505050506040518051906010015015156118bd5760006000fd5b8181601960005082828255906001015550505b5b50505050565b60006000600d600050600084815260100190815260100160002090506000508060010154905491509150818150506000600083839091149190141615151561191f5760006000fd5b5b915091565b600060005080600101549054339091149190141615156119455760006000fd5b6000600083839091149190141615151561195f5760006000fd5b818160006000508282909180600101839055555050505b5b5050565b6000600050806001015490543390911491901416151561199b5760006000fd5b600060008383909114919014161515156119b55760006000fd5b818160046000508282909180600101839055555050505b5b5050565b60006000600460005080600101549054339091149190141615156119f55760006000fd5b8383915091506000600083839091149190141615611a225760046000508060010154905491509150818150505b611388601b60005054101515611a385760006000fd5b601b6000818150548092919060010191905090905550611a6560006000600088868661335e63ffffffff16565b505b5b5050505050565b600660009054906101000a900460ff16151515611a8c5760006000fd5b611a9c338661365963ffffffff16565b1515611aa85760006000fd5b611ab7846131ed63ffffffff16565b151515611ac45760006000fd5b611adf8460116000508060010154905461369463ffffffff16565b601160005080600101549054631ea1c62a86868686336040518763ffffffff166c010000000000000000000000000281526004018087815260100186815260100185815260100184815260100183838252816010015260200196505050505050506000604051808303816000888881813b1515611b5c5760006000fd5b5af11515611b6a5760006000fd5b505050505b5b50505050565b60046000508060010154905433909114919014161515611b965760006000fd5b8060176000508190909055505b5b50565b60006000508060010154905433909114919014161515611bc75760006000fd5b600660009054906101000a900460ff161515611be35760006000fd5b6000600060116000508060010154905490911491901416151515611c075760006000fd5b6000600060136000508060010154905490911491901416151515611c2b5760006000fd5b6000600060196000508060010154905490911491901416151515611c4f5760006000fd5b60006000601d60005080600101549054909114919014161515611c725760006000fd5b611c806136c663ffffffff16565b5b5b5b565b600060046000508060010154905433909114919014161515611ca75760006000fd5b61afc8601c60005054101515611cbd5760006000fd5b611cd3600060006000853061335e63ffffffff16565b9050611cf08160116000508060010154905461369463ffffffff16565b601160005080600101549054631ea1c62a83611d1061372263ffffffff16565b600062015180306040518763ffffffff166c010000000000000000000000000281526004018087815260100186815260100185815260100184815260100183838252816010015260200196505050505050506000604051808303816000888881813b1515611d7e5760006000fd5b5af11515611d8c5760006000fd5b50505050601c60008181505480929190600101919050909055505b5b5050565b60006000508060010154905433909114919014161515611dcc5760006000fd5b60006000838390911491901416151515611de65760006000fd5b818160026000508282909180600101839055555050505b5b5050565b600660009054906101000a900460ff16151515611e1f5760006000fd5b611e2f338361365963ffffffff16565b1515611e3b5760006000fd5b82826010600050600084815260100190815260100160002090506000508282909180600101839055555050505b5b505050565b600660009054906101000a900460ff1681565b6000600060026000508060010154905433909114919014161515611ea55760006000fd5b3031915060176000505460016018600050540102905080821115611ef3576002600050806001015490546108fc838503908115029060405160006040518083038185898989f1945050505050505b5b5b5050565b6000600660009054906101000a900460ff16151515611f185760006000fd5b611f28338461365963ffffffff16565b1515611f345760006000fd5b611f4382612f8e63ffffffff16565b1515611f4f5760006000fd5b611f5f82846137e363ffffffff16565b1515611f6b5760006000fd5b601360005080600101549054632cdc0f94856000604051601001526040518263ffffffff166c01000000000000000000000000028152600401808281526010019150506010604051808303816000888881813b1515611fca5760006000fd5b5af11515611fd85760006000fd5b5050505060405180519060100150905060176000505481013410151515611fff5760006000fd5b60136000508060010154905463478350a26017600050543403866040518363ffffffff166c010000000000000000000000000281526004018082815260100191505060006040518083038185898981813b151561205c5760006000fd5b5af1151561206a5760006000fd5b505050505061208b8263ffffffff168463ffffffff1661386863ffffffff16565b5b5b505050565b61afc881565b60006000600060006000600060006000600060006000600c6000508c8154811015156120c057fe5b906000526010600020905090600191828204019190066010025b50905060008160020160089054906101000a900463ffffffff1663ffffffff1614159a508a50438160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1611159950895080600201600c9054906101000a900461ffff1661ffff16985088508060010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff16975087508060020160089054906101000a900463ffffffff1663ffffffff16965086508060010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16955085508060020160009054906101000a900463ffffffff1663ffffffff16945084508060020160049054906101000a900463ffffffff1663ffffffff169350835080600201600e9054906101000a900461ffff1661ffff16925082508060000160005054915081505b509193959799509193959799565b601d6000508060010154905482565b60006000600060005080600101549054339091149190141615156122595760006000fd5b83839150915081816385b861886000604051601001526040518163ffffffff166c010000000000000000000000000281526004016010604051808303816000888881813b15156122a95760006000fd5b5af115156122b75760006000fd5b505050506040518051906010015015156122d15760006000fd5b8181601160005082828255906001015550505b5b50505050565b6000600e60005060008484825281601001526020019081526010016000209050600050549050612316565b92915050565b6000600050806001015490543390911491901416151561233c5760006000fd5b600660009054906101000a900460ff1615156123585760006000fd5b8181601d6000508282909180600101839055555050507f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa4461993058383604051808383825281601001526020019250505060405180910390a15b5b5b5050565b600b6000505481565b600660009054906101000a900460ff161515156123da5760006000fd5b600060008484909114919014161515156123f45760006000fd5b3084849091149190141615151561240b5760006000fd5b61241b3383613a0f63ffffffff16565b15156124275760006000fd5b61243885858361365963ffffffff16565b15156124445760006000fd5b6124578585858585613a4a63ffffffff16565b5b5b5050505050565b60046000508060010154905433909114919014168061248f575060006000508060010154905433909114919014165b806124aa575060026000508060010154905433909114919014165b15156124b65760006000fd5b600660009054906101000a900460ff161515156124d35760006000fd5b6001600660006101000a81548160ff0219169083151502179055505b5b5b565b6124fb613f79565b6000612505613f79565b60006000600061251b88886122eb63ffffffff16565b945060008514156125585760006040518059106125355750595b90808252806010026010018201604052801561254c575b50955061261656612615565b846040518059106125665750595b90808252806010026010018201604052801561257d575b50935061258e6113d763ffffffff16565b9250600091506001905080505b828111151561260d578787600d600050600084815260100190815260100160002090506000508060010154905490911491901416156125ff578084838151811015156125e357fe5b9060100190601002019090818152601001505081806001019250505b5b808060010191505061259b565b839550612616565b5b505050505092915050565b600460005080600101549054339091149190141680612650575060006000508060010154905433909114919014165b8061266b575060026000508060010154905433909114919014165b15156126775760006000fd5b601160005080600101549054635fd8c7106040518163ffffffff166c010000000000000000000000000281526004016000604051808303816000888881813b15156126c25760006000fd5b5af115156126d05760006000fd5b50505050601360005080600101549054635fd8c7106040518163ffffffff166c010000000000000000000000000281526004016000604051808303816000888881813b151561271f5760006000fd5b5af1151561272d5760006000fd5b505050505b5b565b60006000600060008511151561274b5760006000fd5b60008411151561275b5760006000fd5b600c6000508581548110151561276d57fe5b906000526010600020905090600191828204019190066010025b509150600c6000508481548110151561279c57fe5b906000526010600020905090600191828204019190066010025b5090506127cb82868387613b9c63ffffffff16565b80156127e357506127e28486613db563ffffffff16565b5b92506127ea565b505092915050565b600660009054906101000a900460ff1615151561280f5760006000fd5b61281f338661365963ffffffff16565b151561282b5760006000fd5b61283a84612f8e63ffffffff16565b15156128465760006000fd5b6128618460136000508060010154905461369463ffffffff16565b601360005080600101549054631ea1c62a86868686336040518763ffffffff166c010000000000000000000000000281526004018087815260100186815260100185815260100184815260100183838252816010015260200196505050505050506000604051808303816000888881813b15156128de5760006000fd5b5af115156128ec5760006000fd5b505050505b5b50505050565b600660009054906101000a900460ff161515156129155760006000fd5b612925338361365963ffffffff16565b15156129315760006000fd5b61294281848461369463ffffffff16565b7f444360fd9f99263247bc59eb6f6c9f5d7f1096ba7962aa22cb94c3f5b743eded33868686604051808686825281601001526020018484825281601001526020018281526010019550505050505060405180910390a15b5b505050565b602060405190810160405280600281526010016f434b000000000000000000000000000081526010015081565b6129d4613f90565b6129dc613fa7565b60006000600060156000508060010154905490911491901416151515612a025760006000fd5b60156000508060010154905463d46752918888886000604051609001526040518463ffffffff166c010000000000000000000000000281526004018084815260100180601001828103825284848281815260100192508082843782019150509450505050506090604051808303816000888881813b1515612a835760006000fd5b5af11515612a915760006000fd5b50505050604051806080018051906010016040528092508193505050602060405190810160405280600d81526010016f6e6f7420737570706f727465640000008152601001509250612ade565b50509392505050565b60006000600660009054906101000a900460ff16151515612b085760006000fd5b6017600050543410151515612b1d5760006000fd5b612b2d338661365963ffffffff16565b1515612b395760006000fd5b612b498385613db563ffffffff16565b1515612b555760006000fd5b600c60005084815481101515612b6757fe5b906000526010600020905090600191828204019190066010025b509150612cc58260806040519081016040529081600082016000505481526010016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526010016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526010016002820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526010016002820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526010016002820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260100160028201600c9054906101000a900461ffff1661ffff1661ffff16815260100160028201600e9054906101000a900461ffff1661ffff1661ffff1681526010015050613e5963ffffffff16565b1515612cd15760006000fd5b600c60005083815481101515612ce357fe5b906000526010600020905090600191828204019190066010025b509050612e418160806040519081016040529081600082016000505481526010016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526010016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526010016002820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526010016002820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526010016002820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260100160028201600c9054906101000a900461ffff1661ffff1661ffff16815260100160028201600e9054906101000a900461ffff1661ffff1661ffff1681526010015050613e5963ffffffff16565b1515612e4d5760006000fd5b612e5f82858386613b9c63ffffffff16565b1515612e6b5760006000fd5b612e7b848461386863ffffffff16565b5b5b50505050565b60046000508060010154905482565b60176000505481565b60156000508060010154905482565b600460005080600101549054339091149190141680612ed9575060006000508060010154905433909114919014165b80612ef4575060026000508060010154905433909114919014165b1515612f005760006000fd5b60076000506000600e81101515612f1357fe5b9090600491828204019190066004025b9054906101000a900463ffffffff1663ffffffff1681101515612f465760006000fd5b80600b6000508190909055505b5b50565b600760005081600e81101515612f6957fe5b9090600491828204019190066004025b9150909054906101000a900463ffffffff1681565b60006000600083111515612fa25760006000fd5b600c60005083815481101515612fb457fe5b906000526010600020905090600191828204019190066010025b5090506131128160806040519081016040529081600082016000505481526010016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526010016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526010016002820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526010016002820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526010016002820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260100160028201600c9054906101000a900461ffff1661ffff1661ffff16815260100160028201600e9054906101000a900461ffff1661ffff1661ffff1681526010015050613e5963ffffffff16565b9150613119565b50919050565b61138881565b601060005060105280600052602060002090506000915090508060010154905482565b600060005080600101549054339091149190141615156131685760006000fd5b8181601560005082828255906001015550505b5b5050565b60116000508060010154905482565b600d60005060105280600052602060002090506000915090508060010154905482565b601c6000505481565b600f60005060105280600052602060002090506000915090508060010154905482565b60196000508060010154905482565b60006000821115156131ff5760006000fd5b6000600c6000508381548110151561321357fe5b906000526010600020905090600191828204019190066010025b5060020160089054906101000a900463ffffffff1663ffffffff1614159050613251565b919050565b600660009054906101000a900460ff161515156132735760006000fd5b6000600084849091149190141615151561328d5760006000fd5b308484909114919014161515156132a45760006000fd5b6011600050806001015490548484909114919014161515156132c65760006000fd5b6013600050806001015490548484909114919014161515156132e85760006000fd5b6132f8338361365963ffffffff16565b15156133045760006000fd5b61331633858585613a4a63ffffffff16565b5b5b505050565b60006000826050015163ffffffff161415801561335257504367ffffffffffffffff16826020015167ffffffffffffffff1611155b9050613359565b919050565b6000600061336a613fdc565b60008963ffffffff168a1415156133815760006000fd5b8863ffffffff16891415156133965760006000fd5b8761ffff16881415156133a95760006000fd5b6002888115156133b557fe5b049250600d8361ffff1611156133cc57600d925082505b6080604051908101604052808881526010014267ffffffffffffffff168152601001600067ffffffffffffffff1681526010018b63ffffffff1681526010018a63ffffffff168152601001600063ffffffff1681526010018461ffff1681526010018961ffff1681526010015091506001600c60005080548060010182816134549190614052565b9190906000526010600020905090600191828204019190066010025b85909190915060008201518160000160005090905560108201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060208201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060308201518160020160006101000a81548163ffffffff021916908363ffffffff16021790555060408201518160020160046101000a81548163ffffffff021916908363ffffffff16021790555060508201518160020160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600201600c6101000a81548161ffff021916908361ffff160217905550607082015181600201600e6101000a81548161ffff021916908361ffff16021790555050500390508063ffffffff16811415156135b85760006000fd5b7f355092523187d7f20a6cdccceeea14bc7c399e83c75232c899b1ab5753c1e8b5878784866030015163ffffffff16876040015163ffffffff16886000015160405180878782528160100152602001858152601001848152601001838152601001828152601001965050505050505060405180910390a161364460006000888885613a4a63ffffffff16565b80935061364c565b5050509695505050505050565b60008383600d600050600085815260100190815260100160002090506000508060010154905490911491901416905061368d565b9392505050565b8181600f600050600086815260100190815260100160002090506000508282909180600101839055555050505b505050565b600060005080600101549054339091149190141615156136e65760006000fd5b600660009054906101000a900460ff1615156137025760006000fd5b6000600660006101000a81548160ff0219169083151502179055505b5b5b565b60006000600060116000508060010154905463eac9d94c6000604051601001526040518163ffffffff166c010000000000000000000000000281526004016010604051808303816000888881813b151561377c5760006000fd5b5af1151561378a5760006000fd5b5050505060405180519060100150915081821415156137a95760006000fd5b6002828115156137b557fe5b0482019050662386f26fc100008110156137d657662386f26fc10000905080505b8092506137de565b505090565b600060006000600c600050858154811015156137fb57fe5b906000526010600020905090600191828204019190066010025b509150600c6000508481548110151561382a57fe5b906000526010600020905090600191828204019190066010025b50905061385982868387613b9c63ffffffff16565b9250613860565b505092915050565b60006000600c6000508381548110151561387e57fe5b906000526010600020905090600191828204019190066010025b509150600c600050848154811015156138ad57fe5b906000526010600020905090600191828204019190066010025b509050828160020160086101000a81548163ffffffff021916908363ffffffff1602179055506138fc82613e9963ffffffff16565b61390b81613e9963ffffffff16565b601060005060008581526010019081526010016000209050600050806000905560010160009055601060005060008481526010019081526010016000209050600050806000905560010160009055601860008181505480929190600101919050909055507fd7ecf8f5c809c3fff8976b62cd1c220e031c4645f79970544e6faec4b5d6a5e1600d600050600087815260100190815260100160002090506000508060010154905487878660010160089054906101000a900467ffffffffffffffff16604051808686825281601001526020018481526010018381526010018267ffffffffffffffff1681526010019550505050505060405180910390a15b50505050565b60008383600f6000506000858152601001908152601001600020905060005080600101549054909114919014169050613a43565b9392505050565b600e6000506000848482528160100152602001908152601001600020905060008181505480929190600101919050909055508282600d60005060008481526010019081526010016000209050600050828290918060010183905555505050600060008686909114919014161515613b3d57600e60005060008686825281601001526020019081526010016000209050600081815054809291906001900391905090905550601060005060008281526010019081526010016000209050600050806000905560010160009055600f600050600082815260100190815260100160002090506000508060009055600101600090555b7f27772adc63db07aae765b71eb2b533064fa781bd57457e1b138592d8198d09598686868686604051808686825281601001526020018484825281601001526020018281526010019550505050505060405180910390a15b5050505050565b600081841415613baf5760009050613dad565b818560020160009054906101000a900463ffffffff1663ffffffff161480613bf05750818560020160049054906101000a900463ffffffff1663ffffffff16145b15613bfe5760009050613dad565b838360020160009054906101000a900463ffffffff1663ffffffff161480613c3f5750838360020160049054906101000a900463ffffffff1663ffffffff16145b15613c4d5760009050613dad565b60008360020160009054906101000a900463ffffffff1663ffffffff161480613c90575060008560020160009054906101000a900463ffffffff1663ffffffff16145b15613c9e5760019050613dad565b8460020160009054906101000a900463ffffffff1663ffffffff168360020160009054906101000a900463ffffffff1663ffffffff161480613d1357508460020160049054906101000a900463ffffffff1663ffffffff168360020160009054906101000a900463ffffffff1663ffffffff16145b15613d215760009050613dad565b8460020160009054906101000a900463ffffffff1663ffffffff168360020160049054906101000a900463ffffffff1663ffffffff161480613d9657508460020160049054906101000a900463ffffffff1663ffffffff168360020160049054906101000a900463ffffffff1663ffffffff16145b15613da45760009050613dad565b60019050613dad565b949350505050565b60006000600060006000600d600050600087815260100190815260100160002090506000508060010154905493509350600d600050600088815260100190815260100160002090506000508060010154905491509150818185859091149190141680613e4857508383601060005060008a8152601001908152601001600020905060005080600101549054909114919014165b9450613e4f565b5050505092915050565b60006000826050015163ffffffff16148015613e8d57504367ffffffffffffffff16826020015167ffffffffffffffff1611155b9050613e94565b919050565b43600b60005054600760005083600201600c9054906101000a900461ffff1661ffff16600e81101515613ec857fe5b9090600491828204019190066004025b9054906101000a900463ffffffff1663ffffffff16811515613ef657fe5b04018160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600d81600201600c9054906101000a900461ffff1661ffff161015613f7557600181600201600c8282829054906101000a900461ffff160192506101000a81548161ffff021916908361ffff1602179055505b5b50565b601060405190810160405280600081526010015090565b601060405190810160405280600081526010015090565b6080604051908101604052806004905b600060009060001916908252816010015260200190600190039081613fb75790505090565b60806040519081016040528060008152601001600067ffffffffffffffff168152601001600067ffffffffffffffff168152601001600063ffffffff168152601001600063ffffffff168152601001600063ffffffff168152601001600061ffff168152601001600061ffff1681526010015090565b8154818355818115116140815760030281600302836000526010600020905091820191016140809190614086565b5b505050565b6141579190614090565b8082111561415357600060008201600050600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556002820160006101000a81549063ffffffff02191690556002820160046101000a81549063ffffffff02191690556002820160086101000a81549063ffffffff021916905560028201600c6101000a81549061ffff021916905560028201600e6101000a81549061ffff021916905550600301614090565b5090565b905600a165627a7a723058205a41e86a51d82b3c7931ed02876f350497bda81536da3ef5301643203f2a362c0029";
    // generate bc bundle with pruning enabled
    StandaloneBlockchain.Bundle bundle = (new StandaloneBlockchain.Builder()).withValidatorConfiguration("simple").withDefaultAccounts().build();
    StandaloneBlockchain blockchain = bundle.bc;
    final ECKey sender = bundle.privateKeys.get(0);
    AionTransaction contractDeploymentTx = AionTransaction.create(sender, BigInteger.ZERO.toByteArray(), null, BigInteger.ZERO.toByteArray(), ByteUtil.hexStringToBytes(cryptoKittiesCode), 4699999L, energyPrice, TransactionTypes.DEFAULT, null);
    MiningBlock block = blockchain.createNewMiningBlock(blockchain.getGenesis(), Arrays.asList(contractDeploymentTx), true);
    Pair<ImportResult, AionBlockSummary> connectResult = blockchain.tryToConnectAndFetchSummary(block);
    AionTxReceipt receipt = connectResult.getRight().getReceipts().get(0);
    assertThat(connectResult.getLeft()).isEqualTo(ImportResult.IMPORTED_BEST);
    assertThat(receipt.isSuccessful()).isTrue();
    // ensure the contract information was saved
    ContractInformation ci = blockchain.getRepository().getIndexedContractInformation(TxUtil.calculateContractAddress(contractDeploymentTx));
    assertThat(ci).isNotNull();
    byte[] codeHash = blockchain.getRepository().getAccountState(TxUtil.calculateContractAddress(contractDeploymentTx)).getCodeHash();
    assertThat(ci.getInceptionBlocks(codeHash)).contains(block.getHashWrapper());
    assertThat(ci.getVmUsed(codeHash)).isEqualTo(InternalVmType.FVM);
    assertThat(ci.isComplete(codeHash, block.getHash())).isEqualTo(true);
}
Also used : ImportResult(org.aion.zero.impl.core.ImportResult) ECKey(org.aion.crypto.ECKey) AionTransaction(org.aion.base.AionTransaction) MiningBlock(org.aion.zero.impl.types.MiningBlock) ContractInformation(org.aion.zero.impl.db.ContractInformation) AionBlockSummary(org.aion.zero.impl.types.AionBlockSummary) AionTxReceipt(org.aion.base.AionTxReceipt) Test(org.junit.Test)

Aggregations

AionTxReceipt (org.aion.base.AionTxReceipt)4 ImportResult (org.aion.zero.impl.core.ImportResult)4 ContractInformation (org.aion.zero.impl.db.ContractInformation)4 AionBlockSummary (org.aion.zero.impl.types.AionBlockSummary)4 Test (org.junit.Test)4 AionAddress (org.aion.types.AionAddress)3 BigInteger (java.math.BigInteger)2 AccountState (org.aion.base.AccountState)2 AionTransaction (org.aion.base.AionTransaction)2 ECKey (org.aion.crypto.ECKey)2 StandaloneBlockchain (org.aion.zero.impl.blockchain.StandaloneBlockchain)2 Builder (org.aion.zero.impl.blockchain.StandaloneBlockchain.Builder)2 Block (org.aion.zero.impl.types.Block)2 MiningBlock (org.aion.zero.impl.types.MiningBlock)2 IAvmResourceFactory (org.aion.avm.stub.IAvmResourceFactory)1 InternalTransaction (org.aion.types.InternalTransaction)1 MiningBlockHeader (org.aion.zero.impl.types.MiningBlockHeader)1 TestResourceProvider (org.aion.zero.impl.vm.TestResourceProvider)1