From 308ef27454837e12aadee8a409ccee1e956ca7a1 Mon Sep 17 00:00:00 2001 From: Gabriel Fukushima Date: Tue, 26 Mar 2024 19:54:10 +1000 Subject: [PATCH] Pedersen hasher to use new jni methods (#50) Signed-off-by: Gabriel Fukushima --- .../trie/verkle/hasher/PedersenHasher.java | 11 +-- .../trie/verkle/TrieKeyAdapterTest.java | 23 ++--- src/test/resources/contractCode.json | 90 +++++++++---------- 3 files changed, 63 insertions(+), 61 deletions(-) diff --git a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/hasher/PedersenHasher.java b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/hasher/PedersenHasher.java index cce24e57..6a5af468 100644 --- a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/hasher/PedersenHasher.java +++ b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/hasher/PedersenHasher.java @@ -60,7 +60,7 @@ public Bytes commit(Bytes32[] inputs) { */ @Override public Bytes32 commitRoot(final Bytes32[] inputs) { - return Bytes32.wrap(LibIpaMultipoint.commitRoot(Bytes.concatenate(inputs).toArray())); + return Bytes32.wrap(LibIpaMultipoint.commitAsCompressed(Bytes.concatenate(inputs).toArray())); } /** @@ -69,7 +69,7 @@ public Bytes32 commitRoot(final Bytes32[] inputs) { */ @Override public Bytes32 groupToField(Bytes input) { - return Bytes32.wrap(LibIpaMultipoint.groupToField(input.toArray())); + return Bytes32.wrap(LibIpaMultipoint.hash(input.toArray())); } /** @@ -104,13 +104,14 @@ public Bytes32 trieKeyHash(Bytes address, Bytes32 index) { chunks[i + 1] = Bytes32.rightPad(chunk); } - final Bytes hashBE = - Bytes.wrap(LibIpaMultipoint.commitRoot(Bytes.concatenate(chunks).toArray())); + final Bytes hash = + Bytes.wrap( + LibIpaMultipoint.hash(LibIpaMultipoint.commit(Bytes.concatenate(chunks).toArray()))); // commitRoot returns the hash in big endian format, so we reverse it to get it // in little endian // format. When we migrate to using `groupToField`, this reverse will not be // needed. - return Bytes32.wrap(hashBE.reverse()); + return Bytes32.wrap(hash); } } diff --git a/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/TrieKeyAdapterTest.java b/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/TrieKeyAdapterTest.java index 5280bb3a..fb5bc179 100644 --- a/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/TrieKeyAdapterTest.java +++ b/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/TrieKeyAdapterTest.java @@ -43,7 +43,7 @@ public void testStorageKey() { UInt256 storageKey = UInt256.valueOf(32); // Need to change this once commit is fixed Bytes32 expected = - Bytes32.fromHexString("0xc224b9edaff18b27ce2604ad0f33a162d19840fd25290436dedcce42ad15d260"); + Bytes32.fromHexString("0x46b95e4e504b92d984c91d6f17eba4b60b904fb370818f0b6e74bc3ae5034460"); assertThat(adapter.storageKey(address, storageKey)).isEqualTo(expected); } @@ -51,7 +51,7 @@ public void testStorageKey() { public void testStorageKeyForMainStorage() { UInt256 storageKey = UInt256.valueOf(64); Bytes32 expected = - Bytes32.fromHexString("0x22f146f007e60a6a8781a35e7181f02a71fddfaec78a4adce111374a5f61af40"); + Bytes32.fromHexString("0x6127e4b0c266bee72914ce7261d0e4595c414c1ef439d9b0eb7d13cda5dc7640"); assertThat(adapter.storageKey(address, storageKey)).isEqualTo(expected); } @@ -60,7 +60,7 @@ public void testCodeChunkKey() { UInt256 chunkId = UInt256.valueOf(24); // Need to change this once commit is fixed Bytes32 expected = - Bytes32.fromHexString("0xc224b9edaff18b27ce2604ad0f33a162d19840fd25290436dedcce42ad15d298"); + Bytes32.fromHexString("0x46b95e4e504b92d984c91d6f17eba4b60b904fb370818f0b6e74bc3ae5034498"); assertThat(adapter.codeChunkKey(address, chunkId)).isEqualTo(expected); } @@ -70,7 +70,7 @@ public void testCodeChunkKey2() { UInt256 chunkId = UInt256.fromHexString("0x0000000000000000000000000000000000000000000000000000000000000080"); Bytes32 expected = - Bytes32.fromHexString("0x07361aa490296db032a91d3a5a69d3c3ef0e477baf8fced7f6775e4739614200"); + Bytes32.fromHexString("0x64465862f6244f410f93da62f24f4219a6e99fc3d0ad603da813b4be8e5c9500"); assertThat(adapter.codeChunkKey(addr, chunkId)).isEqualTo(expected); } @@ -78,7 +78,7 @@ public void testCodeChunkKey2() { public void testVersionKey() { // Need to change this once commit is fixed Bytes32 expected = - Bytes32.fromHexString("0xc224b9edaff18b27ce2604ad0f33a162d19840fd25290436dedcce42ad15d200"); + Bytes32.fromHexString("0x46b95e4e504b92d984c91d6f17eba4b60b904fb370818f0b6e74bc3ae5034400"); assertThat(adapter.versionKey(address)).isEqualTo(expected); } @@ -86,7 +86,7 @@ public void testVersionKey() { public void testBalanceKey() { // Need to change this once commit is fixed Bytes32 expected = - Bytes32.fromHexString("0xc224b9edaff18b27ce2604ad0f33a162d19840fd25290436dedcce42ad15d201"); + Bytes32.fromHexString("0x46b95e4e504b92d984c91d6f17eba4b60b904fb370818f0b6e74bc3ae5034401"); assertThat(adapter.balanceKey(address)).isEqualTo(expected); } @@ -94,7 +94,7 @@ public void testBalanceKey() { public void testNonceKey() { // Need to change this once commit is fixed Bytes32 expected = - Bytes32.fromHexString("0xc224b9edaff18b27ce2604ad0f33a162d19840fd25290436dedcce42ad15d202"); + Bytes32.fromHexString("0x46b95e4e504b92d984c91d6f17eba4b60b904fb370818f0b6e74bc3ae5034402"); assertThat(adapter.nonceKey(address)).isEqualTo(expected); } @@ -102,7 +102,7 @@ public void testNonceKey() { public void testCodeKeccakKey() { // Need to change this once commit is fixed Bytes32 expected = - Bytes32.fromHexString("0xc224b9edaff18b27ce2604ad0f33a162d19840fd25290436dedcce42ad15d203"); + Bytes32.fromHexString("0x46b95e4e504b92d984c91d6f17eba4b60b904fb370818f0b6e74bc3ae5034403"); assertThat(adapter.codeKeccakKey(address)).isEqualTo(expected); } @@ -110,7 +110,7 @@ public void testCodeKeccakKey() { public void testCodeSizeKey() { // Need to change this once commit is fixed Bytes32 expected = - Bytes32.fromHexString("0xc224b9edaff18b27ce2604ad0f33a162d19840fd25290436dedcce42ad15d204"); + Bytes32.fromHexString("0x46b95e4e504b92d984c91d6f17eba4b60b904fb370818f0b6e74bc3ae5034404"); assertThat(adapter.codeSizeKey(address)).isEqualTo(expected); } @@ -121,7 +121,8 @@ public static List JsonChunkifyData() throws IOException { return objectMapper.readValue(inputStream, new TypeReference>() {}); } - public static List JsonContractCodeDataWithPush32On31Byte() throws IOException { + public static List JsonContractCodeDataWithPush32On31stByte() + throws IOException { InputStream inputStream = TrieKeyAdapterTest.class.getResourceAsStream("/chukifyCodePush32on31stByte.json"); return objectMapper.readValue(inputStream, new TypeReference>() {}); @@ -133,7 +134,7 @@ static class TestChunkifyData { } @ParameterizedTest - @MethodSource({"JsonChunkifyData", "JsonContractCodeDataWithPush32On31Byte"}) + @MethodSource({"JsonChunkifyData", "JsonContractCodeDataWithPush32On31stByte"}) public void TestChunkifyCode(TestChunkifyData testData) { Bytes bytecode = Bytes.fromHexString(testData.bytecode); List result = adapter.chunkifyCode(bytecode); diff --git a/src/test/resources/contractCode.json b/src/test/resources/contractCode.json index 2c18edc4..f7af72b8 100644 --- a/src/test/resources/contractCode.json +++ b/src/test/resources/contractCode.json @@ -3,51 +3,51 @@ "address": "0x2a97e18168654393a573599759104efdfec6d8bd", "bytecode": "0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c80632e64cec1146100385780636057361d14610056575b5f80fd5b610040610072565b60405161004d919061029a565b60405180910390f35b610070600480360381019061006b91906102e1565b61019c565b005b5f8060405161008090610275565b604051809103905ff080158015610099573d5f803e3d5ffd5b5090505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e64cec16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610107573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061012b9190610320565b90508173ffffffffffffffffffffffffffffffffffffffff16636057361d826040518263ffffffff1660e01b8152600401610166919061029a565b5f604051808303815f87803b15801561017d575f80fd5b505af115801561018f573d5f803e3d5ffd5b505050505f549250505090565b805f819055505f6040516101af90610275565b604051809103905ff0801580156101c8573d5f803e3d5ffd5b5090508073ffffffffffffffffffffffffffffffffffffffff16636057361d836040518263ffffffff1660e01b8152600401610204919061029a565b5f604051808303815f87803b15801561021b575f80fd5b505af115801561022d573d5f803e3d5ffd5b505050508060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6101e38061034c83390190565b5f819050919050565b61029481610282565b82525050565b5f6020820190506102ad5f83018461028b565b92915050565b5f80fd5b6102c081610282565b81146102ca575f80fd5b50565b5f813590506102db816102b7565b92915050565b5f602082840312156102f6576102f56102b3565b5b5f610303848285016102cd565b91505092915050565b5f8151905061031a816102b7565b92915050565b5f60208284031215610335576103346102b3565b5b5f6103428482850161030c565b9150509291505056fe608060405234801561000f575f80fd5b506101c68061001d5f395ff3fe60806040526004361061003e575f3560e01c80632711432d146100425780632e64cec11461006c5780636057361d14610096578063d64c8ca4146100be575b5f80fd5b34801561004d575f80fd5b506100566100c8565b604051610063919061011e565b60405180910390f35b348015610077575f80fd5b506100806100d1565b60405161008d919061011e565b60405180910390f35b3480156100a1575f80fd5b506100bc60048036038101906100b79190610165565b6100d9565b005b6100c66100e9565b005b5f600154905090565b5f8054905090565b805f819055508060018190555050565b5f3390508073ffffffffffffffffffffffffffffffffffffffff16ff5b5f819050919050565b61011881610106565b82525050565b5f6020820190506101315f83018461010f565b92915050565b5f80fd5b61014481610106565b811461014e575f80fd5b50565b5f8135905061015f8161013b565b92915050565b5f6020828403121561017a57610179610137565b5b5f61018784828501610151565b9150509291505056fea2646970667358221220dc349a9524617af5742ac60346440c0d09b175e4d9c4d95e378a9652cb9acbb064736f6c63430008160033a264697066735822122079744fe4f745783dffcec2415a6b99b8b7b340bcf4a768d5563f00d2ec1f916b64736f6c63430008160033", "chunks": [ - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b80", "value":"0x00608060405234801561000f575f80fd5b5060043610610034575f3560e01c80"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b81", "value":"0x00632e64cec1146100385780636057361d14610056575b5f80fd5b6100406100"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b82", "value":"0x0172565b60405161004d919061029a565b60405180910390f35b610070600480"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b83", "value":"0x00360381019061006b91906102e1565b61019c565b005b5f8060405161008090"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b84", "value":"0x00610275565b604051809103905ff080158015610099573d5f803e3d5ffd5b50"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b85", "value":"0x0090505f60015f9054906101000a900473ffffffffffffffffffffffffffffff"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b86", "value":"0x05ffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e64"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b87", "value":"0x02cec16040518163ffffffff1660e01b8152600401602060405180830381865a"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b88", "value":"0x00fa158015610107573d5f803e3d5ffd5b505050506040513d601f19601f8201"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b89", "value":"0x00168201806040525081019061012b9190610320565b90508173ffffffffffff"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b8a", "value":"0x0effffffffffffffffffffffffffff16636057361d826040518263ffffffff16"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b8b", "value":"0x0060e01b8152600401610166919061029a565b5f604051808303815f87803b15"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b8c", "value":"0x00801561017d575f80fd5b505af115801561018f573d5f803e3d5ffd5b505050"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b8d", "value":"0x00505f549250505090565b805f819055505f6040516101af90610275565b6040"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b8e", "value":"0x0051809103905ff0801580156101c8573d5f803e3d5ffd5b5090508073ffffff"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b8f", "value":"0x11ffffffffffffffffffffffffffffffffff16636057361d836040518263ffff"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b90", "value":"0x02ffff1660e01b8152600401610204919061029a565b5f604051808303815f87"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b91", "value":"0x00803b15801561021b575f80fd5b505af115801561022d573d5f803e3d5ffd5b"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b92", "value":"0x00505050508060015f6101000a81548173ffffffffffffffffffffffffffffff"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b93", "value":"0x05ffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b94", "value":"0x001602179055505050565b6101e38061034c83390190565b5f81905091905056"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b95", "value":"0x005b61029481610282565b82525050565b5f6020820190506102ad5f83018461"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b96", "value":"0x02028b565b92915050565b5f80fd5b6102c081610282565b81146102ca575f80"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b97", "value":"0x00fd5b50565b5f813590506102db816102b7565b92915050565b5f6020828403"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b98", "value":"0x0012156102f6576102f56102b3565b5b5f610303848285016102cd565b915050"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b99", "value":"0x0092915050565b5f8151905061031a816102b7565b92915050565b5f60208284"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b9a", "value":"0x00031215610335576103346102b3565b5b5f6103428482850161030c565b9150"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b9b", "value":"0x00509291505056fe608060405234801561000f575f80fd5b506101c68061001d"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b9c", "value":"0x005f395ff3fe60806040526004361061003e575f3560e01c80632711432d1461"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b9d", "value":"0x0200425780632e64cec11461006c5780636057361d14610096578063d64c8ca4"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b9e", "value":"0x00146100be575b5f80fd5b34801561004d575f80fd5b506100566100c8565b60"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09b9f", "value":"0x014051610063919061011e565b60405180910390f35b348015610077575f80fd"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09ba0", "value":"0x005b506100806100d1565b60405161008d919061011e565b60405180910390f3"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09ba1", "value":"0x005b3480156100a1575f80fd5b506100bc60048036038101906100b791906101"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09ba2", "value":"0x0165565b6100d9565b005b6100c66100e9565b005b5f600154905090565b5f80"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09ba3", "value":"0x0054905090565b805f819055508060018190555050565b5f3390508073ffffff"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09ba4", "value":"0x11ffffffffffffffffffffffffffffffffff16ff5b5f819050919050565b6101"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09ba5", "value":"0x011881610106565b82525050565b5f6020820190506101315f83018461010f56"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09ba6", "value":"0x005b92915050565b5f80fd5b61014481610106565b811461014e575f80fd5b50"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09ba7", "value":"0x00565b5f8135905061015f8161013b565b92915050565b5f6020828403121561"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09ba8", "value":"0x02017a57610179610137565b5b5f61018784828501610151565b915050929150"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09ba9", "value":"0x005056fea2646970667358221220dc349a9524617af5742ac60346440c0d09b1"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09baa", "value":"0x0c75e4d9c4d95e378a9652cb9acbb064736f6c63430008160033a26469706673"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09bab", "value":"0x015822122079744fe4f745783dffcec2415a6b99b8b7b340bcf4a768d5563f00"}, - {"key":"0xf0c7bf7821bc37c3074a1ea01bc6bf6d0d3f9d29c36b85be1b88a26472a09bac", "value":"0x00d2ec1f916b64736f6c63430008160033000000000000000000000000000000"} + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4180", "value":"0x00608060405234801561000f575f80fd5b5060043610610034575f3560e01c80"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4181", "value":"0x00632e64cec1146100385780636057361d14610056575b5f80fd5b6100406100"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4182", "value":"0x0172565b60405161004d919061029a565b60405180910390f35b610070600480"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4183", "value":"0x00360381019061006b91906102e1565b61019c565b005b5f8060405161008090"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4184", "value":"0x00610275565b604051809103905ff080158015610099573d5f803e3d5ffd5b50"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4185", "value":"0x0090505f60015f9054906101000a900473ffffffffffffffffffffffffffffff"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4186", "value":"0x05ffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e64"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4187", "value":"0x02cec16040518163ffffffff1660e01b8152600401602060405180830381865a"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4188", "value":"0x00fa158015610107573d5f803e3d5ffd5b505050506040513d601f19601f8201"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4189", "value":"0x00168201806040525081019061012b9190610320565b90508173ffffffffffff"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc418a", "value":"0x0effffffffffffffffffffffffffff16636057361d826040518263ffffffff16"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc418b", "value":"0x0060e01b8152600401610166919061029a565b5f604051808303815f87803b15"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc418c", "value":"0x00801561017d575f80fd5b505af115801561018f573d5f803e3d5ffd5b505050"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc418d", "value":"0x00505f549250505090565b805f819055505f6040516101af90610275565b6040"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc418e", "value":"0x0051809103905ff0801580156101c8573d5f803e3d5ffd5b5090508073ffffff"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc418f", "value":"0x11ffffffffffffffffffffffffffffffffff16636057361d836040518263ffff"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4190", "value":"0x02ffff1660e01b8152600401610204919061029a565b5f604051808303815f87"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4191", "value":"0x00803b15801561021b575f80fd5b505af115801561022d573d5f803e3d5ffd5b"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4192", "value":"0x00505050508060015f6101000a81548173ffffffffffffffffffffffffffffff"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4193", "value":"0x05ffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4194", "value":"0x001602179055505050565b6101e38061034c83390190565b5f81905091905056"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4195", "value":"0x005b61029481610282565b82525050565b5f6020820190506102ad5f83018461"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4196", "value":"0x02028b565b92915050565b5f80fd5b6102c081610282565b81146102ca575f80"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4197", "value":"0x00fd5b50565b5f813590506102db816102b7565b92915050565b5f6020828403"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4198", "value":"0x0012156102f6576102f56102b3565b5b5f610303848285016102cd565b915050"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc4199", "value":"0x0092915050565b5f8151905061031a816102b7565b92915050565b5f60208284"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc419a", "value":"0x00031215610335576103346102b3565b5b5f6103428482850161030c565b9150"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc419b", "value":"0x00509291505056fe608060405234801561000f575f80fd5b506101c68061001d"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc419c", "value":"0x005f395ff3fe60806040526004361061003e575f3560e01c80632711432d1461"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc419d", "value":"0x0200425780632e64cec11461006c5780636057361d14610096578063d64c8ca4"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc419e", "value":"0x00146100be575b5f80fd5b34801561004d575f80fd5b506100566100c8565b60"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc419f", "value":"0x014051610063919061011e565b60405180910390f35b348015610077575f80fd"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc41a0", "value":"0x005b506100806100d1565b60405161008d919061011e565b60405180910390f3"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc41a1", "value":"0x005b3480156100a1575f80fd5b506100bc60048036038101906100b791906101"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc41a2", "value":"0x0165565b6100d9565b005b6100c66100e9565b005b5f600154905090565b5f80"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc41a3", "value":"0x0054905090565b805f819055508060018190555050565b5f3390508073ffffff"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc41a4", "value":"0x11ffffffffffffffffffffffffffffffffff16ff5b5f819050919050565b6101"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc41a5", "value":"0x011881610106565b82525050565b5f6020820190506101315f83018461010f56"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc41a6", "value":"0x005b92915050565b5f80fd5b61014481610106565b811461014e575f80fd5b50"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc41a7", "value":"0x00565b5f8135905061015f8161013b565b92915050565b5f6020828403121561"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc41a8", "value":"0x02017a57610179610137565b5b5f61018784828501610151565b915050929150"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc41a9", "value":"0x005056fea2646970667358221220dc349a9524617af5742ac60346440c0d09b1"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc41aa", "value":"0x0c75e4d9c4d95e378a9652cb9acbb064736f6c63430008160033a26469706673"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc41ab", "value":"0x015822122079744fe4f745783dffcec2415a6b99b8b7b340bcf4a768d5563f00"}, + {"key":"0x765706eb7be12fbac9465219190dfd4296a054c1ce6c57682070cdd309bc41ac", "value":"0x00d2ec1f916b64736f6c63430008160033000000000000000000000000000000"} ] } ] \ No newline at end of file