From 591ec669d3cb57d963a46899b7c84401410e2081 Mon Sep 17 00:00:00 2001 From: Diego Essaya Date: Wed, 14 Jan 2026 15:47:24 -0300 Subject: [PATCH] eth_call: fix timestamp & block number --- .../chainmanager/msg_block_produced_test.go | 2 +- .../gpa/messages/block_message_test.go | 2 +- packages/chainutil/evmcall.go | 6 ++-- packages/chainutil/vm_test.go | 13 +++++++- packages/database/manager_test.go | 4 --- packages/evm/evmtest/ERC20Basic.bin | 2 +- packages/evm/evmtest/ERC20Basic.bin-runtime | 2 +- packages/evm/evmtest/ERC20Coin.bin | 2 +- packages/evm/evmtest/EndlessLoop.bin | 2 +- packages/evm/evmtest/Fibonacci.bin | 2 +- packages/evm/evmtest/GasTestExecutionTime.bin | 2 +- packages/evm/evmtest/GasTestMemory.bin | 2 +- packages/evm/evmtest/GasTestStorage.bin | 2 +- packages/evm/evmtest/ISCTest.abi | 2 +- packages/evm/evmtest/ISCTest.bin | 2 +- packages/evm/evmtest/ISCTest.sol | 4 +++ packages/evm/evmtest/RevertTest.bin | 2 +- packages/evm/evmtest/SelfDestruct6780.bin | 2 +- packages/evm/evmtest/Storage.bin | 2 +- .../evm/evmtest/wiki_how_tos/ERC20Coin.bin | 2 +- packages/evm/evmtest/wiki_how_tos/Entropy.bin | 2 +- .../evm/evmtest/wiki_how_tos/GetBalance.bin | 2 +- packages/evm/jsonrpc/chainbackend.go | 8 ++++- packages/evm/jsonrpc/evmchain.go | 15 +++++++++- .../evm/jsonrpc/jsonrpctest/jsonrpc_test.go | 30 +++++++++++++++++++ packages/origin/origin.go | 13 ++++---- packages/solo/evm.go | 10 ++++++- packages/solo/run.go | 2 ++ packages/solo/solo.go | 1 + packages/state/state_rapid_test.go | 10 +++---- packages/state/state_test.go | 2 +- packages/state/statedraft.go | 19 ++++++++++-- packages/vm/core/blocklog/impl.go | 8 ++--- packages/vm/core/evm/emulator/emulator.go | 8 +++-- packages/vm/core/evm/evmtest/evm_test.go | 7 +---- .../core/evm/iscmagic/ERC20Coin.bin-runtime | 2 +- packages/vm/core/testcore/blocklog_test.go | 10 ++++--- packages/webapi/services/waspevmbackend.go | 10 ++++++- tools/cluster/cluster.go | 1 - 39 files changed, 153 insertions(+), 66 deletions(-) diff --git a/packages/chain/chainmanager/msg_block_produced_test.go b/packages/chain/chainmanager/msg_block_produced_test.go index 66b37e5240..947b827b71 100644 --- a/packages/chain/chainmanager/msg_block_produced_test.go +++ b/packages/chain/chainmanager/msg_block_produced_test.go @@ -28,7 +28,7 @@ func TestMsgBlockProducedSerialization(t *testing.T) { statetest.TestBlock(), } - bcs.TestCodecAndHash(t, msg, "6b906810f98b", &msgBlockProduced{ + bcs.TestCodecAndHash(t, msg, "5e2ca0997270", &msgBlockProduced{ block: state.NewBlock(), }) } diff --git a/packages/chain/statemanager/gpa/messages/block_message_test.go b/packages/chain/statemanager/gpa/messages/block_message_test.go index 58ee878dfd..f14f3a65b5 100644 --- a/packages/chain/statemanager/gpa/messages/block_message_test.go +++ b/packages/chain/statemanager/gpa/messages/block_message_test.go @@ -30,5 +30,5 @@ func TestSerializationBlockMessage(t *testing.T) { bcs.TestCodecAndHash(t, &BlockMessage{ gpa.BasicMessage{}, statetest.TestBlock(), - }, "453dabc9e5e2") + }, "779ec025bd8b") } diff --git a/packages/chainutil/evmcall.go b/packages/chainutil/evmcall.go index 2594807e34..bf443500bf 100644 --- a/packages/chainutil/evmcall.go +++ b/packages/chainutil/evmcall.go @@ -23,6 +23,8 @@ func EVMCall( store indexedstore.IndexedStore, processors *processors.Config, log log.Logger, + blockTime time.Time, + entropy hashing.HashValue, call ethereum.CallMsg, ) ([]byte, error) { latestState, err := store.LatestState() @@ -48,8 +50,8 @@ func EVMCall( store, processors, log, - time.Now(), - hashing.PseudoRandomHash(nil), + blockTime, + entropy, iscReq, true, ) diff --git a/packages/chainutil/vm_test.go b/packages/chainutil/vm_test.go index 90bf9e00b2..40cadeabc5 100644 --- a/packages/chainutil/vm_test.go +++ b/packages/chainutil/vm_test.go @@ -6,6 +6,7 @@ import ( "fmt" "math/big" "testing" + "time" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" @@ -15,6 +16,7 @@ import ( "github.com/iotaledger/wasp/v2/clients/iscmove" "github.com/iotaledger/wasp/v2/packages/chainutil" "github.com/iotaledger/wasp/v2/packages/cryptolib" + "github.com/iotaledger/wasp/v2/packages/hashing" "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/kvstore/mapdb" "github.com/iotaledger/wasp/v2/packages/origin" @@ -103,7 +105,16 @@ func TestEVMCall(t *testing.T) { logger := testlogger.NewLogger(t) - result, err := chainutil.EVMCall(anchor, parameterstest.L1Mock, store, coreprocessors.NewConfig(), logger, msg) + result, err := chainutil.EVMCall( + anchor, + parameterstest.L1Mock, + store, + coreprocessors.NewConfig(), + logger, + time.Now(), + hashing.PseudoRandomHash(nil), + msg, + ) if err != nil { t.Fatalf("failed to call EVM: %v", err) } diff --git a/packages/database/manager_test.go b/packages/database/manager_test.go index 2ef2cf6b83..5a26da1ad5 100644 --- a/packages/database/manager_test.go +++ b/packages/database/manager_test.go @@ -14,10 +14,8 @@ import ( hivedb "github.com/iotaledger/hive.go/db" "github.com/iotaledger/wasp/v2/packages/kvstore" - "github.com/iotaledger/wasp/v2/packages/isc/coreutil" "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/kv" - "github.com/iotaledger/wasp/v2/packages/kv/codec" "github.com/iotaledger/wasp/v2/packages/registry" "github.com/iotaledger/wasp/v2/packages/state" ) @@ -78,8 +76,6 @@ func TestWriteAmplification(t *testing.T) { require.NotNil(t, chainStore) originSD := chainStore.NewOriginStateDraft() - originSD.Set(kv.Key(coreutil.StatePrefixBlockIndex), codec.Encode[uint32](uint32(0))) - originSD.Set(kv.Key(coreutil.StatePrefixTimestamp), codec.Encode[time.Time](time.Unix(0, 0))) originBlock, _, _ := lo.Must3(chainStore.Commit(originSD)) require.NotNil(t, originBlock) diff --git a/packages/evm/evmtest/ERC20Basic.bin b/packages/evm/evmtest/ERC20Basic.bin index f0696c416a..e2e71f0f9f 100644 --- a/packages/evm/evmtest/ERC20Basic.bin +++ b/packages/evm/evmtest/ERC20Basic.bin @@ -1 +1 @@ -608060405234801561000f575f5ffd5b506040516113c43803806113c483398181016040528101906100319190610272565b815f908161003f91906104f8565b50806001908161004f91906104f8565b50601260ff16600a6100619190610723565b606461006d919061076d565b60048190555060045460025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405161011691906107bd565b60405180910390a350506107d6565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6101848261013e565b810181811067ffffffffffffffff821117156101a3576101a261014e565b5b80604052505050565b5f6101b5610125565b90506101c1828261017b565b919050565b5f67ffffffffffffffff8211156101e0576101df61014e565b5b6101e98261013e565b9050602081019050919050565b8281835e5f83830152505050565b5f610216610211846101c6565b6101ac565b9050828152602081018484840111156102325761023161013a565b5b61023d8482856101f6565b509392505050565b5f82601f83011261025957610258610136565b5b8151610269848260208601610204565b91505092915050565b5f5f604083850312156102885761028761012e565b5b5f83015167ffffffffffffffff8111156102a5576102a4610132565b5b6102b185828601610245565b925050602083015167ffffffffffffffff8111156102d2576102d1610132565b5b6102de85828601610245565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061033657607f821691505b602082108103610349576103486102f2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610370565b6103b58683610370565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6103f96103f46103ef846103cd565b6103d6565b6103cd565b9050919050565b5f819050919050565b610412836103df565b61042661041e82610400565b84845461037c565b825550505050565b5f5f905090565b61043d61042e565b610448818484610409565b505050565b5b8181101561046b576104605f82610435565b60018101905061044e565b5050565b601f8211156104b0576104818161034f565b61048a84610361565b81016020851015610499578190505b6104ad6104a585610361565b83018261044d565b50505b505050565b5f82821c905092915050565b5f6104d05f19846008026104b5565b1980831691505092915050565b5f6104e883836104c1565b9150826002028217905092915050565b610501826102e8565b67ffffffffffffffff81111561051a5761051961014e565b5b610524825461031f565b61052f82828561046f565b5f60209050601f831160018114610560575f841561054e578287015190505b61055885826104dd565b8655506105bf565b601f19841661056e8661034f565b5f5b8281101561059557848901518255600182019150602085019450602081019050610570565b868310156105b257848901516105ae601f8916826104c1565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b600185111561064957808604811115610625576106246105c7565b5b60018516156106345780820291505b8081029050610642856105f4565b9450610609565b94509492505050565b5f82610661576001905061071c565b8161066e575f905061071c565b8160018114610684576002811461068e576106bd565b600191505061071c565b60ff8411156106a05761069f6105c7565b5b8360020a9150848211156106b7576106b66105c7565b5b5061071c565b5060208310610133831016604e8410600b84101617156106f25782820a9050838111156106ed576106ec6105c7565b5b61071c565b6106ff8484846001610600565b92509050818404811115610716576107156105c7565b5b81810290505b9392505050565b5f61072d826103cd565b9150610738836103cd565b92506107657fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610652565b905092915050565b5f610777826103cd565b9150610782836103cd565b9250828202610790816103cd565b915082820484148315176107a7576107a66105c7565b5b5092915050565b6107b7816103cd565b82525050565b5f6020820190506107d05f8301846107ae565b92915050565b610be1806107e35f395ff3fe608060405234801561000f575f5ffd5b506004361061007b575f3560e01c8063313ce56711610059578063313ce567146100fd57806370a082311461011b578063a9059cbb1461014b578063dd62ed3e1461017b5761007b565b8063095ea7b31461007f57806318160ddd146100af57806323b872dd146100cd575b5f5ffd5b61009960048036038101906100949190610965565b6101ab565b6040516100a691906109bd565b60405180910390f35b6100b7610298565b6040516100c491906109e5565b60405180910390f35b6100e760048036038101906100e291906109fe565b6102a1565b6040516100f491906109bd565b60405180910390f35b6101056105ed565b6040516101129190610a69565b60405180910390f35b61013560048036038101906101309190610a82565b6105f2565b60405161014291906109e5565b60405180910390f35b61016560048036038101906101609190610965565b610638565b60405161017291906109bd565b60405180910390f35b61019560048036038101906101909190610aad565b610801565b6040516101a291906109e5565b60405180910390f35b5f8160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161028691906109e5565b60405180910390a36001905092915050565b5f600454905090565b5f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548211156102eb575f5ffd5b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482111561036f575f5ffd5b6103b660025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061047960035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061053c60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105da91906109e5565b60405180910390a3600190509392505050565b601281565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054821115610682575f5ffd5b6106c960025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061075160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107ef91906109e5565b60405180910390a36001905092915050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8282111561089557610894610aeb565b5b81836108a19190610b45565b905092915050565b5f5f82846108b79190610b78565b9050838110156108ca576108c9610aeb565b5b8091505092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610901826108d8565b9050919050565b610911816108f7565b811461091b575f5ffd5b50565b5f8135905061092c81610908565b92915050565b5f819050919050565b61094481610932565b811461094e575f5ffd5b50565b5f8135905061095f8161093b565b92915050565b5f5f6040838503121561097b5761097a6108d4565b5b5f6109888582860161091e565b925050602061099985828601610951565b9150509250929050565b5f8115159050919050565b6109b7816109a3565b82525050565b5f6020820190506109d05f8301846109ae565b92915050565b6109df81610932565b82525050565b5f6020820190506109f85f8301846109d6565b92915050565b5f5f5f60608486031215610a1557610a146108d4565b5b5f610a228682870161091e565b9350506020610a338682870161091e565b9250506040610a4486828701610951565b9150509250925092565b5f60ff82169050919050565b610a6381610a4e565b82525050565b5f602082019050610a7c5f830184610a5a565b92915050565b5f60208284031215610a9757610a966108d4565b5b5f610aa48482850161091e565b91505092915050565b5f5f60408385031215610ac357610ac26108d4565b5b5f610ad08582860161091e565b9250506020610ae18582860161091e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610b4f82610932565b9150610b5a83610932565b9250828203905081811115610b7257610b71610b18565b5b92915050565b5f610b8282610932565b9150610b8d83610932565b9250828201905080821115610ba557610ba4610b18565b5b9291505056fea264697066735822122077c2254d3d11ad67825c7f5380fff46610c8f17ad1452f01c6bc23eacec6ce9664736f6c634300081d0033 \ No newline at end of file +608060405234801561000f575f5ffd5b506040516113d53803806113d583398181016040528101906100319190610272565b815f908161003f9190610509565b50806001908161004f9190610509565b50601260ff16600a6100619190610734565b606461006d919061077e565b60048190555060045460025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405161011691906107ce565b60405180910390a350506107e7565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6101848261013e565b810181811067ffffffffffffffff821117156101a3576101a261014e565b5b80604052505050565b5f6101b5610125565b90506101c1828261017b565b919050565b5f67ffffffffffffffff8211156101e0576101df61014e565b5b6101e98261013e565b9050602081019050919050565b8281835e5f83830152505050565b5f610216610211846101c6565b6101ac565b9050828152602081018484840111156102325761023161013a565b5b61023d8482856101f6565b509392505050565b5f82601f83011261025957610258610136565b5b8151610269848260208601610204565b91505092915050565b5f5f604083850312156102885761028761012e565b5b5f83015167ffffffffffffffff8111156102a5576102a4610132565b5b6102b185828601610245565b925050602083015167ffffffffffffffff8111156102d2576102d1610132565b5b6102de85828601610245565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061033657607f821691505b602082108103610349576103486102f2565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610370565b6103b58683610370565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6103f96103f46103ef846103cd565b6103d6565b6103cd565b9050919050565b5f819050919050565b610412836103df565b61042661041e82610400565b84845461037c565b825550505050565b5f5f905090565b61043d61042e565b610448818484610409565b505050565b5f5b8281101561046e576104635f828401610435565b60018101905061044f565b505050565b601f8211156104c157828211156104c05761048d8161034f565b61049683610361565b61049f85610361565b60208610156104ac575f90505b8083016104bb8284038261044d565b505050505b5b505050565b5f82821c905092915050565b5f6104e15f19846008026104c6565b1980831691505092915050565b5f6104f983836104d2565b9150826002028217905092915050565b610512826102e8565b67ffffffffffffffff81111561052b5761052a61014e565b5b610535825461031f565b610540828285610473565b5f60209050601f831160018114610571575f841561055f578287015190505b61056985826104ee565b8655506105d0565b601f19841661057f8661034f565b5f5b828110156105a657848901518255600182019150602085019450602081019050610581565b868310156105c357848901516105bf601f8916826104d2565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b600185111561065a57808604811115610636576106356105d8565b5b60018516156106455780820291505b808102905061065385610605565b945061061a565b94509492505050565b5f82610672576001905061072d565b8161067f575f905061072d565b8160018114610695576002811461069f576106ce565b600191505061072d565b60ff8411156106b1576106b06105d8565b5b8360020a9150848211156106c8576106c76105d8565b5b5061072d565b5060208310610133831016604e8410600b84101617156107035782820a9050838111156106fe576106fd6105d8565b5b61072d565b6107108484846001610611565b92509050818404811115610727576107266105d8565b5b81810290505b9392505050565b5f61073e826103cd565b9150610749836103cd565b92506107767fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610663565b905092915050565b5f610788826103cd565b9150610793836103cd565b92508282026107a1816103cd565b915082820484148315176107b8576107b76105d8565b5b5092915050565b6107c8816103cd565b82525050565b5f6020820190506107e15f8301846107bf565b92915050565b610be1806107f45f395ff3fe608060405234801561000f575f5ffd5b506004361061007b575f3560e01c8063313ce56711610059578063313ce567146100fd57806370a082311461011b578063a9059cbb1461014b578063dd62ed3e1461017b5761007b565b8063095ea7b31461007f57806318160ddd146100af57806323b872dd146100cd575b5f5ffd5b61009960048036038101906100949190610965565b6101ab565b6040516100a691906109bd565b60405180910390f35b6100b7610298565b6040516100c491906109e5565b60405180910390f35b6100e760048036038101906100e291906109fe565b6102a1565b6040516100f491906109bd565b60405180910390f35b6101056105ed565b6040516101129190610a69565b60405180910390f35b61013560048036038101906101309190610a82565b6105f2565b60405161014291906109e5565b60405180910390f35b61016560048036038101906101609190610965565b610638565b60405161017291906109bd565b60405180910390f35b61019560048036038101906101909190610aad565b610801565b6040516101a291906109e5565b60405180910390f35b5f8160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161028691906109e5565b60405180910390a36001905092915050565b5f600454905090565b5f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548211156102eb575f5ffd5b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482111561036f575f5ffd5b6103b660025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061047960035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061053c60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105da91906109e5565b60405180910390a3600190509392505050565b601281565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054821115610682575f5ffd5b6106c960025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061075160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107ef91906109e5565b60405180910390a36001905092915050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8282111561089557610894610aeb565b5b81836108a19190610b45565b905092915050565b5f5f82846108b79190610b78565b9050838110156108ca576108c9610aeb565b5b8091505092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610901826108d8565b9050919050565b610911816108f7565b811461091b575f5ffd5b50565b5f8135905061092c81610908565b92915050565b5f819050919050565b61094481610932565b811461094e575f5ffd5b50565b5f8135905061095f8161093b565b92915050565b5f5f6040838503121561097b5761097a6108d4565b5b5f6109888582860161091e565b925050602061099985828601610951565b9150509250929050565b5f8115159050919050565b6109b7816109a3565b82525050565b5f6020820190506109d05f8301846109ae565b92915050565b6109df81610932565b82525050565b5f6020820190506109f85f8301846109d6565b92915050565b5f5f5f60608486031215610a1557610a146108d4565b5b5f610a228682870161091e565b9350506020610a338682870161091e565b9250506040610a4486828701610951565b9150509250925092565b5f60ff82169050919050565b610a6381610a4e565b82525050565b5f602082019050610a7c5f830184610a5a565b92915050565b5f60208284031215610a9757610a966108d4565b5b5f610aa48482850161091e565b91505092915050565b5f5f60408385031215610ac357610ac26108d4565b5b5f610ad08582860161091e565b9250506020610ae18582860161091e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610b4f82610932565b9150610b5a83610932565b9250828203905081811115610b7257610b71610b18565b5b92915050565b5f610b8282610932565b9150610b8d83610932565b9250828201905080821115610ba557610ba4610b18565b5b9291505056fea26469706673582212203994e4e4ee9e88b7aa7ddc1cf2bdb6cd3f8e4a4373871f7e1c235aa946bb7d3564736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/ERC20Basic.bin-runtime b/packages/evm/evmtest/ERC20Basic.bin-runtime index 72f2d39d1e..17e37aeac0 100644 --- a/packages/evm/evmtest/ERC20Basic.bin-runtime +++ b/packages/evm/evmtest/ERC20Basic.bin-runtime @@ -1 +1 @@ -608060405234801561000f575f5ffd5b506004361061007b575f3560e01c8063313ce56711610059578063313ce567146100fd57806370a082311461011b578063a9059cbb1461014b578063dd62ed3e1461017b5761007b565b8063095ea7b31461007f57806318160ddd146100af57806323b872dd146100cd575b5f5ffd5b61009960048036038101906100949190610965565b6101ab565b6040516100a691906109bd565b60405180910390f35b6100b7610298565b6040516100c491906109e5565b60405180910390f35b6100e760048036038101906100e291906109fe565b6102a1565b6040516100f491906109bd565b60405180910390f35b6101056105ed565b6040516101129190610a69565b60405180910390f35b61013560048036038101906101309190610a82565b6105f2565b60405161014291906109e5565b60405180910390f35b61016560048036038101906101609190610965565b610638565b60405161017291906109bd565b60405180910390f35b61019560048036038101906101909190610aad565b610801565b6040516101a291906109e5565b60405180910390f35b5f8160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161028691906109e5565b60405180910390a36001905092915050565b5f600454905090565b5f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548211156102eb575f5ffd5b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482111561036f575f5ffd5b6103b660025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061047960035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061053c60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105da91906109e5565b60405180910390a3600190509392505050565b601281565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054821115610682575f5ffd5b6106c960025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061075160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107ef91906109e5565b60405180910390a36001905092915050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8282111561089557610894610aeb565b5b81836108a19190610b45565b905092915050565b5f5f82846108b79190610b78565b9050838110156108ca576108c9610aeb565b5b8091505092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610901826108d8565b9050919050565b610911816108f7565b811461091b575f5ffd5b50565b5f8135905061092c81610908565b92915050565b5f819050919050565b61094481610932565b811461094e575f5ffd5b50565b5f8135905061095f8161093b565b92915050565b5f5f6040838503121561097b5761097a6108d4565b5b5f6109888582860161091e565b925050602061099985828601610951565b9150509250929050565b5f8115159050919050565b6109b7816109a3565b82525050565b5f6020820190506109d05f8301846109ae565b92915050565b6109df81610932565b82525050565b5f6020820190506109f85f8301846109d6565b92915050565b5f5f5f60608486031215610a1557610a146108d4565b5b5f610a228682870161091e565b9350506020610a338682870161091e565b9250506040610a4486828701610951565b9150509250925092565b5f60ff82169050919050565b610a6381610a4e565b82525050565b5f602082019050610a7c5f830184610a5a565b92915050565b5f60208284031215610a9757610a966108d4565b5b5f610aa48482850161091e565b91505092915050565b5f5f60408385031215610ac357610ac26108d4565b5b5f610ad08582860161091e565b9250506020610ae18582860161091e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610b4f82610932565b9150610b5a83610932565b9250828203905081811115610b7257610b71610b18565b5b92915050565b5f610b8282610932565b9150610b8d83610932565b9250828201905080821115610ba557610ba4610b18565b5b9291505056fea264697066735822122077c2254d3d11ad67825c7f5380fff46610c8f17ad1452f01c6bc23eacec6ce9664736f6c634300081d0033 \ No newline at end of file +608060405234801561000f575f5ffd5b506004361061007b575f3560e01c8063313ce56711610059578063313ce567146100fd57806370a082311461011b578063a9059cbb1461014b578063dd62ed3e1461017b5761007b565b8063095ea7b31461007f57806318160ddd146100af57806323b872dd146100cd575b5f5ffd5b61009960048036038101906100949190610965565b6101ab565b6040516100a691906109bd565b60405180910390f35b6100b7610298565b6040516100c491906109e5565b60405180910390f35b6100e760048036038101906100e291906109fe565b6102a1565b6040516100f491906109bd565b60405180910390f35b6101056105ed565b6040516101129190610a69565b60405180910390f35b61013560048036038101906101309190610a82565b6105f2565b60405161014291906109e5565b60405180910390f35b61016560048036038101906101609190610965565b610638565b60405161017291906109bd565b60405180910390f35b61019560048036038101906101909190610aad565b610801565b6040516101a291906109e5565b60405180910390f35b5f8160035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161028691906109e5565b60405180910390a36001905092915050565b5f600454905090565b5f60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548211156102eb575f5ffd5b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482111561036f575f5ffd5b6103b660025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061047960035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061053c60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105da91906109e5565b60405180910390a3600190509392505050565b601281565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054821115610682575f5ffd5b6106c960025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205483610883565b60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061075160025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054836108a9565b60025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107ef91906109e5565b60405180910390a36001905092915050565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f8282111561089557610894610aeb565b5b81836108a19190610b45565b905092915050565b5f5f82846108b79190610b78565b9050838110156108ca576108c9610aeb565b5b8091505092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610901826108d8565b9050919050565b610911816108f7565b811461091b575f5ffd5b50565b5f8135905061092c81610908565b92915050565b5f819050919050565b61094481610932565b811461094e575f5ffd5b50565b5f8135905061095f8161093b565b92915050565b5f5f6040838503121561097b5761097a6108d4565b5b5f6109888582860161091e565b925050602061099985828601610951565b9150509250929050565b5f8115159050919050565b6109b7816109a3565b82525050565b5f6020820190506109d05f8301846109ae565b92915050565b6109df81610932565b82525050565b5f6020820190506109f85f8301846109d6565b92915050565b5f5f5f60608486031215610a1557610a146108d4565b5b5f610a228682870161091e565b9350506020610a338682870161091e565b9250506040610a4486828701610951565b9150509250925092565b5f60ff82169050919050565b610a6381610a4e565b82525050565b5f602082019050610a7c5f830184610a5a565b92915050565b5f60208284031215610a9757610a966108d4565b5b5f610aa48482850161091e565b91505092915050565b5f5f60408385031215610ac357610ac26108d4565b5b5f610ad08582860161091e565b9250506020610ae18582860161091e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610b4f82610932565b9150610b5a83610932565b9250828203905081811115610b7257610b71610b18565b5b92915050565b5f610b8282610932565b9150610b8d83610932565b9250828201905080821115610ba557610ba4610b18565b5b9291505056fea26469706673582212203994e4e4ee9e88b7aa7ddc1cf2bdb6cd3f8e4a4373871f7e1c235aa946bb7d3564736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/ERC20Coin.bin b/packages/evm/evmtest/ERC20Coin.bin index 396d570c45..818432f0e0 100644 --- a/packages/evm/evmtest/ERC20Coin.bin +++ b/packages/evm/evmtest/ERC20Coin.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b506120148061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f5ffd5b61009d6101fd565b6040516100aa919061104e565b60405180910390f35b6100cd60048036038101906100c8919061110c565b61028d565b6040516100da9190611164565b60405180910390f35b6100eb6103ca565b6040516100f8919061118c565b60405180910390f35b61011b600480360381019061011691906111a5565b61046d565b6040516101289190611164565b60405180910390f35b6101396107a9565b6040516101469190611210565b60405180910390f35b61016960048036038101906101649190611229565b6107be565b604051610176919061118c565b60405180910390f35b61018761086b565b604051610194919061104e565b60405180910390f35b6101b760048036038101906101b2919061110c565b6108fb565b6040516101c49190611164565b60405180910390f35b6101e760048036038101906101e29190611254565b610b84565b6040516101f4919061118c565b60405180910390f35b60606001805461020c906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610238906112bf565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f67ffffffffffffffff80168211156102db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d290611339565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636df2519733855f866040518563ffffffff1660e01b815260040161032e949392919061141b565b5f604051808303815f87803b158015610345575f5ffd5b505af1158015610357573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103b8919061118c565b60405180910390a36001905092915050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e12214005f6040518263ffffffff1660e01b81526004016104189190611465565b5f60405180830381865afa158015610432573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061045a919061173c565b60c0015167ffffffffffffffff16905090565b5f67ffffffffffffffff80168211156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611339565b60405180910390fd5b6104c3610f8e565b600167ffffffffffffffff8111156104de576104dd611489565b5b60405190808252806020026020018201604052801561051757816020015b610504610fa8565b8152602001906001900390816104fc5790505b50815f01819052505f805461052b906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610557906112bf565b80156105a25780601f10610579576101008083540402835291602001916105a2565b820191905f5260205f20905b81548152906001019060200180831161058557829003601f168201915b5050505050815f01515f815181106105bd576105bc611783565b5b60200260200101515f018190525082815f01515f815181106105e2576105e1611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633865d9818633846040518463ffffffff1660e01b815260040161065993929190611a5b565b5f604051808303815f87803b158015610670575f5ffd5b505af1158015610682573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107385773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b815260040161070a93929190611a5b565b5f604051808303815f87803b158015610721575f5ffd5b505af1158015610733573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610795919061118c565b60405180910390a360019150509392505050565b5f60035f9054906101000a900460ff16905090565b5f5f6107c983610cc9565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c5f836040518363ffffffff1660e01b815260040161081a929190611b10565b602060405180830381865afa158015610835573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108599190611b45565b67ffffffffffffffff16915050919050565b60606002805461087a906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906112bf565b80156108f15780601f106108c8576101008083540402835291602001916108f1565b820191905f5260205f20905b8154815290600101906020018083116108d457829003601f168201915b5050505050905090565b5f67ffffffffffffffff8016821115610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611339565b60405180910390fd5b610951610f8e565b600167ffffffffffffffff81111561096c5761096b611489565b5b6040519080825280602002602001820160405280156109a557816020015b610992610fa8565b81526020019060019003908161098a5790505b50815f01819052505f80546109b9906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546109e5906112bf565b8015610a305780601f10610a0757610100808354040283529160200191610a30565b820191905f5260205f20905b815481529060010190602001808311610a1357829003601f168201915b5050505050815f01515f81518110610a4b57610a4a611783565b5b60200260200101515f018190525082815f01515f81518110610a7057610a6f611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b8152600401610ae793929190611a5b565b5f604051808303815f87803b158015610afe575f5ffd5b505af1158015610b10573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b71919061118c565b60405180910390a3600191505092915050565b5f5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630af4187d85856040518363ffffffff1660e01b8152600401610bd5929190611b70565b5f60405180830381865afa158015610bef573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c179190611ed8565b9050610cb65f8054610c28906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c54906112bf565b8015610c9f5780601f10610c7657610100808354040283529160200191610c9f565b820191905f5260205f20905b815481529060010190602001808311610c8257829003601f168201915b5050505050825f0151610e3a90919063ffffffff16565b67ffffffffffffffff1691505092915050565b610cd1610fcb565b5f82604051602001610ce39190611f64565b6040516020818303038152906040529050610cfc610fcb565b81516001610d0a9190611fab565b67ffffffffffffffff811115610d2357610d22611489565b5b6040519080825280601f01601f191660200182016040528015610d555781602001600182028036833780820191505090505b50815f0181905250600360f81b815f01515f81518110610d7857610d77611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b8251811015610e2f57828181518110610dc757610dc6611783565b5b602001015160f81c60f81b825f0151600183610de39190611fab565b81518110610df457610df3611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610dab565b508092505050919050565b5f5f5f90505b8351811015610ea957610e70848281518110610e5f57610e5e611783565b5b60200260200101515f015184610eb4565b15610e9c57838181518110610e8857610e87611783565b5b602002602001015160200151915050610eae565b8080600101915050610e40565b505f90505b92915050565b5f610ebf8383610ec7565b905092915050565b5f8151835114610ed9575f9050610f88565b5f5f90505b8351811015610f8257828181518110610efa57610ef9611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110610f3a57610f39611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f75575f915050610f88565b8080600101915050610ede565b50600190505b92915050565b604051806040016040528060608152602001606081525090565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b6040518060200160405280606081525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61102082610fde565b61102a8185610fe8565b935061103a818560208601610ff8565b61104381611006565b840191505092915050565b5f6020820190508181035f8301526110668184611016565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a88261107f565b9050919050565b6110b88161109e565b81146110c2575f5ffd5b50565b5f813590506110d3816110af565b92915050565b5f819050919050565b6110eb816110d9565b81146110f5575f5ffd5b50565b5f81359050611106816110e2565b92915050565b5f5f6040838503121561112257611121611077565b5b5f61112f858286016110c5565b9250506020611140858286016110f8565b9150509250929050565b5f8115159050919050565b61115e8161114a565b82525050565b5f6020820190506111775f830184611155565b92915050565b611186816110d9565b82525050565b5f60208201905061119f5f83018461117d565b92915050565b5f5f5f606084860312156111bc576111bb611077565b5b5f6111c9868287016110c5565b93505060206111da868287016110c5565b92505060406111eb868287016110f8565b9150509250925092565b5f60ff82169050919050565b61120a816111f5565b82525050565b5f6020820190506112235f830184611201565b92915050565b5f6020828403121561123e5761123d611077565b5b5f61124b848285016110c5565b91505092915050565b5f5f6040838503121561126a57611269611077565b5b5f611277858286016110c5565b9250506020611288858286016110c5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112d657607f821691505b6020821081036112e9576112e8611292565b5b50919050565b7f616d6f756e7420697320746f6f206c61726765000000000000000000000000005f82015250565b5f611323601383610fe8565b915061132e826112ef565b602082019050919050565b5f6020820190508181035f83015261135081611317565b9050919050565b6113608161109e565b82525050565b5f819050815f5260205f209050919050565b5f8154611384816112bf565b61138e8186610fe8565b9450600182165f81146113a857600181146113be576113f0565b60ff1983168652811515602002860193506113f0565b6113c785611366565b5f5b838110156113e8578154818901526001820191506020810190506113c9565b808801955050505b50505092915050565b5f67ffffffffffffffff82169050919050565b611415816113f9565b82525050565b5f60808201905061142e5f830187611357565b61143b6020830186611357565b818103604083015261144d8185611378565b905061145c606083018461140c565b95945050505050565b5f6020820190508181035f83015261147d8184611378565b905092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114bf82611006565b810181811067ffffffffffffffff821117156114de576114dd611489565b5b80604052505050565b5f6114f061106e565b90506114fc82826114b6565b919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561152757611526611489565b5b61153082611006565b9050602081019050919050565b5f61154f61154a8461150d565b6114e7565b90508281526020810184848401111561156b5761156a611509565b5b611576848285610ff8565b509392505050565b5f82601f83011261159257611591611505565b5b81516115a284826020860161153d565b91505092915050565b6115b4816111f5565b81146115be575f5ffd5b50565b5f815190506115cf816115ab565b92915050565b6115de816113f9565b81146115e8575f5ffd5b50565b5f815190506115f9816115d5565b92915050565b5f60e0828403121561161457611613611485565b5b61161e60e06114e7565b90505f82015167ffffffffffffffff81111561163d5761163c611501565b5b6116498482850161157e565b5f83015250602061165c848285016115c1565b602083015250604082015167ffffffffffffffff8111156116805761167f611501565b5b61168c8482850161157e565b604083015250606082015167ffffffffffffffff8111156116b0576116af611501565b5b6116bc8482850161157e565b606083015250608082015167ffffffffffffffff8111156116e0576116df611501565b5b6116ec8482850161157e565b60808301525060a082015167ffffffffffffffff8111156117105761170f611501565b5b61171c8482850161157e565b60a08301525060c0611730848285016115eb565b60c08301525092915050565b5f6020828403121561175157611750611077565b5b5f82015167ffffffffffffffff81111561176e5761176d61107b565b5b61177a848285016115ff565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6117f382610fde565b6117fd81856117d9565b935061180d818560208601610ff8565b61181681611006565b840191505092915050565b61182a816113f9565b82525050565b5f604083015f8301518482035f86015261184a82826117e9565b915050602083015161185f6020860182611821565b508091505092915050565b5f6118758383611830565b905092915050565b5f602082019050919050565b5f611893826117b0565b61189d81856117ba565b9350836020820285016118af856117ca565b805f5b858110156118ea57848403895281516118cb858261186a565b94506118d68361187d565b925060208a019950506001810190506118b2565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f61193882611925565b9050919050565b6119488161192e565b82525050565b5f604083015f8301516119635f86018261193f565b506020830151848203602086015261197b82826117e9565b9150508091505092915050565b5f611993838361194e565b905092915050565b5f602082019050919050565b5f6119b1826118fc565b6119bb8185611906565b9350836020820285016119cd85611916565b805f5b85811015611a0857848403895281516119e98582611988565b94506119f48361199b565b925060208a019950506001810190506119d0565b50829750879550505050505092915050565b5f604083015f8301518482035f860152611a348282611889565b91505060208301518482036020860152611a4e82826119a7565b9150508091505092915050565b5f606082019050611a6e5f830186611357565b611a7b6020830185611357565b8181036040830152611a8d8184611a1a565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f611abb82611a97565b611ac58185611aa1565b9350611ad5818560208601610ff8565b611ade81611006565b840191505092915050565b5f602083015f8301518482035f860152611b038282611ab1565b9150508091505092915050565b5f6040820190508181035f830152611b288185611378565b90508181036020830152611b3c8184611ae9565b90509392505050565b5f60208284031215611b5a57611b59611077565b5b5f611b67848285016115eb565b91505092915050565b5f604082019050611b835f830185611357565b611b906020830184611357565b9392505050565b5f67ffffffffffffffff821115611bb157611bb0611489565b5b602082029050602081019050919050565b5f5ffd5b5f60408284031215611bdb57611bda611485565b5b611be560406114e7565b90505f82015167ffffffffffffffff811115611c0457611c03611501565b5b611c108482850161157e565b5f830152506020611c23848285016115eb565b60208301525092915050565b5f611c41611c3c84611b97565b6114e7565b90508083825260208201905060208402830185811115611c6457611c63611bc2565b5b835b81811015611cab57805167ffffffffffffffff811115611c8957611c88611505565b5b808601611c968982611bc6565b85526020850194505050602081019050611c66565b5050509392505050565b5f82601f830112611cc957611cc8611505565b5b8151611cd9848260208601611c2f565b91505092915050565b5f67ffffffffffffffff821115611cfc57611cfb611489565b5b602082029050602081019050919050565b611d1681611925565b8114611d20575f5ffd5b50565b5f81519050611d3181611d0d565b92915050565b5f60408284031215611d4c57611d4b611485565b5b611d5660406114e7565b90505f611d6584828501611d23565b5f83015250602082015167ffffffffffffffff811115611d8857611d87611501565b5b611d948482850161157e565b60208301525092915050565b5f611db2611dad84611ce2565b6114e7565b90508083825260208201905060208402830185811115611dd557611dd4611bc2565b5b835b81811015611e1c57805167ffffffffffffffff811115611dfa57611df9611505565b5b808601611e078982611d37565b85526020850194505050602081019050611dd7565b5050509392505050565b5f82601f830112611e3a57611e39611505565b5b8151611e4a848260208601611da0565b91505092915050565b5f60408284031215611e6857611e67611485565b5b611e7260406114e7565b90505f82015167ffffffffffffffff811115611e9157611e90611501565b5b611e9d84828501611cb5565b5f83015250602082015167ffffffffffffffff811115611ec057611ebf611501565b5b611ecc84828501611e26565b60208301525092915050565b5f60208284031215611eed57611eec611077565b5b5f82015167ffffffffffffffff811115611f0a57611f0961107b565b5b611f1684828501611e53565b91505092915050565b5f8160601b9050919050565b5f611f3582611f1f565b9050919050565b5f611f4682611f2b565b9050919050565b611f5e611f598261109e565b611f3c565b82525050565b5f611f6f8284611f4d565b60148201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fb5826110d9565b9150611fc0836110d9565b9250828201905080821115611fd857611fd7611f7e565b5b9291505056fea26469706673582212203a7cd319511f44764131658a92a2dc4f3f729fd4eff3700fdb7d8f8a8b81f14f64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b506120148061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f5ffd5b61009d6101fd565b6040516100aa919061104e565b60405180910390f35b6100cd60048036038101906100c8919061110c565b61028d565b6040516100da9190611164565b60405180910390f35b6100eb6103ca565b6040516100f8919061118c565b60405180910390f35b61011b600480360381019061011691906111a5565b61046d565b6040516101289190611164565b60405180910390f35b6101396107a9565b6040516101469190611210565b60405180910390f35b61016960048036038101906101649190611229565b6107be565b604051610176919061118c565b60405180910390f35b61018761086b565b604051610194919061104e565b60405180910390f35b6101b760048036038101906101b2919061110c565b6108fb565b6040516101c49190611164565b60405180910390f35b6101e760048036038101906101e29190611254565b610b84565b6040516101f4919061118c565b60405180910390f35b60606001805461020c906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610238906112bf565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f67ffffffffffffffff80168211156102db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d290611339565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636df2519733855f866040518563ffffffff1660e01b815260040161032e949392919061141b565b5f604051808303815f87803b158015610345575f5ffd5b505af1158015610357573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103b8919061118c565b60405180910390a36001905092915050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e12214005f6040518263ffffffff1660e01b81526004016104189190611465565b5f60405180830381865afa158015610432573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061045a919061173c565b60c0015167ffffffffffffffff16905090565b5f67ffffffffffffffff80168211156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611339565b60405180910390fd5b6104c3610f8e565b600167ffffffffffffffff8111156104de576104dd611489565b5b60405190808252806020026020018201604052801561051757816020015b610504610fa8565b8152602001906001900390816104fc5790505b50815f01819052505f805461052b906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610557906112bf565b80156105a25780601f10610579576101008083540402835291602001916105a2565b820191905f5260205f20905b81548152906001019060200180831161058557829003601f168201915b5050505050815f01515f815181106105bd576105bc611783565b5b60200260200101515f018190525082815f01515f815181106105e2576105e1611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633865d9818633846040518463ffffffff1660e01b815260040161065993929190611a5b565b5f604051808303815f87803b158015610670575f5ffd5b505af1158015610682573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107385773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b815260040161070a93929190611a5b565b5f604051808303815f87803b158015610721575f5ffd5b505af1158015610733573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610795919061118c565b60405180910390a360019150509392505050565b5f60035f9054906101000a900460ff16905090565b5f5f6107c983610cc9565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c5f836040518363ffffffff1660e01b815260040161081a929190611b10565b602060405180830381865afa158015610835573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108599190611b45565b67ffffffffffffffff16915050919050565b60606002805461087a906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906112bf565b80156108f15780601f106108c8576101008083540402835291602001916108f1565b820191905f5260205f20905b8154815290600101906020018083116108d457829003601f168201915b5050505050905090565b5f67ffffffffffffffff8016821115610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611339565b60405180910390fd5b610951610f8e565b600167ffffffffffffffff81111561096c5761096b611489565b5b6040519080825280602002602001820160405280156109a557816020015b610992610fa8565b81526020019060019003908161098a5790505b50815f01819052505f80546109b9906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546109e5906112bf565b8015610a305780601f10610a0757610100808354040283529160200191610a30565b820191905f5260205f20905b815481529060010190602001808311610a1357829003601f168201915b5050505050815f01515f81518110610a4b57610a4a611783565b5b60200260200101515f018190525082815f01515f81518110610a7057610a6f611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b8152600401610ae793929190611a5b565b5f604051808303815f87803b158015610afe575f5ffd5b505af1158015610b10573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b71919061118c565b60405180910390a3600191505092915050565b5f5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630af4187d85856040518363ffffffff1660e01b8152600401610bd5929190611b70565b5f60405180830381865afa158015610bef573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c179190611ed8565b9050610cb65f8054610c28906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c54906112bf565b8015610c9f5780601f10610c7657610100808354040283529160200191610c9f565b820191905f5260205f20905b815481529060010190602001808311610c8257829003601f168201915b5050505050825f0151610e3a90919063ffffffff16565b67ffffffffffffffff1691505092915050565b610cd1610fcb565b5f82604051602001610ce39190611f64565b6040516020818303038152906040529050610cfc610fcb565b81516001610d0a9190611fab565b67ffffffffffffffff811115610d2357610d22611489565b5b6040519080825280601f01601f191660200182016040528015610d555781602001600182028036833780820191505090505b50815f0181905250600360f81b815f01515f81518110610d7857610d77611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b8251811015610e2f57828181518110610dc757610dc6611783565b5b602001015160f81c60f81b825f0151600183610de39190611fab565b81518110610df457610df3611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610dab565b508092505050919050565b5f5f5f90505b8351811015610ea957610e70848281518110610e5f57610e5e611783565b5b60200260200101515f015184610eb4565b15610e9c57838181518110610e8857610e87611783565b5b602002602001015160200151915050610eae565b8080600101915050610e40565b505f90505b92915050565b5f610ebf8383610ec7565b905092915050565b5f8151835114610ed9575f9050610f88565b5f5f90505b8351811015610f8257828181518110610efa57610ef9611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110610f3a57610f39611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f75575f915050610f88565b8080600101915050610ede565b50600190505b92915050565b604051806040016040528060608152602001606081525090565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b6040518060200160405280606081525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61102082610fde565b61102a8185610fe8565b935061103a818560208601610ff8565b61104381611006565b840191505092915050565b5f6020820190508181035f8301526110668184611016565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a88261107f565b9050919050565b6110b88161109e565b81146110c2575f5ffd5b50565b5f813590506110d3816110af565b92915050565b5f819050919050565b6110eb816110d9565b81146110f5575f5ffd5b50565b5f81359050611106816110e2565b92915050565b5f5f6040838503121561112257611121611077565b5b5f61112f858286016110c5565b9250506020611140858286016110f8565b9150509250929050565b5f8115159050919050565b61115e8161114a565b82525050565b5f6020820190506111775f830184611155565b92915050565b611186816110d9565b82525050565b5f60208201905061119f5f83018461117d565b92915050565b5f5f5f606084860312156111bc576111bb611077565b5b5f6111c9868287016110c5565b93505060206111da868287016110c5565b92505060406111eb868287016110f8565b9150509250925092565b5f60ff82169050919050565b61120a816111f5565b82525050565b5f6020820190506112235f830184611201565b92915050565b5f6020828403121561123e5761123d611077565b5b5f61124b848285016110c5565b91505092915050565b5f5f6040838503121561126a57611269611077565b5b5f611277858286016110c5565b9250506020611288858286016110c5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112d657607f821691505b6020821081036112e9576112e8611292565b5b50919050565b7f616d6f756e7420697320746f6f206c61726765000000000000000000000000005f82015250565b5f611323601383610fe8565b915061132e826112ef565b602082019050919050565b5f6020820190508181035f83015261135081611317565b9050919050565b6113608161109e565b82525050565b5f819050815f5260205f209050919050565b5f8154611384816112bf565b61138e8186610fe8565b9450600182165f81146113a857600181146113be576113f0565b60ff1983168652811515602002860193506113f0565b6113c785611366565b5f5b838110156113e8578154818901526001820191506020810190506113c9565b808801955050505b50505092915050565b5f67ffffffffffffffff82169050919050565b611415816113f9565b82525050565b5f60808201905061142e5f830187611357565b61143b6020830186611357565b818103604083015261144d8185611378565b905061145c606083018461140c565b95945050505050565b5f6020820190508181035f83015261147d8184611378565b905092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114bf82611006565b810181811067ffffffffffffffff821117156114de576114dd611489565b5b80604052505050565b5f6114f061106e565b90506114fc82826114b6565b919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561152757611526611489565b5b61153082611006565b9050602081019050919050565b5f61154f61154a8461150d565b6114e7565b90508281526020810184848401111561156b5761156a611509565b5b611576848285610ff8565b509392505050565b5f82601f83011261159257611591611505565b5b81516115a284826020860161153d565b91505092915050565b6115b4816111f5565b81146115be575f5ffd5b50565b5f815190506115cf816115ab565b92915050565b6115de816113f9565b81146115e8575f5ffd5b50565b5f815190506115f9816115d5565b92915050565b5f60e0828403121561161457611613611485565b5b61161e60e06114e7565b90505f82015167ffffffffffffffff81111561163d5761163c611501565b5b6116498482850161157e565b5f83015250602061165c848285016115c1565b602083015250604082015167ffffffffffffffff8111156116805761167f611501565b5b61168c8482850161157e565b604083015250606082015167ffffffffffffffff8111156116b0576116af611501565b5b6116bc8482850161157e565b606083015250608082015167ffffffffffffffff8111156116e0576116df611501565b5b6116ec8482850161157e565b60808301525060a082015167ffffffffffffffff8111156117105761170f611501565b5b61171c8482850161157e565b60a08301525060c0611730848285016115eb565b60c08301525092915050565b5f6020828403121561175157611750611077565b5b5f82015167ffffffffffffffff81111561176e5761176d61107b565b5b61177a848285016115ff565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6117f382610fde565b6117fd81856117d9565b935061180d818560208601610ff8565b61181681611006565b840191505092915050565b61182a816113f9565b82525050565b5f604083015f8301518482035f86015261184a82826117e9565b915050602083015161185f6020860182611821565b508091505092915050565b5f6118758383611830565b905092915050565b5f602082019050919050565b5f611893826117b0565b61189d81856117ba565b9350836020820285016118af856117ca565b805f5b858110156118ea57848403895281516118cb858261186a565b94506118d68361187d565b925060208a019950506001810190506118b2565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f61193882611925565b9050919050565b6119488161192e565b82525050565b5f604083015f8301516119635f86018261193f565b506020830151848203602086015261197b82826117e9565b9150508091505092915050565b5f611993838361194e565b905092915050565b5f602082019050919050565b5f6119b1826118fc565b6119bb8185611906565b9350836020820285016119cd85611916565b805f5b85811015611a0857848403895281516119e98582611988565b94506119f48361199b565b925060208a019950506001810190506119d0565b50829750879550505050505092915050565b5f604083015f8301518482035f860152611a348282611889565b91505060208301518482036020860152611a4e82826119a7565b9150508091505092915050565b5f606082019050611a6e5f830186611357565b611a7b6020830185611357565b8181036040830152611a8d8184611a1a565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f611abb82611a97565b611ac58185611aa1565b9350611ad5818560208601610ff8565b611ade81611006565b840191505092915050565b5f602083015f8301518482035f860152611b038282611ab1565b9150508091505092915050565b5f6040820190508181035f830152611b288185611378565b90508181036020830152611b3c8184611ae9565b90509392505050565b5f60208284031215611b5a57611b59611077565b5b5f611b67848285016115eb565b91505092915050565b5f604082019050611b835f830185611357565b611b906020830184611357565b9392505050565b5f67ffffffffffffffff821115611bb157611bb0611489565b5b602082029050602081019050919050565b5f5ffd5b5f60408284031215611bdb57611bda611485565b5b611be560406114e7565b90505f82015167ffffffffffffffff811115611c0457611c03611501565b5b611c108482850161157e565b5f830152506020611c23848285016115eb565b60208301525092915050565b5f611c41611c3c84611b97565b6114e7565b90508083825260208201905060208402830185811115611c6457611c63611bc2565b5b835b81811015611cab57805167ffffffffffffffff811115611c8957611c88611505565b5b808601611c968982611bc6565b85526020850194505050602081019050611c66565b5050509392505050565b5f82601f830112611cc957611cc8611505565b5b8151611cd9848260208601611c2f565b91505092915050565b5f67ffffffffffffffff821115611cfc57611cfb611489565b5b602082029050602081019050919050565b611d1681611925565b8114611d20575f5ffd5b50565b5f81519050611d3181611d0d565b92915050565b5f60408284031215611d4c57611d4b611485565b5b611d5660406114e7565b90505f611d6584828501611d23565b5f83015250602082015167ffffffffffffffff811115611d8857611d87611501565b5b611d948482850161157e565b60208301525092915050565b5f611db2611dad84611ce2565b6114e7565b90508083825260208201905060208402830185811115611dd557611dd4611bc2565b5b835b81811015611e1c57805167ffffffffffffffff811115611dfa57611df9611505565b5b808601611e078982611d37565b85526020850194505050602081019050611dd7565b5050509392505050565b5f82601f830112611e3a57611e39611505565b5b8151611e4a848260208601611da0565b91505092915050565b5f60408284031215611e6857611e67611485565b5b611e7260406114e7565b90505f82015167ffffffffffffffff811115611e9157611e90611501565b5b611e9d84828501611cb5565b5f83015250602082015167ffffffffffffffff811115611ec057611ebf611501565b5b611ecc84828501611e26565b60208301525092915050565b5f60208284031215611eed57611eec611077565b5b5f82015167ffffffffffffffff811115611f0a57611f0961107b565b5b611f1684828501611e53565b91505092915050565b5f8160601b9050919050565b5f611f3582611f1f565b9050919050565b5f611f4682611f2b565b9050919050565b611f5e611f598261109e565b611f3c565b82525050565b5f611f6f8284611f4d565b60148201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fb5826110d9565b9150611fc0836110d9565b9250828201905080821115611fd857611fd7611f7e565b5b9291505056fea26469706673582212201ba50e725b8d2865265a7a1945ddeb884bf612a52f2c2e99f162f256f2e7a6be64736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/EndlessLoop.bin b/packages/evm/evmtest/EndlessLoop.bin index b01f264153..ba43c9f933 100644 --- a/packages/evm/evmtest/EndlessLoop.bin +++ b/packages/evm/evmtest/EndlessLoop.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b50607080601a5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063a92100cb14602a575b5f5ffd5b60306032565b005b5b600160335756fea264697066735822122057f701e6197aff242ae38db09a14a0cd87ac420a47264722fb0103e24529cc3d64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b50607080601a5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063a92100cb14602a575b5f5ffd5b60306032565b005b5b600160335756fea26469706673582212200c9c725237e0fd30334df068ecccb46d9a4bc23a7f9dbeb16c6ad83ea1cd87d264736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/Fibonacci.bin b/packages/evm/evmtest/Fibonacci.bin index b7180d21df..d97d1d409c 100644 --- a/packages/evm/evmtest/Fibonacci.bin +++ b/packages/evm/evmtest/Fibonacci.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b5061032e8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063f9b7c7e51461002d575b5f5ffd5b610047600480360381019061004291906101cb565b61005d565b6040516100549190610205565b60405180910390f35b5f60018263ffffffff161161007457819050610189565b3073ffffffffffffffffffffffffffffffffffffffff1663f9b7c7e560028461009d919061024b565b6040518263ffffffff1660e01b81526004016100b99190610205565b602060405180830381865afa1580156100d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100f89190610296565b3073ffffffffffffffffffffffffffffffffffffffff1663f9b7c7e5600185610121919061024b565b6040518263ffffffff1660e01b815260040161013d9190610205565b602060405180830381865afa158015610158573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017c9190610296565b61018691906102c1565b90505b919050565b5f5ffd5b5f63ffffffff82169050919050565b6101aa81610192565b81146101b4575f5ffd5b50565b5f813590506101c5816101a1565b92915050565b5f602082840312156101e0576101df61018e565b5b5f6101ed848285016101b7565b91505092915050565b6101ff81610192565b82525050565b5f6020820190506102185f8301846101f6565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61025582610192565b915061026083610192565b9250828203905063ffffffff81111561027c5761027b61021e565b5b92915050565b5f81519050610290816101a1565b92915050565b5f602082840312156102ab576102aa61018e565b5b5f6102b884828501610282565b91505092915050565b5f6102cb82610192565b91506102d683610192565b9250828201905063ffffffff8111156102f2576102f161021e565b5b9291505056fea2646970667358221220fb933601983faaff6b25f59ed82bcc13bf9432b8ddb1f0256ba6953518d6775664736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b5061032e8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063f9b7c7e51461002d575b5f5ffd5b610047600480360381019061004291906101cb565b61005d565b6040516100549190610205565b60405180910390f35b5f60018263ffffffff161161007457819050610189565b3073ffffffffffffffffffffffffffffffffffffffff1663f9b7c7e560028461009d919061024b565b6040518263ffffffff1660e01b81526004016100b99190610205565b602060405180830381865afa1580156100d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100f89190610296565b3073ffffffffffffffffffffffffffffffffffffffff1663f9b7c7e5600185610121919061024b565b6040518263ffffffff1660e01b815260040161013d9190610205565b602060405180830381865afa158015610158573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061017c9190610296565b61018691906102c1565b90505b919050565b5f5ffd5b5f63ffffffff82169050919050565b6101aa81610192565b81146101b4575f5ffd5b50565b5f813590506101c5816101a1565b92915050565b5f602082840312156101e0576101df61018e565b5b5f6101ed848285016101b7565b91505092915050565b6101ff81610192565b82525050565b5f6020820190506102185f8301846101f6565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61025582610192565b915061026083610192565b9250828203905063ffffffff81111561027c5761027b61021e565b5b92915050565b5f81519050610290816101a1565b92915050565b5f602082840312156102ab576102aa61018e565b5b5f6102b884828501610282565b91505092915050565b5f6102cb82610192565b91506102d683610192565b9250828201905063ffffffff8111156102f2576102f161021e565b5b9291505056fea26469706673582212204c96c7bb8e229f84aee9b96b4e7cd9f0bffa94a728f9a3a3c4fd3e1baf8e980964736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/GasTestExecutionTime.bin b/packages/evm/evmtest/GasTestExecutionTime.bin index c4333e974e..35a3202b27 100644 --- a/packages/evm/evmtest/GasTestExecutionTime.bin +++ b/packages/evm/evmtest/GasTestExecutionTime.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b5061028f8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063af4e6e521461002d575b5f5ffd5b61004760048036038101906100429190610109565b61005d565b6040516100549190610143565b60405180910390f35b5f5f5f90505f5f90505f5f90505b8463ffffffff168163ffffffff1610156100c15760018361008c9190610189565b9250600a8361009b91906101ed565b60036100a7919061021d565b826100b29190610189565b9150808060010191505061006b565b508092505050919050565b5f5ffd5b5f63ffffffff82169050919050565b6100e8816100d0565b81146100f2575f5ffd5b50565b5f81359050610103816100df565b92915050565b5f6020828403121561011e5761011d6100cc565b5b5f61012b848285016100f5565b91505092915050565b61013d816100d0565b82525050565b5f6020820190506101565f830184610134565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610193826100d0565b915061019e836100d0565b9250828201905063ffffffff8111156101ba576101b961015c565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6101f7826100d0565b9150610202836100d0565b925082610212576102116101c0565b5b828206905092915050565b5f610227826100d0565b9150610232836100d0565b9250828202610240816100d0565b91508082146102525761025161015c565b5b509291505056fea26469706673582212201e5290bedc9bfe6d341a4181313098c25b354409fbefc526c94ac18a556e4c4d64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b5061028f8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063af4e6e521461002d575b5f5ffd5b61004760048036038101906100429190610109565b61005d565b6040516100549190610143565b60405180910390f35b5f5f5f90505f5f90505f5f90505b8463ffffffff168163ffffffff1610156100c15760018361008c9190610189565b9250600a8361009b91906101ed565b60036100a7919061021d565b826100b29190610189565b9150808060010191505061006b565b508092505050919050565b5f5ffd5b5f63ffffffff82169050919050565b6100e8816100d0565b81146100f2575f5ffd5b50565b5f81359050610103816100df565b92915050565b5f6020828403121561011e5761011d6100cc565b5b5f61012b848285016100f5565b91505092915050565b61013d816100d0565b82525050565b5f6020820190506101565f830184610134565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610193826100d0565b915061019e836100d0565b9250828201905063ffffffff8111156101ba576101b961015c565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6101f7826100d0565b9150610202836100d0565b925082610212576102116101c0565b5b828206905092915050565b5f610227826100d0565b9150610232836100d0565b9250828202610240816100d0565b91508082146102525761025161015c565b5b509291505056fea264697066735822122008718d2e3e61401308ed01f65d1b07b34b6ab7a558b811fad6a90437d2dac69e64736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/GasTestMemory.bin b/packages/evm/evmtest/GasTestMemory.bin index ac9adf6a90..c93db980ae 100644 --- a/packages/evm/evmtest/GasTestMemory.bin +++ b/packages/evm/evmtest/GasTestMemory.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b506101f28061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063af4e6e521461002d575b5f5ffd5b61004760048036038101906100429190610137565b610049565b005b5f8163ffffffff1667ffffffffffffffff81111561006a57610069610162565b5b6040519080825280602002602001820160405280156100985781602001602082028036833780820191505090505b5090505f5f90505b8263ffffffff168163ffffffff1610156100f55780828263ffffffff16815181106100ce576100cd61018f565b5b602002602001019063ffffffff16908163ffffffff168152505080806001019150506100a0565b505050565b5f5ffd5b5f63ffffffff82169050919050565b610116816100fe565b8114610120575f5ffd5b50565b5f813590506101318161010d565b92915050565b5f6020828403121561014c5761014b6100fa565b5b5f61015984828501610123565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea26469706673582212205421c04bc8cafd5c6cc3de292443660446e0e8767863529d99903a75a543138e64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b506101f28061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063af4e6e521461002d575b5f5ffd5b61004760048036038101906100429190610137565b610049565b005b5f8163ffffffff1667ffffffffffffffff81111561006a57610069610162565b5b6040519080825280602002602001820160405280156100985781602001602082028036833780820191505090505b5090505f5f90505b8263ffffffff168163ffffffff1610156100f55780828263ffffffff16815181106100ce576100cd61018f565b5b602002602001019063ffffffff16908163ffffffff168152505080806001019150506100a0565b505050565b5f5ffd5b5f63ffffffff82169050919050565b610116816100fe565b8114610120575f5ffd5b50565b5f813590506101318161010d565b92915050565b5f6020828403121561014c5761014b6100fa565b5b5f61015984828501610123565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea2646970667358221220d88b840495c33029445582fef8f50c78f5e0262e389897904956829222aa9eeb64736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/GasTestStorage.bin b/packages/evm/evmtest/GasTestStorage.bin index c3833036e6..ea02e1ae7d 100644 --- a/packages/evm/evmtest/GasTestStorage.bin +++ b/packages/evm/evmtest/GasTestStorage.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b5061015c8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063af4e6e521461002d575b5f5ffd5b610047600480360381019061004291906100fb565b610049565b005b5f5f90505b8163ffffffff168163ffffffff1610156100ba575f81908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff160217905550808060010191505061004e565b5050565b5f5ffd5b5f63ffffffff82169050919050565b6100da816100c2565b81146100e4575f5ffd5b50565b5f813590506100f5816100d1565b92915050565b5f602082840312156101105761010f6100be565b5b5f61011d848285016100e7565b9150509291505056fea26469706673582212203f476227472fc4b1c0db0813dffc1bdcbcb2b182eca4b9082d667f67d28d28f164736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b5061015c8061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c8063af4e6e521461002d575b5f5ffd5b610047600480360381019061004291906100fb565b610049565b005b5f5f90505b8163ffffffff168163ffffffff1610156100ba575f81908060018154018082558091505060019003905f5260205f2090600891828204019190066004029091909190916101000a81548163ffffffff021916908363ffffffff160217905550808060010191505061004e565b5050565b5f5ffd5b5f63ffffffff82169050919050565b6100da816100c2565b81146100e4575f5ffd5b50565b5f813590506100f5816100d1565b92915050565b5f602082840312156101105761010f6100be565b5b5f61011d848285016100e7565b9150509291505056fea2646970667358221220ee90febd8e1a73df578d4e58312d085e56f4ce0367111a88faf3b604921a7ecf64736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/ISCTest.abi b/packages/evm/evmtest/ISCTest.abi index 65bd756145..b00e7dad1b 100644 --- a/packages/evm/evmtest/ISCTest.abi +++ b/packages/evm/evmtest/ISCTest.abi @@ -1 +1 @@ -[{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"CustomError","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"s","type":"string"}],"name":"DummyEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"entropy","type":"bytes32"}],"name":"EntropyEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"LoopEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"ISCRequestID","name":"reqID","type":"bytes32"}],"name":"RequestIDEvent","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"indexed":false,"internalType":"struct ISCAgentID","name":"sender","type":"tuple"}],"name":"SenderAccountEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"SomeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"TestSelfDestruct6780ContractCreated","type":"event"},{"inputs":[],"name":"callInccounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitDummyEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitEntropy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitEventAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitRequestID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitSenderAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getChainID","outputs":[{"internalType":"ISCChainID","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"loopWithGasLeft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"makeISCPanic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ISCAgentID","name":"targetAgentID","type":"tuple"},{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"allowance","type":"tuple"}],"name":"moveToAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revertWithCustomError","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"IotaAddress","name":"receiver","type":"bytes32"},{"internalType":"uint64","name":"baseTokens","type":"uint64"}],"name":"sendBaseTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"testCallViewCaller","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"testRevertReason","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address payable","name":"beneficiary","type":"address"}],"name":"testSelfDestruct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"testSelfDestruct6780","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"testStackOverflow","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"testStaticCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"s","type":"string"}],"name":"triggerEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"s","type":"string"}],"name":"triggerEventFail","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"CustomError","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"s","type":"string"}],"name":"DummyEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"entropy","type":"bytes32"}],"name":"EntropyEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"LoopEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"ISCRequestID","name":"reqID","type":"bytes32"}],"name":"RequestIDEvent","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"indexed":false,"internalType":"struct ISCAgentID","name":"sender","type":"tuple"}],"name":"SenderAccountEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"SomeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"TestSelfDestruct6780ContractCreated","type":"event"},{"inputs":[],"name":"callInccounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitDummyEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitEntropy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitEventAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitRequestID","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitSenderAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getChainID","outputs":[{"internalType":"ISCChainID","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimestampAndBlockNumber","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"loopWithGasLeft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"makeISCPanic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ISCAgentID","name":"targetAgentID","type":"tuple"},{"components":[{"components":[{"internalType":"string","name":"coinType","type":"string"},{"internalType":"uint64","name":"amount","type":"uint64"}],"internalType":"struct CoinBalance[]","name":"coins","type":"tuple[]"},{"components":[{"internalType":"IotaObjectID","name":"id","type":"bytes32"},{"internalType":"string","name":"objectType","type":"string"}],"internalType":"struct IotaObject[]","name":"objects","type":"tuple[]"}],"internalType":"struct ISCAssets","name":"allowance","type":"tuple"}],"name":"moveToAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revertWithCustomError","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"IotaAddress","name":"receiver","type":"bytes32"},{"internalType":"uint64","name":"baseTokens","type":"uint64"}],"name":"sendBaseTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"testCallViewCaller","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"testRevertReason","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address payable","name":"beneficiary","type":"address"}],"name":"testSelfDestruct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"testSelfDestruct6780","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"testStackOverflow","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"testStaticCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"s","type":"string"}],"name":"triggerEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"s","type":"string"}],"name":"triggerEventFail","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/packages/evm/evmtest/ISCTest.bin b/packages/evm/evmtest/ISCTest.bin index ba87fbffa3..8792dc1721 100644 --- a/packages/evm/evmtest/ISCTest.bin +++ b/packages/evm/evmtest/ISCTest.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b5061403f8061001c5f395ff3fe608060405260043610610129575f3560e01c8063a4a05e21116100aa578063bd819cf11161006e578063bd819cf1146102c9578063c36ba856146102f1578063d411defb14610307578063e1782c2f1461031d578063e29a58a314610339578063e6c75c6b1461034f57610129565b8063a4a05e2114610235578063b3ee69421461024b578063bb21d92114610261578063bcaeb8a814610277578063bcfb1959146102a157610129565b8063564b81ef116100f1578063564b81ef1461019b5780636a68a760146101c5578063904b8870146101db5780639e1a00aa146101f1578063a038a3e61461020d57610129565b806336c346401461012d5780633772d53f1461014357806346d116761461015957806346fc4bb11461016f5780634e522e4b14610185575b5f5ffd5b348015610138575f5ffd5b50610141610377565b005b34801561014e575f5ffd5b50610157610430565b005b348015610164575f5ffd5b5061016d6104ee565b005b34801561017a575f5ffd5b506101836105af565b005b348015610190575f5ffd5b506101996105ed565b005b3480156101a6575f5ffd5b506101af610624565b6040516101bc9190611f35565b60405180910390f35b3480156101d0575f5ffd5b506101d96106ab565b005b3480156101e6575f5ffd5b506101ef6106e6565b005b61020b60048036038101906102069190611fec565b6107af565b005b348015610218575f5ffd5b50610233600480360381019061022e9190612166565b6107f7565b005b348015610240575f5ffd5b50610249610871565b005b348015610256575f5ffd5b5061025f610bad565b005b34801561026c575f5ffd5b50610275610e19565b005b348015610282575f5ffd5b5061028b610e49565b604051610298919061220d565b60405180910390f35b3480156102ac575f5ffd5b506102c760048036038101906102c2919061222d565b6110cb565b005b3480156102d4575f5ffd5b506102ef60048036038101906102ea91906126d1565b6110e4565b005b3480156102fc575f5ffd5b50610305611336565b005b348015610312575f5ffd5b5061031b611618565b005b61033760048036038101906103329190612771565b6119f6565b005b348015610344575f5ffd5b5061034d611def565b005b34801561035a575f5ffd5b5061037560048036038101906103709190612166565b611e2c565b005b7fd6ddc34e1c1497550557bbba599c9651590b8ca92acb717afae575a6c390460173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca6528ce6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103f5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061041991906127d9565b6040516104269190612813565b60405180910390a1565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635404bbf76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104b29190612856565b90507f2778726dc1b9d6d2ee2628a18174907da485ba8765490e157ddf1202528ed5bc816040516104e39190612890565b60405180910390a150565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa15801561054b573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610573919061296c565b90507faded0c26c8cc65771b245ec36a4a290a35b0cd003545068bcef2dcac18b8815c816040516105a49190612a22565b60405180910390a150565b602a6040517fa8b4db620000000000000000000000000000000000000000000000000000000081526004016105e49190612a90565b60405180910390fd5b7f5d1ca04f16bd7543edfc3334447b8976b0504f3a3e449dcd9992eb93781a80f360405161061a90612b03565b60405180910390a1565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663564b81ef6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610682573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106a69190612b4b565b905090565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dd90612b03565b60405180910390fd5b5f6040516106f390611ea9565b604051809103905ff08015801561070c573d5f5f3e3d5ffd5b5090507f619e004505ac1d1c1c901fa7ad8f849ad75977fe395f6df05966aac8702a22a28160405161073e9190612b96565b60405180910390a18073ffffffffffffffffffffffffffffffffffffffff1663bcfb1959336040518263ffffffff1660e01b815260040161077f9190612bbe565b5f604051808303815f87803b158015610796575f5ffd5b505af11580156107a8573d5f5f3e3d5ffd5b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156107f2573d5f5f3e3d5ffd5b505050565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6c75c6b826040518263ffffffff1660e01b81526004016108449190612c19565b5f604051808303815f87803b15801561085b575f5ffd5b505af115801561086d573d5f5f3e3d5ffd5b5f5ffd5b5f600167ffffffffffffffff81111561088d5761088c612042565b5b6040519080825280602002602001820160405280156108c057816020015b60608152602001906001900390816108ab5790505b5090506040518060400160405280600981526020017f012a000000000000000000000000000000000000000000000000000000000000815250815f8151811061090c5761090b612c39565b5b602002602001018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c75f1eaa6040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b81526004016109a890612cb0565b602060405180830381865afa1580156109c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e79190612d07565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610a3d90612d7c565b602060405180830381865afa158015610a58573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a7c9190612d07565b63ffffffff1681525081526020018481525060405180604001604052805f67ffffffffffffffff811115610ab357610ab2612042565b5b604051908082528060200260200182016040528015610aec57816020015b610ad9611eb6565b815260200190600190039081610ad15790505b5081526020015f67ffffffffffffffff811115610b0c57610b0b612042565b5b604051908082528060200260200182016040528015610b4557816020015b610b32611ed9565b815260200190600190039081610b2a5790505b508152506040518363ffffffff1660e01b8152600401610b6692919061317d565b5f604051808303815f875af1158015610b81573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610ba99190613290565b5050565b5f600167ffffffffffffffff811115610bc957610bc8612042565b5b604051908082528060200260200182016040528015610bfc57816020015b6060815260200190600190039081610be75790505b5090503060601b604051602001610c139190613358565b604051602081830303815290604052815f81518110610c3557610c34612c39565b5b602002602001018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663125ff5f96040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610cd1906133da565b602060405180830381865afa158015610cec573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d109190612d07565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610d6690613442565b602060405180830381865afa158015610d81573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da59190612d07565b63ffffffff168152508152602001848152506040518263ffffffff1660e01b8152600401610dd39190613460565b5f60405180830381865afa158015610ded573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610e159190613290565b5050565b7fb7575244c27f0af0a38da3d7e04920b4409766ef4699eea08f74dff24db98a1a60405160405180910390a15f5ffd5b60605f600167ffffffffffffffff811115610e6757610e66612042565b5b604051908082528060200260200182016040528015610e9a57816020015b6060815260200190600190039081610e855790505b5090506040518060400160405280600181526020015f815250815f81518110610ec657610ec5612c39565b5b60200260200101819052505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663125ff5f96040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610f63906134ca565b602060405180830381865afa158015610f7e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa29190612d07565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610ff890613532565b602060405180830381865afa158015611013573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110379190612d07565b63ffffffff168152508152602001858152506040518263ffffffff1660e01b81526004016110659190613460565b5f60405180830381865afa15801561107f573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906110a79190613290565b9050805f815181106110bc576110bb612c39565b5b60200260200101519250505090565b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f600167ffffffffffffffff811115611100576110ff612042565b5b60405190808252806020026020018201604052801561113357816020015b606081526020019060019003908161111e5790505b509050825f0151815f8151811061114d5761114c612c39565b5b602002602001018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c75f1eaa6040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b81526004016111e9906134ca565b602060405180830381865afa158015611204573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112289190612d07565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b815260040161127e9061359a565b602060405180830381865afa158015611299573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112bd9190612d07565b63ffffffff16815250815260200184815250846040518363ffffffff1660e01b81526004016112ed92919061317d565b5f604051808303815f875af1158015611308573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906113309190613290565b50505050565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c75f1eaa6040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b81526004016113c790613602565b602060405180830381865afa1580156113e2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114069190612d07565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b815260040161145c9061366a565b602060405180830381865afa158015611477573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149b9190612d07565b63ffffffff1681525081526020015f67ffffffffffffffff8111156114c3576114c2612042565b5b6040519080825280602002602001820160405280156114f657816020015b60608152602001906001900390816114e15790505b5081525060405180604001604052805f67ffffffffffffffff81111561151f5761151e612042565b5b60405190808252806020026020018201604052801561155857816020015b611545611eb6565b81526020019060019003908161153d5790505b5081526020015f67ffffffffffffffff81111561157857611577612042565b5b6040519080825280602002602001820160405280156115b157816020015b61159e611ed9565b8152602001906001900390816115965790505b508152506040518363ffffffff1660e01b81526004016115d292919061317d565b5f604051808303815f875af11580156115ed573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906116159190613290565b50565b5f606073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16604051602401611655906136d2565b6040516020818303038152906040527fe6c75c6b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516116df919061372a565b5f604051808303815f865af19150503d805f8114611718576040519150601f19603f3d011682016040523d82523d5f602084013e61171d565b606091505b50809250819350505081611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d9061378a565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f564b81ef000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611821919061372a565b5f60405180830381855afa9150503d805f8114611859576040519150601f19603f3d011682016040523d82523d5f602084013e61185e565b606091505b508092508193505050816118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e90613818565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166040516024016118e190613880565b6040516020818303038152906040527fe6c75c6b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161196b919061372a565b5f60405180830381855afa9150503d805f81146119a3576040519150601f19603f3d011682016040523d82523d5f602084013e6119a8565b606091505b50809250819350505081156119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e99061390e565b60405180910390fd5b5050565b6119fe611ef2565b5f8267ffffffffffffffff1603611aa55773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a714b58d336040518263ffffffff1660e01b8152600401611a5c9190612b96565b5f60405180830381865afa158015611a76573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611a9e9190613c7f565b9050611bea565b600167ffffffffffffffff811115611ac057611abf612042565b5b604051908082528060200260200182016040528015611af957816020015b611ae6611eb6565b815260200190600190039081611ade5790505b50815f018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632386557b6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611b5d573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611b859190613e2d565b5f0151815f01515f81518110611b9e57611b9d612c39565b5b60200260200101515f018190525081815f01515f81518110611bc357611bc2612c39565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff16815250505b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a8c0e41f33836040518363ffffffff1660e01b8152600401611c39929190613e74565b5f604051808303815f87803b158015611c50575f5ffd5b505af1158015611c62573d5f5f3e3d5ffd5b50505050611c6e611ef2565b600167ffffffffffffffff811115611c8957611c88612042565b5b604051908082528060200260200182016040528015611cc257816020015b611caf611eb6565b815260200190600190039081611ca75790505b50815f0181905250815f01515f81518110611ce057611cdf612c39565b5b60200260200101515f0151815f01515f81518110611d0157611d00612c39565b5b60200260200101515f0181905250815f01515f81518110611d2557611d24612c39565b5b602002602001015160200151815f01515f81518110611d4757611d46612c39565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636bc6442e85836040518363ffffffff1660e01b8152600401611dbc929190613eb1565b5f604051808303815f87803b158015611dd3575f5ffd5b505af1158015611de5573d5f5f3e3d5ffd5b5050505050505050565b5b6127105a10611e2a577ff9c7a13c2c2ddb716633ae77fd03fb7d2e3bf5ab3a45ba50ec2d3decc9ee650c60405160405180910390a1611df0565b565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6c75c6b826040518263ffffffff1660e01b8152600401611e799190612c19565b5f604051808303815f87803b158015611e90575f5ffd5b505af1158015611ea2573d5f5f3e3d5ffd5b5050505050565b61012a80613ee083390190565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b60405180604001604052805f8152602001606081525090565b604051806040016040528060608152602001606081525090565b5f819050919050565b5f611f1f82611f0c565b9050919050565b611f2f81611f15565b82525050565b5f602082019050611f485f830184611f26565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611f8882611f5f565b9050919050565b611f9881611f7e565b8114611fa2575f5ffd5b50565b5f81359050611fb381611f8f565b92915050565b5f819050919050565b611fcb81611fb9565b8114611fd5575f5ffd5b50565b5f81359050611fe681611fc2565b92915050565b5f5f6040838503121561200257612001611f57565b5b5f61200f85828601611fa5565b925050602061202085828601611fd8565b9150509250929050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61207882612032565b810181811067ffffffffffffffff8211171561209757612096612042565b5b80604052505050565b5f6120a9611f4e565b90506120b5828261206f565b919050565b5f67ffffffffffffffff8211156120d4576120d3612042565b5b6120dd82612032565b9050602081019050919050565b828183375f83830152505050565b5f61210a612105846120ba565b6120a0565b9050828152602081018484840111156121265761212561202e565b5b6121318482856120ea565b509392505050565b5f82601f83011261214d5761214c61202a565b5b813561215d8482602086016120f8565b91505092915050565b5f6020828403121561217b5761217a611f57565b5b5f82013567ffffffffffffffff81111561219857612197611f5b565b5b6121a484828501612139565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6121df826121ad565b6121e981856121b7565b93506121f98185602086016121c7565b61220281612032565b840191505092915050565b5f6020820190508181035f83015261222581846121d5565b905092915050565b5f6020828403121561224257612241611f57565b5b5f61224f84828501611fa5565b91505092915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561227a57612279612042565b5b61228382612032565b9050602081019050919050565b5f6122a261229d84612260565b6120a0565b9050828152602081018484840111156122be576122bd61202e565b5b6122c98482856120ea565b509392505050565b5f82601f8301126122e5576122e461202a565b5b81356122f5848260208601612290565b91505092915050565b5f6020828403121561231357612312612258565b5b61231d60206120a0565b90505f82013567ffffffffffffffff81111561233c5761233b61225c565b5b612348848285016122d1565b5f8301525092915050565b5f67ffffffffffffffff82111561236d5761236c612042565b5b602082029050602081019050919050565b5f5ffd5b5f67ffffffffffffffff82169050919050565b61239e81612382565b81146123a8575f5ffd5b50565b5f813590506123b981612395565b92915050565b5f604082840312156123d4576123d3612258565b5b6123de60406120a0565b90505f82013567ffffffffffffffff8111156123fd576123fc61225c565b5b61240984828501612139565b5f83015250602061241c848285016123ab565b60208301525092915050565b5f61243a61243584612353565b6120a0565b9050808382526020820190506020840283018581111561245d5761245c61237e565b5b835b818110156124a457803567ffffffffffffffff8111156124825761248161202a565b5b80860161248f89826123bf565b8552602085019450505060208101905061245f565b5050509392505050565b5f82601f8301126124c2576124c161202a565b5b81356124d2848260208601612428565b91505092915050565b5f67ffffffffffffffff8211156124f5576124f4612042565b5b602082029050602081019050919050565b61250f81611f0c565b8114612519575f5ffd5b50565b5f8135905061252a81612506565b92915050565b5f6040828403121561254557612544612258565b5b61254f60406120a0565b90505f61255e8482850161251c565b5f83015250602082013567ffffffffffffffff8111156125815761258061225c565b5b61258d84828501612139565b60208301525092915050565b5f6125ab6125a6846124db565b6120a0565b905080838252602082019050602084028301858111156125ce576125cd61237e565b5b835b8181101561261557803567ffffffffffffffff8111156125f3576125f261202a565b5b8086016126008982612530565b855260208501945050506020810190506125d0565b5050509392505050565b5f82601f8301126126335761263261202a565b5b8135612643848260208601612599565b91505092915050565b5f6040828403121561266157612660612258565b5b61266b60406120a0565b90505f82013567ffffffffffffffff81111561268a5761268961225c565b5b612696848285016124ae565b5f83015250602082013567ffffffffffffffff8111156126b9576126b861225c565b5b6126c58482850161261f565b60208301525092915050565b5f5f604083850312156126e7576126e6611f57565b5b5f83013567ffffffffffffffff81111561270457612703611f5b565b5b612710858286016122fe565b925050602083013567ffffffffffffffff81111561273157612730611f5b565b5b61273d8582860161264c565b9150509250929050565b61275081611f0c565b811461275a575f5ffd5b50565b5f8135905061276b81612747565b92915050565b5f5f6040838503121561278757612786611f57565b5b5f6127948582860161275d565b92505060206127a5858286016123ab565b9150509250929050565b6127b881611f0c565b81146127c2575f5ffd5b50565b5f815190506127d3816127af565b92915050565b5f602082840312156127ee576127ed611f57565b5b5f6127fb848285016127c5565b91505092915050565b61280d81611f15565b82525050565b5f6020820190506128265f830184612804565b92915050565b61283581611f0c565b811461283f575f5ffd5b50565b5f815190506128508161282c565b92915050565b5f6020828403121561286b5761286a611f57565b5b5f61287884828501612842565b91505092915050565b61288a81611f0c565b82525050565b5f6020820190506128a35f830184612881565b92915050565b5f6128bb6128b684612260565b6120a0565b9050828152602081018484840111156128d7576128d661202e565b5b6128e28482856121c7565b509392505050565b5f82601f8301126128fe576128fd61202a565b5b815161290e8482602086016128a9565b91505092915050565b5f6020828403121561292c5761292b612258565b5b61293660206120a0565b90505f82015167ffffffffffffffff8111156129555761295461225c565b5b612961848285016128ea565b5f8301525092915050565b5f6020828403121561298157612980611f57565b5b5f82015167ffffffffffffffff81111561299e5761299d611f5b565b5b6129aa84828501612917565b91505092915050565b5f82825260208201905092915050565b5f6129cd826121ad565b6129d781856129b3565b93506129e78185602086016121c7565b6129f081612032565b840191505092915050565b5f602083015f8301518482035f860152612a1582826129c3565b9150508091505092915050565b5f6020820190508181035f830152612a3a81846129fb565b905092915050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f612a7a612a75612a7084612a42565b612a57565b612a4b565b9050919050565b612a8a81612a60565b82525050565b5f602082019050612aa35f830184612a81565b92915050565b5f82825260208201905092915050565b7f666f6f62617200000000000000000000000000000000000000000000000000005f82015250565b5f612aed600683612aa9565b9150612af882612ab9565b602082019050919050565b5f6020820190508181035f830152612b1a81612ae1565b9050919050565b612b2a81611f0c565b8114612b34575f5ffd5b50565b5f81519050612b4581612b21565b92915050565b5f60208284031215612b6057612b5f611f57565b5b5f612b6d84828501612b37565b91505092915050565b5f612b8082611f5f565b9050919050565b612b9081612b76565b82525050565b5f602082019050612ba95f830184612b87565b92915050565b612bb881611f7e565b82525050565b5f602082019050612bd15f830184612baf565b92915050565b5f81519050919050565b5f612beb82612bd7565b612bf58185612aa9565b9350612c058185602086016121c7565b612c0e81612032565b840191505092915050565b5f6020820190508181035f830152612c318184612be1565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f696e63636f756e746572000000000000000000000000000000000000000000005f82015250565b5f612c9a600a83612aa9565b9150612ca582612c66565b602082019050919050565b5f6020820190508181035f830152612cc781612c8e565b9050919050565b5f63ffffffff82169050919050565b612ce681612cce565b8114612cf0575f5ffd5b50565b5f81519050612d0181612cdd565b92915050565b5f60208284031215612d1c57612d1b611f57565b5b5f612d2984828501612cf3565b91505092915050565b7f696e63436f756e746572000000000000000000000000000000000000000000005f82015250565b5f612d66600a83612aa9565b9150612d7182612d32565b602082019050919050565b5f6020820190508181035f830152612d9381612d5a565b9050919050565b5f612db4612daf612daa84612cce565b612a57565b612cce565b9050919050565b612dc481612d9a565b82525050565b604082015f820151612dde5f850182612dbb565b506020820151612df16020850182612dbb565b50505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612e2b83836129c3565b905092915050565b5f602082019050919050565b5f612e4982612df7565b612e538185612e01565b935083602082028501612e6585612e11565b805f5b85811015612ea05784840389528151612e818582612e20565b9450612e8c83612e33565b925060208a01995050600181019050612e68565b50829750879550505050505092915050565b5f606083015f830151612ec75f860182612dca565b5060208301518482036040860152612edf8282612e3f565b9150508091505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f612f2f82612bd7565b612f398185612f15565b9350612f498185602086016121c7565b612f5281612032565b840191505092915050565b612f6681612382565b82525050565b5f604083015f8301518482035f860152612f868282612f25565b9150506020830151612f9b6020860182612f5d565b508091505092915050565b5f612fb18383612f6c565b905092915050565b5f602082019050919050565b5f612fcf82612eec565b612fd98185612ef6565b935083602082028501612feb85612f06565b805f5b8581101561302657848403895281516130078582612fa6565b945061301283612fb9565b925060208a01995050600181019050612fee565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61306a81611f15565b82525050565b5f604083015f8301516130855f860182613061565b506020830151848203602086015261309d8282612f25565b9150508091505092915050565b5f6130b58383613070565b905092915050565b5f602082019050919050565b5f6130d382613038565b6130dd8185613042565b9350836020820285016130ef85613052565b805f5b8581101561312a578484038952815161310b85826130aa565b9450613116836130bd565b925060208a019950506001810190506130f2565b50829750879550505050505092915050565b5f604083015f8301518482035f8601526131568282612fc5565b9150506020830151848203602086015261317082826130c9565b9150508091505092915050565b5f6040820190508181035f8301526131958185612eb2565b905081810360208301526131a9818461313c565b90509392505050565b5f67ffffffffffffffff8211156131cc576131cb612042565b5b602082029050602081019050919050565b5f6131ef6131ea846131b2565b6120a0565b905080838252602082019050602084028301858111156132125761321161237e565b5b835b8181101561325957805167ffffffffffffffff8111156132375761323661202a565b5b80860161324489826128ea565b85526020850194505050602081019050613214565b5050509392505050565b5f82601f8301126132775761327661202a565b5b81516132878482602086016131dd565b91505092915050565b5f602082840312156132a5576132a4611f57565b5b5f82015167ffffffffffffffff8111156132c2576132c1611f5b565b5b6132ce84828501613263565b91505092915050565b6b010000000000000000000000815250565b5f7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b5f819050919050565b61332e613329826132e9565b613314565b82525050565b7d04b3ee694200000000000000000000000000000000000000000000000000815250565b5f613362826132d7565b601582019150613372828461331d565b60148201915061338182613334565b60078201915081905092915050565b7f65766d00000000000000000000000000000000000000000000000000000000005f82015250565b5f6133c4600383612aa9565b91506133cf82613390565b602082019050919050565b5f6020820190508181035f8301526133f1816133b8565b9050919050565b7f63616c6c436f6e747261637400000000000000000000000000000000000000005f82015250565b5f61342c600c83612aa9565b9150613437826133f8565b602082019050919050565b5f6020820190508181035f83015261345981613420565b9050919050565b5f6020820190508181035f8301526134788184612eb2565b905092915050565b7f6163636f756e74730000000000000000000000000000000000000000000000005f82015250565b5f6134b4600883612aa9565b91506134bf82613480565b602082019050919050565b5f6020820190508181035f8301526134e1816134a8565b9050919050565b7f62616c616e6365000000000000000000000000000000000000000000000000005f82015250565b5f61351c600783612aa9565b9150613527826134e8565b602082019050919050565b5f6020820190508181035f83015261354981613510565b9050919050565b7f7472616e73666572416c6c6f77616e6365546f000000000000000000000000005f82015250565b5f613584601383612aa9565b915061358f82613550565b602082019050919050565b5f6020820190508181035f8301526135b181613578565b9050919050565b7f676f7665726e616e6365000000000000000000000000000000000000000000005f82015250565b5f6135ec600a83612aa9565b91506135f7826135b8565b602082019050919050565b5f6020820190508181035f830152613619816135e0565b9050919050565b7f636c61696d436861696e41646d696e00000000000000000000000000000000005f82015250565b5f613654600f83612aa9565b915061365f82613620565b602082019050919050565b5f6020820190508181035f83015261368181613648565b9050919050565b7f6e6f6e2d737461746963000000000000000000000000000000000000000000005f82015250565b5f6136bc600a83612aa9565b91506136c782613688565b602082019050919050565b5f6020820190508181035f8301526136e9816136b0565b9050919050565b5f81905092915050565b5f613704826121ad565b61370e81856136f0565b935061371e8185602086016121c7565b80840191505092915050565b5f61373582846136fa565b915081905092915050565b7f63616c6c2073686f756c642073756363656564000000000000000000000000005f82015250565b5f613774601383612aa9565b915061377f82613740565b602082019050919050565b5f6020820190508181035f8301526137a181613768565b9050919050565b7f73746174696363616c6c20746f20766965772073686f756c64207375636365655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f613802602183612aa9565b915061380d826137a8565b604082019050919050565b5f6020820190508181035f83015261382f816137f6565b9050919050565b7f73746174696300000000000000000000000000000000000000000000000000005f82015250565b5f61386a600683612aa9565b915061387582613836565b602082019050919050565b5f6020820190508181035f8301526138978161385e565b9050919050565b7f73746174696363616c6c20746f206e6f6e2d766965772073686f756c642066615f8201527f696c000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138f8602283612aa9565b91506139038261389e565b604082019050919050565b5f6020820190508181035f830152613925816138ec565b9050919050565b5f61393e613939846120ba565b6120a0565b90508281526020810184848401111561395a5761395961202e565b5b6139658482856121c7565b509392505050565b5f82601f8301126139815761398061202a565b5b815161399184826020860161392c565b91505092915050565b5f815190506139a881612395565b92915050565b5f604082840312156139c3576139c2612258565b5b6139cd60406120a0565b90505f82015167ffffffffffffffff8111156139ec576139eb61225c565b5b6139f88482850161396d565b5f830152506020613a0b8482850161399a565b60208301525092915050565b5f613a29613a2484612353565b6120a0565b90508083825260208201905060208402830185811115613a4c57613a4b61237e565b5b835b81811015613a9357805167ffffffffffffffff811115613a7157613a7061202a565b5b808601613a7e89826139ae565b85526020850194505050602081019050613a4e565b5050509392505050565b5f82601f830112613ab157613ab061202a565b5b8151613ac1848260208601613a17565b91505092915050565b5f81519050613ad881612506565b92915050565b5f60408284031215613af357613af2612258565b5b613afd60406120a0565b90505f613b0c84828501613aca565b5f83015250602082015167ffffffffffffffff811115613b2f57613b2e61225c565b5b613b3b8482850161396d565b60208301525092915050565b5f613b59613b54846124db565b6120a0565b90508083825260208201905060208402830185811115613b7c57613b7b61237e565b5b835b81811015613bc357805167ffffffffffffffff811115613ba157613ba061202a565b5b808601613bae8982613ade565b85526020850194505050602081019050613b7e565b5050509392505050565b5f82601f830112613be157613be061202a565b5b8151613bf1848260208601613b47565b91505092915050565b5f60408284031215613c0f57613c0e612258565b5b613c1960406120a0565b90505f82015167ffffffffffffffff811115613c3857613c3761225c565b5b613c4484828501613a9d565b5f83015250602082015167ffffffffffffffff811115613c6757613c6661225c565b5b613c7384828501613bcd565b60208301525092915050565b5f60208284031215613c9457613c93611f57565b5b5f82015167ffffffffffffffff811115613cb157613cb0611f5b565b5b613cbd84828501613bfa565b91505092915050565b613ccf81612a4b565b8114613cd9575f5ffd5b50565b5f81519050613cea81613cc6565b92915050565b5f60e08284031215613d0557613d04612258565b5b613d0f60e06120a0565b90505f82015167ffffffffffffffff811115613d2e57613d2d61225c565b5b613d3a8482850161396d565b5f830152506020613d4d84828501613cdc565b602083015250604082015167ffffffffffffffff811115613d7157613d7061225c565b5b613d7d8482850161396d565b604083015250606082015167ffffffffffffffff811115613da157613da061225c565b5b613dad8482850161396d565b606083015250608082015167ffffffffffffffff811115613dd157613dd061225c565b5b613ddd8482850161396d565b60808301525060a082015167ffffffffffffffff811115613e0157613e0061225c565b5b613e0d8482850161396d565b60a08301525060c0613e218482850161399a565b60c08301525092915050565b5f60208284031215613e4257613e41611f57565b5b5f82015167ffffffffffffffff811115613e5f57613e5e611f5b565b5b613e6b84828501613cf0565b91505092915050565b5f604082019050613e875f830185612b87565b8181036020830152613e99818461313c565b90509392505050565b613eab81611f15565b82525050565b5f604082019050613ec45f830185613ea2565b8181036020830152613ed6818461313c565b9050939250505056fe6080604052348015600e575f5ffd5b5061010e8061001c5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063bcfb195914602a575b5f5ffd5b60406004803603810190603c919060b2565b6042565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f608682605f565b9050919050565b609481607e565b8114609d575f5ffd5b50565b5f8135905060ac81608d565b92915050565b5f6020828403121560c45760c3605b565b5b5f60cf8482850160a0565b9150509291505056fea2646970667358221220dade1035a0f173d8ea48a6e6cd294cef766c3e99667ac5a5af101b96ddee8fff64736f6c634300081d0033a26469706673582212209f38af213ccf968006e2311f584a1e42979c310cff7d11146517d847c8932be664736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b506140b78061001c5f395ff3fe608060405260043610610134575f3560e01c8063a4a05e21116100aa578063bd819cf11161006e578063bd819cf1146102ff578063c36ba85614610327578063d411defb1461033d578063e1782c2f14610353578063e29a58a31461036f578063e6c75c6b1461038557610134565b8063a4a05e211461026b578063b3ee694214610281578063bb21d92114610297578063bcaeb8a8146102ad578063bcfb1959146102d757610134565b80634e522e4b116100fc5780634e522e4b146101bb578063564b81ef146101d15780636a68a760146101fb578063904b8870146102115780639e1a00aa14610227578063a038a3e61461024357610134565b806309647a4f1461013857806336c34640146101635780633772d53f1461017957806346d116761461018f57806346fc4bb1146101a5575b5f5ffd5b348015610143575f5ffd5b5061014c6103ad565b60405161015a929190611f66565b60405180910390f35b34801561016e575f5ffd5b506101776103b9565b005b348015610184575f5ffd5b5061018d610472565b005b34801561019a575f5ffd5b506101a3610530565b005b3480156101b0575f5ffd5b506101b96105f1565b005b3480156101c6575f5ffd5b506101cf61062f565b005b3480156101dc575f5ffd5b506101e5610666565b6040516101f29190611fb6565b60405180910390f35b348015610206575f5ffd5b5061020f6106ed565b005b34801561021c575f5ffd5b50610225610728565b005b610241600480360381019061023c9190612064565b6107f1565b005b34801561024e575f5ffd5b50610269600480360381019061026491906121de565b610839565b005b348015610276575f5ffd5b5061027f6108b3565b005b34801561028c575f5ffd5b50610295610bef565b005b3480156102a2575f5ffd5b506102ab610e5b565b005b3480156102b8575f5ffd5b506102c1610e8b565b6040516102ce9190612285565b60405180910390f35b3480156102e2575f5ffd5b506102fd60048036038101906102f891906122a5565b61110d565b005b34801561030a575f5ffd5b5061032560048036038101906103209190612749565b611126565b005b348015610332575f5ffd5b5061033b611378565b005b348015610348575f5ffd5b5061035161165a565b005b61036d600480360381019061036891906127e9565b611a38565b005b34801561037a575f5ffd5b50610383611e31565b005b348015610390575f5ffd5b506103ab60048036038101906103a691906121de565b611e6e565b005b5f5f4243915091509091565b7fd6ddc34e1c1497550557bbba599c9651590b8ca92acb717afae575a6c390460173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca6528ce6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610437573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061045b9190612851565b604051610468919061288b565b60405180910390a1565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635404bbf76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f491906128ce565b90507f2778726dc1b9d6d2ee2628a18174907da485ba8765490e157ddf1202528ed5bc816040516105259190612908565b60405180910390a150565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa15801561058d573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906105b591906129e4565b90507faded0c26c8cc65771b245ec36a4a290a35b0cd003545068bcef2dcac18b8815c816040516105e69190612a9a565b60405180910390a150565b602a6040517fa8b4db620000000000000000000000000000000000000000000000000000000081526004016106269190612b08565b60405180910390fd5b7f5d1ca04f16bd7543edfc3334447b8976b0504f3a3e449dcd9992eb93781a80f360405161065c90612b7b565b60405180910390a1565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663564b81ef6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e89190612bc3565b905090565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071f90612b7b565b60405180910390fd5b5f60405161073590611eeb565b604051809103905ff08015801561074e573d5f5f3e3d5ffd5b5090507f619e004505ac1d1c1c901fa7ad8f849ad75977fe395f6df05966aac8702a22a2816040516107809190612c0e565b60405180910390a18073ffffffffffffffffffffffffffffffffffffffff1663bcfb1959336040518263ffffffff1660e01b81526004016107c19190612c36565b5f604051808303815f87803b1580156107d8575f5ffd5b505af11580156107ea573d5f5f3e3d5ffd5b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610834573d5f5f3e3d5ffd5b505050565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6c75c6b826040518263ffffffff1660e01b81526004016108869190612c91565b5f604051808303815f87803b15801561089d575f5ffd5b505af11580156108af573d5f5f3e3d5ffd5b5f5ffd5b5f600167ffffffffffffffff8111156108cf576108ce6120ba565b5b60405190808252806020026020018201604052801561090257816020015b60608152602001906001900390816108ed5790505b5090506040518060400160405280600981526020017f012a000000000000000000000000000000000000000000000000000000000000815250815f8151811061094e5761094d612cb1565b5b602002602001018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c75f1eaa6040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b81526004016109ea90612d28565b602060405180830381865afa158015610a05573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a299190612d7f565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610a7f90612df4565b602060405180830381865afa158015610a9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610abe9190612d7f565b63ffffffff1681525081526020018481525060405180604001604052805f67ffffffffffffffff811115610af557610af46120ba565b5b604051908082528060200260200182016040528015610b2e57816020015b610b1b611ef8565b815260200190600190039081610b135790505b5081526020015f67ffffffffffffffff811115610b4e57610b4d6120ba565b5b604051908082528060200260200182016040528015610b8757816020015b610b74611f1b565b815260200190600190039081610b6c5790505b508152506040518363ffffffff1660e01b8152600401610ba89291906131f5565b5f604051808303815f875af1158015610bc3573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610beb9190613308565b5050565b5f600167ffffffffffffffff811115610c0b57610c0a6120ba565b5b604051908082528060200260200182016040528015610c3e57816020015b6060815260200190600190039081610c295790505b5090503060601b604051602001610c5591906133d0565b604051602081830303815290604052815f81518110610c7757610c76612cb1565b5b602002602001018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663125ff5f96040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610d1390613452565b602060405180830381865afa158015610d2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d529190612d7f565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610da8906134ba565b602060405180830381865afa158015610dc3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de79190612d7f565b63ffffffff168152508152602001848152506040518263ffffffff1660e01b8152600401610e1591906134d8565b5f60405180830381865afa158015610e2f573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610e579190613308565b5050565b7fb7575244c27f0af0a38da3d7e04920b4409766ef4699eea08f74dff24db98a1a60405160405180910390a15f5ffd5b60605f600167ffffffffffffffff811115610ea957610ea86120ba565b5b604051908082528060200260200182016040528015610edc57816020015b6060815260200190600190039081610ec75790505b5090506040518060400160405280600181526020015f815250815f81518110610f0857610f07612cb1565b5b60200260200101819052505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663125ff5f96040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b8152600401610fa590613542565b602060405180830381865afa158015610fc0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe49190612d7f565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b815260040161103a906135aa565b602060405180830381865afa158015611055573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110799190612d7f565b63ffffffff168152508152602001858152506040518263ffffffff1660e01b81526004016110a791906134d8565b5f60405180830381865afa1580156110c1573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906110e99190613308565b9050805f815181106110fe576110fd612cb1565b5b60200260200101519250505090565b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f600167ffffffffffffffff811115611142576111416120ba565b5b60405190808252806020026020018201604052801561117557816020015b60608152602001906001900390816111605790505b509050825f0151815f8151811061118f5761118e612cb1565b5b602002602001018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c75f1eaa6040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b815260040161122b90613542565b602060405180830381865afa158015611246573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126a9190612d7f565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b81526004016112c090613612565b602060405180830381865afa1580156112db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ff9190612d7f565b63ffffffff16815250815260200184815250846040518363ffffffff1660e01b815260040161132f9291906131f5565b5f604051808303815f875af115801561134a573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906113729190613308565b50505050565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c75f1eaa6040518060400160405280604051806040016040528073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b81526004016114099061367a565b602060405180830381865afa158015611424573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114489190612d7f565b63ffffffff16815260200173107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dbfb12ef6040518163ffffffff1660e01b815260040161149e906136e2565b602060405180830381865afa1580156114b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114dd9190612d7f565b63ffffffff1681525081526020015f67ffffffffffffffff811115611505576115046120ba565b5b60405190808252806020026020018201604052801561153857816020015b60608152602001906001900390816115235790505b5081525060405180604001604052805f67ffffffffffffffff811115611561576115606120ba565b5b60405190808252806020026020018201604052801561159a57816020015b611587611ef8565b81526020019060019003908161157f5790505b5081526020015f67ffffffffffffffff8111156115ba576115b96120ba565b5b6040519080825280602002602001820160405280156115f357816020015b6115e0611f1b565b8152602001906001900390816115d85790505b508152506040518363ffffffff1660e01b81526004016116149291906131f5565b5f604051808303815f875af115801561162f573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906116579190613308565b50565b5f606073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166040516024016116979061374a565b6040516020818303038152906040527fe6c75c6b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161172191906137a2565b5f604051808303815f865af19150503d805f811461175a576040519150601f19603f3d011682016040523d82523d5f602084013e61175f565b606091505b508092508193505050816117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90613802565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166040516024016040516020818303038152906040527f564b81ef000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161186391906137a2565b5f60405180830381855afa9150503d805f811461189b576040519150601f19603f3d011682016040523d82523d5f602084013e6118a0565b606091505b508092508193505050816118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090613890565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16604051602401611923906138f8565b6040516020818303038152906040527fe6c75c6b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516119ad91906137a2565b5f60405180830381855afa9150503d805f81146119e5576040519150601f19603f3d011682016040523d82523d5f602084013e6119ea565b606091505b5080925081935050508115611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90613986565b60405180910390fd5b5050565b611a40611f34565b5f8267ffffffffffffffff1603611ae75773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a714b58d336040518263ffffffff1660e01b8152600401611a9e9190612c0e565b5f60405180830381865afa158015611ab8573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611ae09190613cf7565b9050611c2c565b600167ffffffffffffffff811115611b0257611b016120ba565b5b604051908082528060200260200182016040528015611b3b57816020015b611b28611ef8565b815260200190600190039081611b205790505b50815f018190525073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632386557b6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611b9f573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190611bc79190613ea5565b5f0151815f01515f81518110611be057611bdf612cb1565b5b60200260200101515f018190525081815f01515f81518110611c0557611c04612cb1565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff16815250505b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a8c0e41f33836040518363ffffffff1660e01b8152600401611c7b929190613eec565b5f604051808303815f87803b158015611c92575f5ffd5b505af1158015611ca4573d5f5f3e3d5ffd5b50505050611cb0611f34565b600167ffffffffffffffff811115611ccb57611cca6120ba565b5b604051908082528060200260200182016040528015611d0457816020015b611cf1611ef8565b815260200190600190039081611ce95790505b50815f0181905250815f01515f81518110611d2257611d21612cb1565b5b60200260200101515f0151815f01515f81518110611d4357611d42612cb1565b5b60200260200101515f0181905250815f01515f81518110611d6757611d66612cb1565b5b602002602001015160200151815f01515f81518110611d8957611d88612cb1565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636bc6442e85836040518363ffffffff1660e01b8152600401611dfe929190613f29565b5f604051808303815f87803b158015611e15575f5ffd5b505af1158015611e27573d5f5f3e3d5ffd5b5050505050505050565b5b6127105a10611e6c577ff9c7a13c2c2ddb716633ae77fd03fb7d2e3bf5ab3a45ba50ec2d3decc9ee650c60405160405180910390a1611e32565b565b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e6c75c6b826040518263ffffffff1660e01b8152600401611ebb9190612c91565b5f604051808303815f87803b158015611ed2575f5ffd5b505af1158015611ee4573d5f5f3e3d5ffd5b5050505050565b61012a80613f5883390190565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b60405180604001604052805f8152602001606081525090565b604051806040016040528060608152602001606081525090565b5f819050919050565b611f6081611f4e565b82525050565b5f604082019050611f795f830185611f57565b611f866020830184611f57565b9392505050565b5f819050919050565b5f611fa082611f8d565b9050919050565b611fb081611f96565b82525050565b5f602082019050611fc95f830184611fa7565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61200982611fe0565b9050919050565b61201981611fff565b8114612023575f5ffd5b50565b5f8135905061203481612010565b92915050565b61204381611f4e565b811461204d575f5ffd5b50565b5f8135905061205e8161203a565b92915050565b5f5f6040838503121561207a57612079611fd8565b5b5f61208785828601612026565b925050602061209885828601612050565b9150509250929050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6120f0826120aa565b810181811067ffffffffffffffff8211171561210f5761210e6120ba565b5b80604052505050565b5f612121611fcf565b905061212d82826120e7565b919050565b5f67ffffffffffffffff82111561214c5761214b6120ba565b5b612155826120aa565b9050602081019050919050565b828183375f83830152505050565b5f61218261217d84612132565b612118565b90508281526020810184848401111561219e5761219d6120a6565b5b6121a9848285612162565b509392505050565b5f82601f8301126121c5576121c46120a2565b5b81356121d5848260208601612170565b91505092915050565b5f602082840312156121f3576121f2611fd8565b5b5f82013567ffffffffffffffff8111156122105761220f611fdc565b5b61221c848285016121b1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61225782612225565b612261818561222f565b935061227181856020860161223f565b61227a816120aa565b840191505092915050565b5f6020820190508181035f83015261229d818461224d565b905092915050565b5f602082840312156122ba576122b9611fd8565b5b5f6122c784828501612026565b91505092915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156122f2576122f16120ba565b5b6122fb826120aa565b9050602081019050919050565b5f61231a612315846122d8565b612118565b905082815260208101848484011115612336576123356120a6565b5b612341848285612162565b509392505050565b5f82601f83011261235d5761235c6120a2565b5b813561236d848260208601612308565b91505092915050565b5f6020828403121561238b5761238a6122d0565b5b6123956020612118565b90505f82013567ffffffffffffffff8111156123b4576123b36122d4565b5b6123c084828501612349565b5f8301525092915050565b5f67ffffffffffffffff8211156123e5576123e46120ba565b5b602082029050602081019050919050565b5f5ffd5b5f67ffffffffffffffff82169050919050565b612416816123fa565b8114612420575f5ffd5b50565b5f813590506124318161240d565b92915050565b5f6040828403121561244c5761244b6122d0565b5b6124566040612118565b90505f82013567ffffffffffffffff811115612475576124746122d4565b5b612481848285016121b1565b5f83015250602061249484828501612423565b60208301525092915050565b5f6124b26124ad846123cb565b612118565b905080838252602082019050602084028301858111156124d5576124d46123f6565b5b835b8181101561251c57803567ffffffffffffffff8111156124fa576124f96120a2565b5b8086016125078982612437565b855260208501945050506020810190506124d7565b5050509392505050565b5f82601f83011261253a576125396120a2565b5b813561254a8482602086016124a0565b91505092915050565b5f67ffffffffffffffff82111561256d5761256c6120ba565b5b602082029050602081019050919050565b61258781611f8d565b8114612591575f5ffd5b50565b5f813590506125a28161257e565b92915050565b5f604082840312156125bd576125bc6122d0565b5b6125c76040612118565b90505f6125d684828501612594565b5f83015250602082013567ffffffffffffffff8111156125f9576125f86122d4565b5b612605848285016121b1565b60208301525092915050565b5f61262361261e84612553565b612118565b90508083825260208201905060208402830185811115612646576126456123f6565b5b835b8181101561268d57803567ffffffffffffffff81111561266b5761266a6120a2565b5b80860161267889826125a8565b85526020850194505050602081019050612648565b5050509392505050565b5f82601f8301126126ab576126aa6120a2565b5b81356126bb848260208601612611565b91505092915050565b5f604082840312156126d9576126d86122d0565b5b6126e36040612118565b90505f82013567ffffffffffffffff811115612702576127016122d4565b5b61270e84828501612526565b5f83015250602082013567ffffffffffffffff811115612731576127306122d4565b5b61273d84828501612697565b60208301525092915050565b5f5f6040838503121561275f5761275e611fd8565b5b5f83013567ffffffffffffffff81111561277c5761277b611fdc565b5b61278885828601612376565b925050602083013567ffffffffffffffff8111156127a9576127a8611fdc565b5b6127b5858286016126c4565b9150509250929050565b6127c881611f8d565b81146127d2575f5ffd5b50565b5f813590506127e3816127bf565b92915050565b5f5f604083850312156127ff576127fe611fd8565b5b5f61280c858286016127d5565b925050602061281d85828601612423565b9150509250929050565b61283081611f8d565b811461283a575f5ffd5b50565b5f8151905061284b81612827565b92915050565b5f6020828403121561286657612865611fd8565b5b5f6128738482850161283d565b91505092915050565b61288581611f96565b82525050565b5f60208201905061289e5f83018461287c565b92915050565b6128ad81611f8d565b81146128b7575f5ffd5b50565b5f815190506128c8816128a4565b92915050565b5f602082840312156128e3576128e2611fd8565b5b5f6128f0848285016128ba565b91505092915050565b61290281611f8d565b82525050565b5f60208201905061291b5f8301846128f9565b92915050565b5f61293361292e846122d8565b612118565b90508281526020810184848401111561294f5761294e6120a6565b5b61295a84828561223f565b509392505050565b5f82601f830112612976576129756120a2565b5b8151612986848260208601612921565b91505092915050565b5f602082840312156129a4576129a36122d0565b5b6129ae6020612118565b90505f82015167ffffffffffffffff8111156129cd576129cc6122d4565b5b6129d984828501612962565b5f8301525092915050565b5f602082840312156129f9576129f8611fd8565b5b5f82015167ffffffffffffffff811115612a1657612a15611fdc565b5b612a228482850161298f565b91505092915050565b5f82825260208201905092915050565b5f612a4582612225565b612a4f8185612a2b565b9350612a5f81856020860161223f565b612a68816120aa565b840191505092915050565b5f602083015f8301518482035f860152612a8d8282612a3b565b9150508091505092915050565b5f6020820190508181035f830152612ab28184612a73565b905092915050565b5f819050919050565b5f60ff82169050919050565b5f819050919050565b5f612af2612aed612ae884612aba565b612acf565b612ac3565b9050919050565b612b0281612ad8565b82525050565b5f602082019050612b1b5f830184612af9565b92915050565b5f82825260208201905092915050565b7f666f6f62617200000000000000000000000000000000000000000000000000005f82015250565b5f612b65600683612b21565b9150612b7082612b31565b602082019050919050565b5f6020820190508181035f830152612b9281612b59565b9050919050565b612ba281611f8d565b8114612bac575f5ffd5b50565b5f81519050612bbd81612b99565b92915050565b5f60208284031215612bd857612bd7611fd8565b5b5f612be584828501612baf565b91505092915050565b5f612bf882611fe0565b9050919050565b612c0881612bee565b82525050565b5f602082019050612c215f830184612bff565b92915050565b612c3081611fff565b82525050565b5f602082019050612c495f830184612c27565b92915050565b5f81519050919050565b5f612c6382612c4f565b612c6d8185612b21565b9350612c7d81856020860161223f565b612c86816120aa565b840191505092915050565b5f6020820190508181035f830152612ca98184612c59565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f696e63636f756e746572000000000000000000000000000000000000000000005f82015250565b5f612d12600a83612b21565b9150612d1d82612cde565b602082019050919050565b5f6020820190508181035f830152612d3f81612d06565b9050919050565b5f63ffffffff82169050919050565b612d5e81612d46565b8114612d68575f5ffd5b50565b5f81519050612d7981612d55565b92915050565b5f60208284031215612d9457612d93611fd8565b5b5f612da184828501612d6b565b91505092915050565b7f696e63436f756e746572000000000000000000000000000000000000000000005f82015250565b5f612dde600a83612b21565b9150612de982612daa565b602082019050919050565b5f6020820190508181035f830152612e0b81612dd2565b9050919050565b5f612e2c612e27612e2284612d46565b612acf565b612d46565b9050919050565b612e3c81612e12565b82525050565b604082015f820151612e565f850182612e33565b506020820151612e696020850182612e33565b50505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612ea38383612a3b565b905092915050565b5f602082019050919050565b5f612ec182612e6f565b612ecb8185612e79565b935083602082028501612edd85612e89565b805f5b85811015612f185784840389528151612ef98582612e98565b9450612f0483612eab565b925060208a01995050600181019050612ee0565b50829750879550505050505092915050565b5f606083015f830151612f3f5f860182612e42565b5060208301518482036040860152612f578282612eb7565b9150508091505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f612fa782612c4f565b612fb18185612f8d565b9350612fc181856020860161223f565b612fca816120aa565b840191505092915050565b612fde816123fa565b82525050565b5f604083015f8301518482035f860152612ffe8282612f9d565b91505060208301516130136020860182612fd5565b508091505092915050565b5f6130298383612fe4565b905092915050565b5f602082019050919050565b5f61304782612f64565b6130518185612f6e565b93508360208202850161306385612f7e565b805f5b8581101561309e578484038952815161307f858261301e565b945061308a83613031565b925060208a01995050600181019050613066565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6130e281611f96565b82525050565b5f604083015f8301516130fd5f8601826130d9565b50602083015184820360208601526131158282612f9d565b9150508091505092915050565b5f61312d83836130e8565b905092915050565b5f602082019050919050565b5f61314b826130b0565b61315581856130ba565b935083602082028501613167856130ca565b805f5b858110156131a257848403895281516131838582613122565b945061318e83613135565b925060208a0199505060018101905061316a565b50829750879550505050505092915050565b5f604083015f8301518482035f8601526131ce828261303d565b915050602083015184820360208601526131e88282613141565b9150508091505092915050565b5f6040820190508181035f83015261320d8185612f2a565b9050818103602083015261322181846131b4565b90509392505050565b5f67ffffffffffffffff821115613244576132436120ba565b5b602082029050602081019050919050565b5f6132676132628461322a565b612118565b9050808382526020820190506020840283018581111561328a576132896123f6565b5b835b818110156132d157805167ffffffffffffffff8111156132af576132ae6120a2565b5b8086016132bc8982612962565b8552602085019450505060208101905061328c565b5050509392505050565b5f82601f8301126132ef576132ee6120a2565b5b81516132ff848260208601613255565b91505092915050565b5f6020828403121561331d5761331c611fd8565b5b5f82015167ffffffffffffffff81111561333a57613339611fdc565b5b613346848285016132db565b91505092915050565b6b010000000000000000000000815250565b5f7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b5f819050919050565b6133a66133a182613361565b61338c565b82525050565b7d04b3ee694200000000000000000000000000000000000000000000000000815250565b5f6133da8261334f565b6015820191506133ea8284613395565b6014820191506133f9826133ac565b60078201915081905092915050565b7f65766d00000000000000000000000000000000000000000000000000000000005f82015250565b5f61343c600383612b21565b915061344782613408565b602082019050919050565b5f6020820190508181035f83015261346981613430565b9050919050565b7f63616c6c436f6e747261637400000000000000000000000000000000000000005f82015250565b5f6134a4600c83612b21565b91506134af82613470565b602082019050919050565b5f6020820190508181035f8301526134d181613498565b9050919050565b5f6020820190508181035f8301526134f08184612f2a565b905092915050565b7f6163636f756e74730000000000000000000000000000000000000000000000005f82015250565b5f61352c600883612b21565b9150613537826134f8565b602082019050919050565b5f6020820190508181035f83015261355981613520565b9050919050565b7f62616c616e6365000000000000000000000000000000000000000000000000005f82015250565b5f613594600783612b21565b915061359f82613560565b602082019050919050565b5f6020820190508181035f8301526135c181613588565b9050919050565b7f7472616e73666572416c6c6f77616e6365546f000000000000000000000000005f82015250565b5f6135fc601383612b21565b9150613607826135c8565b602082019050919050565b5f6020820190508181035f830152613629816135f0565b9050919050565b7f676f7665726e616e6365000000000000000000000000000000000000000000005f82015250565b5f613664600a83612b21565b915061366f82613630565b602082019050919050565b5f6020820190508181035f83015261369181613658565b9050919050565b7f636c61696d436861696e41646d696e00000000000000000000000000000000005f82015250565b5f6136cc600f83612b21565b91506136d782613698565b602082019050919050565b5f6020820190508181035f8301526136f9816136c0565b9050919050565b7f6e6f6e2d737461746963000000000000000000000000000000000000000000005f82015250565b5f613734600a83612b21565b915061373f82613700565b602082019050919050565b5f6020820190508181035f83015261376181613728565b9050919050565b5f81905092915050565b5f61377c82612225565b6137868185613768565b935061379681856020860161223f565b80840191505092915050565b5f6137ad8284613772565b915081905092915050565b7f63616c6c2073686f756c642073756363656564000000000000000000000000005f82015250565b5f6137ec601383612b21565b91506137f7826137b8565b602082019050919050565b5f6020820190508181035f830152613819816137e0565b9050919050565b7f73746174696363616c6c20746f20766965772073686f756c64207375636365655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f61387a602183612b21565b915061388582613820565b604082019050919050565b5f6020820190508181035f8301526138a78161386e565b9050919050565b7f73746174696300000000000000000000000000000000000000000000000000005f82015250565b5f6138e2600683612b21565b91506138ed826138ae565b602082019050919050565b5f6020820190508181035f83015261390f816138d6565b9050919050565b7f73746174696363616c6c20746f206e6f6e2d766965772073686f756c642066615f8201527f696c000000000000000000000000000000000000000000000000000000000000602082015250565b5f613970602283612b21565b915061397b82613916565b604082019050919050565b5f6020820190508181035f83015261399d81613964565b9050919050565b5f6139b66139b184612132565b612118565b9050828152602081018484840111156139d2576139d16120a6565b5b6139dd84828561223f565b509392505050565b5f82601f8301126139f9576139f86120a2565b5b8151613a098482602086016139a4565b91505092915050565b5f81519050613a208161240d565b92915050565b5f60408284031215613a3b57613a3a6122d0565b5b613a456040612118565b90505f82015167ffffffffffffffff811115613a6457613a636122d4565b5b613a70848285016139e5565b5f830152506020613a8384828501613a12565b60208301525092915050565b5f613aa1613a9c846123cb565b612118565b90508083825260208201905060208402830185811115613ac457613ac36123f6565b5b835b81811015613b0b57805167ffffffffffffffff811115613ae957613ae86120a2565b5b808601613af68982613a26565b85526020850194505050602081019050613ac6565b5050509392505050565b5f82601f830112613b2957613b286120a2565b5b8151613b39848260208601613a8f565b91505092915050565b5f81519050613b508161257e565b92915050565b5f60408284031215613b6b57613b6a6122d0565b5b613b756040612118565b90505f613b8484828501613b42565b5f83015250602082015167ffffffffffffffff811115613ba757613ba66122d4565b5b613bb3848285016139e5565b60208301525092915050565b5f613bd1613bcc84612553565b612118565b90508083825260208201905060208402830185811115613bf457613bf36123f6565b5b835b81811015613c3b57805167ffffffffffffffff811115613c1957613c186120a2565b5b808601613c268982613b56565b85526020850194505050602081019050613bf6565b5050509392505050565b5f82601f830112613c5957613c586120a2565b5b8151613c69848260208601613bbf565b91505092915050565b5f60408284031215613c8757613c866122d0565b5b613c916040612118565b90505f82015167ffffffffffffffff811115613cb057613caf6122d4565b5b613cbc84828501613b15565b5f83015250602082015167ffffffffffffffff811115613cdf57613cde6122d4565b5b613ceb84828501613c45565b60208301525092915050565b5f60208284031215613d0c57613d0b611fd8565b5b5f82015167ffffffffffffffff811115613d2957613d28611fdc565b5b613d3584828501613c72565b91505092915050565b613d4781612ac3565b8114613d51575f5ffd5b50565b5f81519050613d6281613d3e565b92915050565b5f60e08284031215613d7d57613d7c6122d0565b5b613d8760e0612118565b90505f82015167ffffffffffffffff811115613da657613da56122d4565b5b613db2848285016139e5565b5f830152506020613dc584828501613d54565b602083015250604082015167ffffffffffffffff811115613de957613de86122d4565b5b613df5848285016139e5565b604083015250606082015167ffffffffffffffff811115613e1957613e186122d4565b5b613e25848285016139e5565b606083015250608082015167ffffffffffffffff811115613e4957613e486122d4565b5b613e55848285016139e5565b60808301525060a082015167ffffffffffffffff811115613e7957613e786122d4565b5b613e85848285016139e5565b60a08301525060c0613e9984828501613a12565b60c08301525092915050565b5f60208284031215613eba57613eb9611fd8565b5b5f82015167ffffffffffffffff811115613ed757613ed6611fdc565b5b613ee384828501613d68565b91505092915050565b5f604082019050613eff5f830185612bff565b8181036020830152613f1181846131b4565b90509392505050565b613f2381611f96565b82525050565b5f604082019050613f3c5f830185613f1a565b8181036020830152613f4e81846131b4565b9050939250505056fe6080604052348015600e575f5ffd5b5061010e8061001c5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063bcfb195914602a575b5f5ffd5b60406004803603810190603c919060b2565b6042565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f608682605f565b9050919050565b609481607e565b8114609d575f5ffd5b50565b5f8135905060ac81608d565b92915050565b5f6020828403121560c45760c3605b565b5b5f60cf8482850160a0565b9150509291505056fea26469706673582212209cda8df608d0b8508563a095276e5749975d1880b308e60dde1ea2ed7e1e4e6864736f6c63430008210033a264697066735822122041dca53df42d449dab6a9843540a0918b07630b104179c955bf7709f843882c364736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/ISCTest.sol b/packages/evm/evmtest/ISCTest.sol index 06affca14c..e8c7b3cdec 100644 --- a/packages/evm/evmtest/ISCTest.sol +++ b/packages/evm/evmtest/ISCTest.sol @@ -26,6 +26,10 @@ contract ISCTest { emit EntropyEvent(e); } + function getTimestampAndBlockNumber() public view returns (uint256 timestamp, uint256 blockNumber) { + return (block.timestamp, block.number); + } + event RequestIDEvent(ISCRequestID reqID); function emitRequestID() public { diff --git a/packages/evm/evmtest/RevertTest.bin b/packages/evm/evmtest/RevertTest.bin index edee2c4b78..238262bbf2 100644 --- a/packages/evm/evmtest/RevertTest.bin +++ b/packages/evm/evmtest/RevertTest.bin @@ -1 +1 @@ -60806040525f5f5f6101000a81548163ffffffff021916908363ffffffff160217905550348015602d575f5ffd5b5061022e8061003b5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c806306661abd146100435780630f1146e914610061578063e3b2f8311461006b575b5f5ffd5b61004b610075565b604051610058919061017b565b60405180910390f35b610069610089565b005b6100736100c7565b005b5f5f9054906101000a900463ffffffff1681565b60015f5f9054906101000a900463ffffffff166100a691906101c1565b5f5f6101000a81548163ffffffff021916908363ffffffff16021790555f5ffd5b5f3073ffffffffffffffffffffffffffffffffffffffff16630f1146e96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561010d575f5ffd5b505af192505050801561011e575060015b61012a575f905061012f565b600190505b8015610139575f5ffd5b5f5f5f9054906101000a900463ffffffff1663ffffffff161461015a575f5ffd5b50565b5f63ffffffff82169050919050565b6101758161015d565b82525050565b5f60208201905061018e5f83018461016c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101cb8261015d565b91506101d68361015d565b9250828201905063ffffffff8111156101f2576101f1610194565b5b9291505056fea26469706673582212207d39b231e672f14521c9d52c4c4b3a62e690ae1bc475243e58b14875d658709b64736f6c634300081d0033 \ No newline at end of file +60806040525f5f5f6101000a81548163ffffffff021916908363ffffffff160217905550348015602d575f5ffd5b5061022e8061003b5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c806306661abd146100435780630f1146e914610061578063e3b2f8311461006b575b5f5ffd5b61004b610075565b604051610058919061017b565b60405180910390f35b610069610089565b005b6100736100c7565b005b5f5f9054906101000a900463ffffffff1681565b60015f5f9054906101000a900463ffffffff166100a691906101c1565b5f5f6101000a81548163ffffffff021916908363ffffffff16021790555f5ffd5b5f3073ffffffffffffffffffffffffffffffffffffffff16630f1146e96040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561010d575f5ffd5b505af192505050801561011e575060015b61012a575f905061012f565b600190505b8015610139575f5ffd5b5f5f5f9054906101000a900463ffffffff1663ffffffff161461015a575f5ffd5b50565b5f63ffffffff82169050919050565b6101758161015d565b82525050565b5f60208201905061018e5f83018461016c565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101cb8261015d565b91506101d68361015d565b9250828201905063ffffffff8111156101f2576101f1610194565b5b9291505056fea264697066735822122071e083f46956ec54b0f0718127aa0e78a0d72cec431219fb9e476470ee466a9864736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/SelfDestruct6780.bin b/packages/evm/evmtest/SelfDestruct6780.bin index 9f9767424d..8ff1ae7943 100644 --- a/packages/evm/evmtest/SelfDestruct6780.bin +++ b/packages/evm/evmtest/SelfDestruct6780.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b5061010e8061001c5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063bcfb195914602a575b5f5ffd5b60406004803603810190603c919060b2565b6042565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f608682605f565b9050919050565b609481607e565b8114609d575f5ffd5b50565b5f8135905060ac81608d565b92915050565b5f6020828403121560c45760c3605b565b5b5f60cf8482850160a0565b9150509291505056fea2646970667358221220dade1035a0f173d8ea48a6e6cd294cef766c3e99667ac5a5af101b96ddee8fff64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b5061010e8061001c5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063bcfb195914602a575b5f5ffd5b60406004803603810190603c919060b2565b6042565b005b8073ffffffffffffffffffffffffffffffffffffffff16ff5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f608682605f565b9050919050565b609481607e565b8114609d575f5ffd5b50565b5f8135905060ac81608d565b92915050565b5f6020828403121560c45760c3605b565b5b5f60cf8482850160a0565b9150509291505056fea26469706673582212209cda8df608d0b8508563a095276e5749975d1880b308e60dde1ea2ed7e1e4e6864736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/Storage.bin b/packages/evm/evmtest/Storage.bin index 425374bcbc..9f2ae371d2 100644 --- a/packages/evm/evmtest/Storage.bin +++ b/packages/evm/evmtest/Storage.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b506040516103653803806103658339818101604052810190602e9190608a565b805f5f6101000a81548163ffffffff021916908363ffffffff1602179055505060b0565b5f5ffd5b5f63ffffffff82169050919050565b606c816056565b81146075575f5ffd5b50565b5f815190506084816065565b92915050565b5f60208284031215609c57609b6052565b5b5f60a7848285016078565b91505092915050565b6102a8806100bd5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80632e64cec114610043578063b9e9538214610061578063d09de08a1461007d575b5f5ffd5b61004b610087565b604051610058919061019c565b60405180910390f35b61007b600480360381019061007691906101e3565b61009e565b005b6100856100f7565b005b5f5f5f9054906101000a900463ffffffff16905090565b805f5f6101000a81548163ffffffff021916908363ffffffff1602179055507f1216415e6088a976b049b2d1fc9e52c96a2199b400aa37dc4aa9585710d03b87816040516100ec919061019c565b60405180910390a150565b60015f5f8282829054906101000a900463ffffffff16610117919061023b565b92506101000a81548163ffffffff021916908363ffffffff1602179055507f1216415e6088a976b049b2d1fc9e52c96a2199b400aa37dc4aa9585710d03b875f5f9054906101000a900463ffffffff16604051610174919061019c565b60405180910390a1565b5f63ffffffff82169050919050565b6101968161017e565b82525050565b5f6020820190506101af5f83018461018d565b92915050565b5f5ffd5b6101c28161017e565b81146101cc575f5ffd5b50565b5f813590506101dd816101b9565b92915050565b5f602082840312156101f8576101f76101b5565b5b5f610205848285016101cf565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6102458261017e565b91506102508361017e565b9250828201905063ffffffff81111561026c5761026b61020e565b5b9291505056fea2646970667358221220c86c70ada69370c5a6eee58a9ab5bf0f78e0a46925993338d6bbf65a7f6a059664736f6c634300081e0033 \ No newline at end of file +6080604052348015600e575f5ffd5b506040516103653803806103658339818101604052810190602e9190608a565b805f5f6101000a81548163ffffffff021916908363ffffffff1602179055505060b0565b5f5ffd5b5f63ffffffff82169050919050565b606c816056565b81146075575f5ffd5b50565b5f815190506084816065565b92915050565b5f60208284031215609c57609b6052565b5b5f60a7848285016078565b91505092915050565b6102a8806100bd5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80632e64cec114610043578063b9e9538214610061578063d09de08a1461007d575b5f5ffd5b61004b610087565b604051610058919061019c565b60405180910390f35b61007b600480360381019061007691906101e3565b61009e565b005b6100856100f7565b005b5f5f5f9054906101000a900463ffffffff16905090565b805f5f6101000a81548163ffffffff021916908363ffffffff1602179055507f1216415e6088a976b049b2d1fc9e52c96a2199b400aa37dc4aa9585710d03b87816040516100ec919061019c565b60405180910390a150565b60015f5f8282829054906101000a900463ffffffff16610117919061023b565b92506101000a81548163ffffffff021916908363ffffffff1602179055507f1216415e6088a976b049b2d1fc9e52c96a2199b400aa37dc4aa9585710d03b875f5f9054906101000a900463ffffffff16604051610174919061019c565b60405180910390a1565b5f63ffffffff82169050919050565b6101968161017e565b82525050565b5f6020820190506101af5f83018461018d565b92915050565b5f5ffd5b6101c28161017e565b81146101cc575f5ffd5b50565b5f813590506101dd816101b9565b92915050565b5f602082840312156101f8576101f76101b5565b5b5f610205848285016101cf565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6102458261017e565b91506102508361017e565b9250828201905063ffffffff81111561026c5761026b61020e565b5b9291505056fea26469706673582212208bdb3740607d5741bc6681ba75e14e4770e6a39b89d27087442affd7a946377064736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/wiki_how_tos/ERC20Coin.bin b/packages/evm/evmtest/wiki_how_tos/ERC20Coin.bin index 396d570c45..818432f0e0 100644 --- a/packages/evm/evmtest/wiki_how_tos/ERC20Coin.bin +++ b/packages/evm/evmtest/wiki_how_tos/ERC20Coin.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b506120148061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f5ffd5b61009d6101fd565b6040516100aa919061104e565b60405180910390f35b6100cd60048036038101906100c8919061110c565b61028d565b6040516100da9190611164565b60405180910390f35b6100eb6103ca565b6040516100f8919061118c565b60405180910390f35b61011b600480360381019061011691906111a5565b61046d565b6040516101289190611164565b60405180910390f35b6101396107a9565b6040516101469190611210565b60405180910390f35b61016960048036038101906101649190611229565b6107be565b604051610176919061118c565b60405180910390f35b61018761086b565b604051610194919061104e565b60405180910390f35b6101b760048036038101906101b2919061110c565b6108fb565b6040516101c49190611164565b60405180910390f35b6101e760048036038101906101e29190611254565b610b84565b6040516101f4919061118c565b60405180910390f35b60606001805461020c906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610238906112bf565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f67ffffffffffffffff80168211156102db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d290611339565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636df2519733855f866040518563ffffffff1660e01b815260040161032e949392919061141b565b5f604051808303815f87803b158015610345575f5ffd5b505af1158015610357573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103b8919061118c565b60405180910390a36001905092915050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e12214005f6040518263ffffffff1660e01b81526004016104189190611465565b5f60405180830381865afa158015610432573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061045a919061173c565b60c0015167ffffffffffffffff16905090565b5f67ffffffffffffffff80168211156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611339565b60405180910390fd5b6104c3610f8e565b600167ffffffffffffffff8111156104de576104dd611489565b5b60405190808252806020026020018201604052801561051757816020015b610504610fa8565b8152602001906001900390816104fc5790505b50815f01819052505f805461052b906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610557906112bf565b80156105a25780601f10610579576101008083540402835291602001916105a2565b820191905f5260205f20905b81548152906001019060200180831161058557829003601f168201915b5050505050815f01515f815181106105bd576105bc611783565b5b60200260200101515f018190525082815f01515f815181106105e2576105e1611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633865d9818633846040518463ffffffff1660e01b815260040161065993929190611a5b565b5f604051808303815f87803b158015610670575f5ffd5b505af1158015610682573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107385773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b815260040161070a93929190611a5b565b5f604051808303815f87803b158015610721575f5ffd5b505af1158015610733573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610795919061118c565b60405180910390a360019150509392505050565b5f60035f9054906101000a900460ff16905090565b5f5f6107c983610cc9565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c5f836040518363ffffffff1660e01b815260040161081a929190611b10565b602060405180830381865afa158015610835573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108599190611b45565b67ffffffffffffffff16915050919050565b60606002805461087a906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906112bf565b80156108f15780601f106108c8576101008083540402835291602001916108f1565b820191905f5260205f20905b8154815290600101906020018083116108d457829003601f168201915b5050505050905090565b5f67ffffffffffffffff8016821115610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611339565b60405180910390fd5b610951610f8e565b600167ffffffffffffffff81111561096c5761096b611489565b5b6040519080825280602002602001820160405280156109a557816020015b610992610fa8565b81526020019060019003908161098a5790505b50815f01819052505f80546109b9906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546109e5906112bf565b8015610a305780601f10610a0757610100808354040283529160200191610a30565b820191905f5260205f20905b815481529060010190602001808311610a1357829003601f168201915b5050505050815f01515f81518110610a4b57610a4a611783565b5b60200260200101515f018190525082815f01515f81518110610a7057610a6f611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b8152600401610ae793929190611a5b565b5f604051808303815f87803b158015610afe575f5ffd5b505af1158015610b10573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b71919061118c565b60405180910390a3600191505092915050565b5f5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630af4187d85856040518363ffffffff1660e01b8152600401610bd5929190611b70565b5f60405180830381865afa158015610bef573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c179190611ed8565b9050610cb65f8054610c28906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c54906112bf565b8015610c9f5780601f10610c7657610100808354040283529160200191610c9f565b820191905f5260205f20905b815481529060010190602001808311610c8257829003601f168201915b5050505050825f0151610e3a90919063ffffffff16565b67ffffffffffffffff1691505092915050565b610cd1610fcb565b5f82604051602001610ce39190611f64565b6040516020818303038152906040529050610cfc610fcb565b81516001610d0a9190611fab565b67ffffffffffffffff811115610d2357610d22611489565b5b6040519080825280601f01601f191660200182016040528015610d555781602001600182028036833780820191505090505b50815f0181905250600360f81b815f01515f81518110610d7857610d77611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b8251811015610e2f57828181518110610dc757610dc6611783565b5b602001015160f81c60f81b825f0151600183610de39190611fab565b81518110610df457610df3611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610dab565b508092505050919050565b5f5f5f90505b8351811015610ea957610e70848281518110610e5f57610e5e611783565b5b60200260200101515f015184610eb4565b15610e9c57838181518110610e8857610e87611783565b5b602002602001015160200151915050610eae565b8080600101915050610e40565b505f90505b92915050565b5f610ebf8383610ec7565b905092915050565b5f8151835114610ed9575f9050610f88565b5f5f90505b8351811015610f8257828181518110610efa57610ef9611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110610f3a57610f39611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f75575f915050610f88565b8080600101915050610ede565b50600190505b92915050565b604051806040016040528060608152602001606081525090565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b6040518060200160405280606081525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61102082610fde565b61102a8185610fe8565b935061103a818560208601610ff8565b61104381611006565b840191505092915050565b5f6020820190508181035f8301526110668184611016565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a88261107f565b9050919050565b6110b88161109e565b81146110c2575f5ffd5b50565b5f813590506110d3816110af565b92915050565b5f819050919050565b6110eb816110d9565b81146110f5575f5ffd5b50565b5f81359050611106816110e2565b92915050565b5f5f6040838503121561112257611121611077565b5b5f61112f858286016110c5565b9250506020611140858286016110f8565b9150509250929050565b5f8115159050919050565b61115e8161114a565b82525050565b5f6020820190506111775f830184611155565b92915050565b611186816110d9565b82525050565b5f60208201905061119f5f83018461117d565b92915050565b5f5f5f606084860312156111bc576111bb611077565b5b5f6111c9868287016110c5565b93505060206111da868287016110c5565b92505060406111eb868287016110f8565b9150509250925092565b5f60ff82169050919050565b61120a816111f5565b82525050565b5f6020820190506112235f830184611201565b92915050565b5f6020828403121561123e5761123d611077565b5b5f61124b848285016110c5565b91505092915050565b5f5f6040838503121561126a57611269611077565b5b5f611277858286016110c5565b9250506020611288858286016110c5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112d657607f821691505b6020821081036112e9576112e8611292565b5b50919050565b7f616d6f756e7420697320746f6f206c61726765000000000000000000000000005f82015250565b5f611323601383610fe8565b915061132e826112ef565b602082019050919050565b5f6020820190508181035f83015261135081611317565b9050919050565b6113608161109e565b82525050565b5f819050815f5260205f209050919050565b5f8154611384816112bf565b61138e8186610fe8565b9450600182165f81146113a857600181146113be576113f0565b60ff1983168652811515602002860193506113f0565b6113c785611366565b5f5b838110156113e8578154818901526001820191506020810190506113c9565b808801955050505b50505092915050565b5f67ffffffffffffffff82169050919050565b611415816113f9565b82525050565b5f60808201905061142e5f830187611357565b61143b6020830186611357565b818103604083015261144d8185611378565b905061145c606083018461140c565b95945050505050565b5f6020820190508181035f83015261147d8184611378565b905092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114bf82611006565b810181811067ffffffffffffffff821117156114de576114dd611489565b5b80604052505050565b5f6114f061106e565b90506114fc82826114b6565b919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561152757611526611489565b5b61153082611006565b9050602081019050919050565b5f61154f61154a8461150d565b6114e7565b90508281526020810184848401111561156b5761156a611509565b5b611576848285610ff8565b509392505050565b5f82601f83011261159257611591611505565b5b81516115a284826020860161153d565b91505092915050565b6115b4816111f5565b81146115be575f5ffd5b50565b5f815190506115cf816115ab565b92915050565b6115de816113f9565b81146115e8575f5ffd5b50565b5f815190506115f9816115d5565b92915050565b5f60e0828403121561161457611613611485565b5b61161e60e06114e7565b90505f82015167ffffffffffffffff81111561163d5761163c611501565b5b6116498482850161157e565b5f83015250602061165c848285016115c1565b602083015250604082015167ffffffffffffffff8111156116805761167f611501565b5b61168c8482850161157e565b604083015250606082015167ffffffffffffffff8111156116b0576116af611501565b5b6116bc8482850161157e565b606083015250608082015167ffffffffffffffff8111156116e0576116df611501565b5b6116ec8482850161157e565b60808301525060a082015167ffffffffffffffff8111156117105761170f611501565b5b61171c8482850161157e565b60a08301525060c0611730848285016115eb565b60c08301525092915050565b5f6020828403121561175157611750611077565b5b5f82015167ffffffffffffffff81111561176e5761176d61107b565b5b61177a848285016115ff565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6117f382610fde565b6117fd81856117d9565b935061180d818560208601610ff8565b61181681611006565b840191505092915050565b61182a816113f9565b82525050565b5f604083015f8301518482035f86015261184a82826117e9565b915050602083015161185f6020860182611821565b508091505092915050565b5f6118758383611830565b905092915050565b5f602082019050919050565b5f611893826117b0565b61189d81856117ba565b9350836020820285016118af856117ca565b805f5b858110156118ea57848403895281516118cb858261186a565b94506118d68361187d565b925060208a019950506001810190506118b2565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f61193882611925565b9050919050565b6119488161192e565b82525050565b5f604083015f8301516119635f86018261193f565b506020830151848203602086015261197b82826117e9565b9150508091505092915050565b5f611993838361194e565b905092915050565b5f602082019050919050565b5f6119b1826118fc565b6119bb8185611906565b9350836020820285016119cd85611916565b805f5b85811015611a0857848403895281516119e98582611988565b94506119f48361199b565b925060208a019950506001810190506119d0565b50829750879550505050505092915050565b5f604083015f8301518482035f860152611a348282611889565b91505060208301518482036020860152611a4e82826119a7565b9150508091505092915050565b5f606082019050611a6e5f830186611357565b611a7b6020830185611357565b8181036040830152611a8d8184611a1a565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f611abb82611a97565b611ac58185611aa1565b9350611ad5818560208601610ff8565b611ade81611006565b840191505092915050565b5f602083015f8301518482035f860152611b038282611ab1565b9150508091505092915050565b5f6040820190508181035f830152611b288185611378565b90508181036020830152611b3c8184611ae9565b90509392505050565b5f60208284031215611b5a57611b59611077565b5b5f611b67848285016115eb565b91505092915050565b5f604082019050611b835f830185611357565b611b906020830184611357565b9392505050565b5f67ffffffffffffffff821115611bb157611bb0611489565b5b602082029050602081019050919050565b5f5ffd5b5f60408284031215611bdb57611bda611485565b5b611be560406114e7565b90505f82015167ffffffffffffffff811115611c0457611c03611501565b5b611c108482850161157e565b5f830152506020611c23848285016115eb565b60208301525092915050565b5f611c41611c3c84611b97565b6114e7565b90508083825260208201905060208402830185811115611c6457611c63611bc2565b5b835b81811015611cab57805167ffffffffffffffff811115611c8957611c88611505565b5b808601611c968982611bc6565b85526020850194505050602081019050611c66565b5050509392505050565b5f82601f830112611cc957611cc8611505565b5b8151611cd9848260208601611c2f565b91505092915050565b5f67ffffffffffffffff821115611cfc57611cfb611489565b5b602082029050602081019050919050565b611d1681611925565b8114611d20575f5ffd5b50565b5f81519050611d3181611d0d565b92915050565b5f60408284031215611d4c57611d4b611485565b5b611d5660406114e7565b90505f611d6584828501611d23565b5f83015250602082015167ffffffffffffffff811115611d8857611d87611501565b5b611d948482850161157e565b60208301525092915050565b5f611db2611dad84611ce2565b6114e7565b90508083825260208201905060208402830185811115611dd557611dd4611bc2565b5b835b81811015611e1c57805167ffffffffffffffff811115611dfa57611df9611505565b5b808601611e078982611d37565b85526020850194505050602081019050611dd7565b5050509392505050565b5f82601f830112611e3a57611e39611505565b5b8151611e4a848260208601611da0565b91505092915050565b5f60408284031215611e6857611e67611485565b5b611e7260406114e7565b90505f82015167ffffffffffffffff811115611e9157611e90611501565b5b611e9d84828501611cb5565b5f83015250602082015167ffffffffffffffff811115611ec057611ebf611501565b5b611ecc84828501611e26565b60208301525092915050565b5f60208284031215611eed57611eec611077565b5b5f82015167ffffffffffffffff811115611f0a57611f0961107b565b5b611f1684828501611e53565b91505092915050565b5f8160601b9050919050565b5f611f3582611f1f565b9050919050565b5f611f4682611f2b565b9050919050565b611f5e611f598261109e565b611f3c565b82525050565b5f611f6f8284611f4d565b60148201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fb5826110d9565b9150611fc0836110d9565b9250828201905080821115611fd857611fd7611f7e565b5b9291505056fea26469706673582212203a7cd319511f44764131658a92a2dc4f3f729fd4eff3700fdb7d8f8a8b81f14f64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b506120148061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f5ffd5b61009d6101fd565b6040516100aa919061104e565b60405180910390f35b6100cd60048036038101906100c8919061110c565b61028d565b6040516100da9190611164565b60405180910390f35b6100eb6103ca565b6040516100f8919061118c565b60405180910390f35b61011b600480360381019061011691906111a5565b61046d565b6040516101289190611164565b60405180910390f35b6101396107a9565b6040516101469190611210565b60405180910390f35b61016960048036038101906101649190611229565b6107be565b604051610176919061118c565b60405180910390f35b61018761086b565b604051610194919061104e565b60405180910390f35b6101b760048036038101906101b2919061110c565b6108fb565b6040516101c49190611164565b60405180910390f35b6101e760048036038101906101e29190611254565b610b84565b6040516101f4919061118c565b60405180910390f35b60606001805461020c906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610238906112bf565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f67ffffffffffffffff80168211156102db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d290611339565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636df2519733855f866040518563ffffffff1660e01b815260040161032e949392919061141b565b5f604051808303815f87803b158015610345575f5ffd5b505af1158015610357573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103b8919061118c565b60405180910390a36001905092915050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e12214005f6040518263ffffffff1660e01b81526004016104189190611465565b5f60405180830381865afa158015610432573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061045a919061173c565b60c0015167ffffffffffffffff16905090565b5f67ffffffffffffffff80168211156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611339565b60405180910390fd5b6104c3610f8e565b600167ffffffffffffffff8111156104de576104dd611489565b5b60405190808252806020026020018201604052801561051757816020015b610504610fa8565b8152602001906001900390816104fc5790505b50815f01819052505f805461052b906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610557906112bf565b80156105a25780601f10610579576101008083540402835291602001916105a2565b820191905f5260205f20905b81548152906001019060200180831161058557829003601f168201915b5050505050815f01515f815181106105bd576105bc611783565b5b60200260200101515f018190525082815f01515f815181106105e2576105e1611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633865d9818633846040518463ffffffff1660e01b815260040161065993929190611a5b565b5f604051808303815f87803b158015610670575f5ffd5b505af1158015610682573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107385773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b815260040161070a93929190611a5b565b5f604051808303815f87803b158015610721575f5ffd5b505af1158015610733573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610795919061118c565b60405180910390a360019150509392505050565b5f60035f9054906101000a900460ff16905090565b5f5f6107c983610cc9565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c5f836040518363ffffffff1660e01b815260040161081a929190611b10565b602060405180830381865afa158015610835573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108599190611b45565b67ffffffffffffffff16915050919050565b60606002805461087a906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906112bf565b80156108f15780601f106108c8576101008083540402835291602001916108f1565b820191905f5260205f20905b8154815290600101906020018083116108d457829003601f168201915b5050505050905090565b5f67ffffffffffffffff8016821115610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611339565b60405180910390fd5b610951610f8e565b600167ffffffffffffffff81111561096c5761096b611489565b5b6040519080825280602002602001820160405280156109a557816020015b610992610fa8565b81526020019060019003908161098a5790505b50815f01819052505f80546109b9906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546109e5906112bf565b8015610a305780601f10610a0757610100808354040283529160200191610a30565b820191905f5260205f20905b815481529060010190602001808311610a1357829003601f168201915b5050505050815f01515f81518110610a4b57610a4a611783565b5b60200260200101515f018190525082815f01515f81518110610a7057610a6f611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b8152600401610ae793929190611a5b565b5f604051808303815f87803b158015610afe575f5ffd5b505af1158015610b10573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b71919061118c565b60405180910390a3600191505092915050565b5f5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630af4187d85856040518363ffffffff1660e01b8152600401610bd5929190611b70565b5f60405180830381865afa158015610bef573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c179190611ed8565b9050610cb65f8054610c28906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c54906112bf565b8015610c9f5780601f10610c7657610100808354040283529160200191610c9f565b820191905f5260205f20905b815481529060010190602001808311610c8257829003601f168201915b5050505050825f0151610e3a90919063ffffffff16565b67ffffffffffffffff1691505092915050565b610cd1610fcb565b5f82604051602001610ce39190611f64565b6040516020818303038152906040529050610cfc610fcb565b81516001610d0a9190611fab565b67ffffffffffffffff811115610d2357610d22611489565b5b6040519080825280601f01601f191660200182016040528015610d555781602001600182028036833780820191505090505b50815f0181905250600360f81b815f01515f81518110610d7857610d77611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b8251811015610e2f57828181518110610dc757610dc6611783565b5b602001015160f81c60f81b825f0151600183610de39190611fab565b81518110610df457610df3611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610dab565b508092505050919050565b5f5f5f90505b8351811015610ea957610e70848281518110610e5f57610e5e611783565b5b60200260200101515f015184610eb4565b15610e9c57838181518110610e8857610e87611783565b5b602002602001015160200151915050610eae565b8080600101915050610e40565b505f90505b92915050565b5f610ebf8383610ec7565b905092915050565b5f8151835114610ed9575f9050610f88565b5f5f90505b8351811015610f8257828181518110610efa57610ef9611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110610f3a57610f39611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f75575f915050610f88565b8080600101915050610ede565b50600190505b92915050565b604051806040016040528060608152602001606081525090565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b6040518060200160405280606081525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61102082610fde565b61102a8185610fe8565b935061103a818560208601610ff8565b61104381611006565b840191505092915050565b5f6020820190508181035f8301526110668184611016565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a88261107f565b9050919050565b6110b88161109e565b81146110c2575f5ffd5b50565b5f813590506110d3816110af565b92915050565b5f819050919050565b6110eb816110d9565b81146110f5575f5ffd5b50565b5f81359050611106816110e2565b92915050565b5f5f6040838503121561112257611121611077565b5b5f61112f858286016110c5565b9250506020611140858286016110f8565b9150509250929050565b5f8115159050919050565b61115e8161114a565b82525050565b5f6020820190506111775f830184611155565b92915050565b611186816110d9565b82525050565b5f60208201905061119f5f83018461117d565b92915050565b5f5f5f606084860312156111bc576111bb611077565b5b5f6111c9868287016110c5565b93505060206111da868287016110c5565b92505060406111eb868287016110f8565b9150509250925092565b5f60ff82169050919050565b61120a816111f5565b82525050565b5f6020820190506112235f830184611201565b92915050565b5f6020828403121561123e5761123d611077565b5b5f61124b848285016110c5565b91505092915050565b5f5f6040838503121561126a57611269611077565b5b5f611277858286016110c5565b9250506020611288858286016110c5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112d657607f821691505b6020821081036112e9576112e8611292565b5b50919050565b7f616d6f756e7420697320746f6f206c61726765000000000000000000000000005f82015250565b5f611323601383610fe8565b915061132e826112ef565b602082019050919050565b5f6020820190508181035f83015261135081611317565b9050919050565b6113608161109e565b82525050565b5f819050815f5260205f209050919050565b5f8154611384816112bf565b61138e8186610fe8565b9450600182165f81146113a857600181146113be576113f0565b60ff1983168652811515602002860193506113f0565b6113c785611366565b5f5b838110156113e8578154818901526001820191506020810190506113c9565b808801955050505b50505092915050565b5f67ffffffffffffffff82169050919050565b611415816113f9565b82525050565b5f60808201905061142e5f830187611357565b61143b6020830186611357565b818103604083015261144d8185611378565b905061145c606083018461140c565b95945050505050565b5f6020820190508181035f83015261147d8184611378565b905092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114bf82611006565b810181811067ffffffffffffffff821117156114de576114dd611489565b5b80604052505050565b5f6114f061106e565b90506114fc82826114b6565b919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561152757611526611489565b5b61153082611006565b9050602081019050919050565b5f61154f61154a8461150d565b6114e7565b90508281526020810184848401111561156b5761156a611509565b5b611576848285610ff8565b509392505050565b5f82601f83011261159257611591611505565b5b81516115a284826020860161153d565b91505092915050565b6115b4816111f5565b81146115be575f5ffd5b50565b5f815190506115cf816115ab565b92915050565b6115de816113f9565b81146115e8575f5ffd5b50565b5f815190506115f9816115d5565b92915050565b5f60e0828403121561161457611613611485565b5b61161e60e06114e7565b90505f82015167ffffffffffffffff81111561163d5761163c611501565b5b6116498482850161157e565b5f83015250602061165c848285016115c1565b602083015250604082015167ffffffffffffffff8111156116805761167f611501565b5b61168c8482850161157e565b604083015250606082015167ffffffffffffffff8111156116b0576116af611501565b5b6116bc8482850161157e565b606083015250608082015167ffffffffffffffff8111156116e0576116df611501565b5b6116ec8482850161157e565b60808301525060a082015167ffffffffffffffff8111156117105761170f611501565b5b61171c8482850161157e565b60a08301525060c0611730848285016115eb565b60c08301525092915050565b5f6020828403121561175157611750611077565b5b5f82015167ffffffffffffffff81111561176e5761176d61107b565b5b61177a848285016115ff565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6117f382610fde565b6117fd81856117d9565b935061180d818560208601610ff8565b61181681611006565b840191505092915050565b61182a816113f9565b82525050565b5f604083015f8301518482035f86015261184a82826117e9565b915050602083015161185f6020860182611821565b508091505092915050565b5f6118758383611830565b905092915050565b5f602082019050919050565b5f611893826117b0565b61189d81856117ba565b9350836020820285016118af856117ca565b805f5b858110156118ea57848403895281516118cb858261186a565b94506118d68361187d565b925060208a019950506001810190506118b2565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f61193882611925565b9050919050565b6119488161192e565b82525050565b5f604083015f8301516119635f86018261193f565b506020830151848203602086015261197b82826117e9565b9150508091505092915050565b5f611993838361194e565b905092915050565b5f602082019050919050565b5f6119b1826118fc565b6119bb8185611906565b9350836020820285016119cd85611916565b805f5b85811015611a0857848403895281516119e98582611988565b94506119f48361199b565b925060208a019950506001810190506119d0565b50829750879550505050505092915050565b5f604083015f8301518482035f860152611a348282611889565b91505060208301518482036020860152611a4e82826119a7565b9150508091505092915050565b5f606082019050611a6e5f830186611357565b611a7b6020830185611357565b8181036040830152611a8d8184611a1a565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f611abb82611a97565b611ac58185611aa1565b9350611ad5818560208601610ff8565b611ade81611006565b840191505092915050565b5f602083015f8301518482035f860152611b038282611ab1565b9150508091505092915050565b5f6040820190508181035f830152611b288185611378565b90508181036020830152611b3c8184611ae9565b90509392505050565b5f60208284031215611b5a57611b59611077565b5b5f611b67848285016115eb565b91505092915050565b5f604082019050611b835f830185611357565b611b906020830184611357565b9392505050565b5f67ffffffffffffffff821115611bb157611bb0611489565b5b602082029050602081019050919050565b5f5ffd5b5f60408284031215611bdb57611bda611485565b5b611be560406114e7565b90505f82015167ffffffffffffffff811115611c0457611c03611501565b5b611c108482850161157e565b5f830152506020611c23848285016115eb565b60208301525092915050565b5f611c41611c3c84611b97565b6114e7565b90508083825260208201905060208402830185811115611c6457611c63611bc2565b5b835b81811015611cab57805167ffffffffffffffff811115611c8957611c88611505565b5b808601611c968982611bc6565b85526020850194505050602081019050611c66565b5050509392505050565b5f82601f830112611cc957611cc8611505565b5b8151611cd9848260208601611c2f565b91505092915050565b5f67ffffffffffffffff821115611cfc57611cfb611489565b5b602082029050602081019050919050565b611d1681611925565b8114611d20575f5ffd5b50565b5f81519050611d3181611d0d565b92915050565b5f60408284031215611d4c57611d4b611485565b5b611d5660406114e7565b90505f611d6584828501611d23565b5f83015250602082015167ffffffffffffffff811115611d8857611d87611501565b5b611d948482850161157e565b60208301525092915050565b5f611db2611dad84611ce2565b6114e7565b90508083825260208201905060208402830185811115611dd557611dd4611bc2565b5b835b81811015611e1c57805167ffffffffffffffff811115611dfa57611df9611505565b5b808601611e078982611d37565b85526020850194505050602081019050611dd7565b5050509392505050565b5f82601f830112611e3a57611e39611505565b5b8151611e4a848260208601611da0565b91505092915050565b5f60408284031215611e6857611e67611485565b5b611e7260406114e7565b90505f82015167ffffffffffffffff811115611e9157611e90611501565b5b611e9d84828501611cb5565b5f83015250602082015167ffffffffffffffff811115611ec057611ebf611501565b5b611ecc84828501611e26565b60208301525092915050565b5f60208284031215611eed57611eec611077565b5b5f82015167ffffffffffffffff811115611f0a57611f0961107b565b5b611f1684828501611e53565b91505092915050565b5f8160601b9050919050565b5f611f3582611f1f565b9050919050565b5f611f4682611f2b565b9050919050565b611f5e611f598261109e565b611f3c565b82525050565b5f611f6f8284611f4d565b60148201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fb5826110d9565b9150611fc0836110d9565b9250828201905080821115611fd857611fd7611f7e565b5b9291505056fea26469706673582212201ba50e725b8d2865265a7a1945ddeb884bf612a52f2c2e99f162f256f2e7a6be64736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/wiki_how_tos/Entropy.bin b/packages/evm/evmtest/wiki_how_tos/Entropy.bin index 4ae2ddd364..61c0936947 100644 --- a/packages/evm/evmtest/wiki_how_tos/Entropy.bin +++ b/packages/evm/evmtest/wiki_how_tos/Entropy.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b506101b58061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c80633772d53f1461002d575b5f5ffd5b610035610037565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635404bbf76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610095573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100b9919061012c565b90507f2778726dc1b9d6d2ee2628a18174907da485ba8765490e157ddf1202528ed5bc816040516100ea9190610166565b60405180910390a150565b5f5ffd5b5f819050919050565b61010b816100f9565b8114610115575f5ffd5b50565b5f8151905061012681610102565b92915050565b5f60208284031215610141576101406100f5565b5b5f61014e84828501610118565b91505092915050565b610160816100f9565b82525050565b5f6020820190506101795f830184610157565b9291505056fea264697066735822122070259ac312ce2e9d6a2c3ba80554a13780d83c1638e197a6ee1b842bf003fd9764736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b506101b58061001c5f395ff3fe608060405234801561000f575f5ffd5b5060043610610029575f3560e01c80633772d53f1461002d575b5f5ffd5b610035610037565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635404bbf76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610095573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100b9919061012c565b90507f2778726dc1b9d6d2ee2628a18174907da485ba8765490e157ddf1202528ed5bc816040516100ea9190610166565b60405180910390a150565b5f5ffd5b5f819050919050565b61010b816100f9565b8114610115575f5ffd5b50565b5f8151905061012681610102565b92915050565b5f60208284031215610141576101406100f5565b5b5f61014e84828501610118565b91505092915050565b610160816100f9565b82525050565b5f6020820190506101795f830184610157565b9291505056fea264697066735822122081309f01b7912014f6b72b68070f7e6be4da15a2b662cf13a5bfaefce141dd1c64736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/evmtest/wiki_how_tos/GetBalance.bin b/packages/evm/evmtest/wiki_how_tos/GetBalance.bin index 5388fec81b..dc17f9863d 100644 --- a/packages/evm/evmtest/wiki_how_tos/GetBalance.bin +++ b/packages/evm/evmtest/wiki_how_tos/GetBalance.bin @@ -1 +1 @@ -6080604052348015600e575f5ffd5b50610af58061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806319a5506a1461004e5780636b0c71b91461005857806390cdadcd14610074578063cdfd0a661461007e575b5f5ffd5b610056610088565b005b610072600480360381019061006d919061068a565b6101d9565b005b61007c610328565b005b6100866103ec565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa1580156100e5573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061010d91906107da565b90505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bff9472b836040518263ffffffff1660e01b815260040161015d919061089a565b602060405180830381865afa158015610178573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019c91906108ed565b90507f52c249d568f18754049ea99591153f1f0ad8c7ab03a3bcdcf8454bc274e54101816040516101cd9190610927565b60405180910390a15050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610236573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061025e91906107da565b90507f4b5ba48e0a779444da21bd00cfee0a4b3439fc344fb75bbf2266a2a5036ebe1373107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c84846040518363ffffffff1660e01b81526004016102d0929190610992565b602060405180830381865afa1580156102eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030f9190610a04565b60405161031c9190610a3e565b60405180910390a15050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610385573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906103ad91906107da565b90507f28b3d377892d8db500fb9a9bbd4731605ca2a642c3c62a7e64d47b7d42024368815f01516040516103e19190610a9f565b60405180910390a150565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610449573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061047191906107da565b90505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b019204f836040518263ffffffff1660e01b81526004016104c1919061089a565b602060405180830381865afa1580156104dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105009190610a04565b90507f23ce6861f26687742455d6955fcd53a5587ecf279e37422d0cd9636e2a2a9f7f816040516105319190610a3e565b60405180910390a15050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61059c82610556565b810181811067ffffffffffffffff821117156105bb576105ba610566565b5b80604052505050565b5f6105cd61053d565b90506105d98282610593565b919050565b5f67ffffffffffffffff8211156105f8576105f7610566565b5b61060182610556565b9050602081019050919050565b828183375f83830152505050565b5f61062e610629846105de565b6105c4565b90508281526020810184848401111561064a57610649610552565b5b61065584828561060e565b509392505050565b5f82601f8301126106715761067061054e565b5b813561068184826020860161061c565b91505092915050565b5f6020828403121561069f5761069e610546565b5b5f82013567ffffffffffffffff8111156106bc576106bb61054a565b5b6106c88482850161065d565b91505092915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156106f3576106f2610566565b5b6106fc82610556565b9050602081019050919050565b8281835e5f83830152505050565b5f610729610724846106d9565b6105c4565b90508281526020810184848401111561074557610744610552565b5b610750848285610709565b509392505050565b5f82601f83011261076c5761076b61054e565b5b815161077c848260208601610717565b91505092915050565b5f6020828403121561079a576107996106d1565b5b6107a460206105c4565b90505f82015167ffffffffffffffff8111156107c3576107c26106d5565b5b6107cf84828501610758565b5f8301525092915050565b5f602082840312156107ef576107ee610546565b5b5f82015167ffffffffffffffff81111561080c5761080b61054a565b5b61081884828501610785565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f61084582610821565b61084f818561082b565b935061085f818560208601610709565b61086881610556565b840191505092915050565b5f602083015f8301518482035f86015261088d828261083b565b9150508091505092915050565b5f6020820190508181035f8301526108b28184610873565b905092915050565b5f819050919050565b6108cc816108ba565b81146108d6575f5ffd5b50565b5f815190506108e7816108c3565b92915050565b5f6020828403121561090257610901610546565b5b5f61090f848285016108d9565b91505092915050565b610921816108ba565b82525050565b5f60208201905061093a5f830184610918565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f61096482610940565b61096e818561094a565b935061097e818560208601610709565b61098781610556565b840191505092915050565b5f6040820190508181035f8301526109aa818561095a565b905081810360208301526109be8184610873565b90509392505050565b5f67ffffffffffffffff82169050919050565b6109e3816109c7565b81146109ed575f5ffd5b50565b5f815190506109fe816109da565b92915050565b5f60208284031215610a1957610a18610546565b5b5f610a26848285016109f0565b91505092915050565b610a38816109c7565b82525050565b5f602082019050610a515f830184610a2f565b92915050565b5f82825260208201905092915050565b5f610a7182610821565b610a7b8185610a57565b9350610a8b818560208601610709565b610a9481610556565b840191505092915050565b5f6020820190508181035f830152610ab78184610a67565b90509291505056fea26469706673582212207c3c908a0400da42609c223e90d1633b917fb47d0de0837301e461421ef7c46e64736f6c634300081d0033 \ No newline at end of file +6080604052348015600e575f5ffd5b50610af58061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806319a5506a1461004e5780636b0c71b91461005857806390cdadcd14610074578063cdfd0a661461007e575b5f5ffd5b610056610088565b005b610072600480360381019061006d919061068a565b6101d9565b005b61007c610328565b005b6100866103ec565b005b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa1580156100e5573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061010d91906107da565b90505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bff9472b836040518263ffffffff1660e01b815260040161015d919061089a565b602060405180830381865afa158015610178573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019c91906108ed565b90507f52c249d568f18754049ea99591153f1f0ad8c7ab03a3bcdcf8454bc274e54101816040516101cd9190610927565b60405180910390a15050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610236573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061025e91906107da565b90507f4b5ba48e0a779444da21bd00cfee0a4b3439fc344fb75bbf2266a2a5036ebe1373107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c84846040518363ffffffff1660e01b81526004016102d0929190610992565b602060405180830381865afa1580156102eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030f9190610a04565b60405161031c9190610a3e565b60405180910390a15050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610385573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906103ad91906107da565b90507f28b3d377892d8db500fb9a9bbd4731605ca2a642c3c62a7e64d47b7d42024368815f01516040516103e19190610a9f565b60405180910390a150565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f31317496040518163ffffffff1660e01b81526004015f60405180830381865afa158015610449573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061047191906107da565b90505f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b019204f836040518263ffffffff1660e01b81526004016104c1919061089a565b602060405180830381865afa1580156104dc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105009190610a04565b90507f23ce6861f26687742455d6955fcd53a5587ecf279e37422d0cd9636e2a2a9f7f816040516105319190610a3e565b60405180910390a15050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61059c82610556565b810181811067ffffffffffffffff821117156105bb576105ba610566565b5b80604052505050565b5f6105cd61053d565b90506105d98282610593565b919050565b5f67ffffffffffffffff8211156105f8576105f7610566565b5b61060182610556565b9050602081019050919050565b828183375f83830152505050565b5f61062e610629846105de565b6105c4565b90508281526020810184848401111561064a57610649610552565b5b61065584828561060e565b509392505050565b5f82601f8301126106715761067061054e565b5b813561068184826020860161061c565b91505092915050565b5f6020828403121561069f5761069e610546565b5b5f82013567ffffffffffffffff8111156106bc576106bb61054a565b5b6106c88482850161065d565b91505092915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156106f3576106f2610566565b5b6106fc82610556565b9050602081019050919050565b8281835e5f83830152505050565b5f610729610724846106d9565b6105c4565b90508281526020810184848401111561074557610744610552565b5b610750848285610709565b509392505050565b5f82601f83011261076c5761076b61054e565b5b815161077c848260208601610717565b91505092915050565b5f6020828403121561079a576107996106d1565b5b6107a460206105c4565b90505f82015167ffffffffffffffff8111156107c3576107c26106d5565b5b6107cf84828501610758565b5f8301525092915050565b5f602082840312156107ef576107ee610546565b5b5f82015167ffffffffffffffff81111561080c5761080b61054a565b5b61081884828501610785565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f61084582610821565b61084f818561082b565b935061085f818560208601610709565b61086881610556565b840191505092915050565b5f602083015f8301518482035f86015261088d828261083b565b9150508091505092915050565b5f6020820190508181035f8301526108b28184610873565b905092915050565b5f819050919050565b6108cc816108ba565b81146108d6575f5ffd5b50565b5f815190506108e7816108c3565b92915050565b5f6020828403121561090257610901610546565b5b5f61090f848285016108d9565b91505092915050565b610921816108ba565b82525050565b5f60208201905061093a5f830184610918565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f61096482610940565b61096e818561094a565b935061097e818560208601610709565b61098781610556565b840191505092915050565b5f6040820190508181035f8301526109aa818561095a565b905081810360208301526109be8184610873565b90509392505050565b5f67ffffffffffffffff82169050919050565b6109e3816109c7565b81146109ed575f5ffd5b50565b5f815190506109fe816109da565b92915050565b5f60208284031215610a1957610a18610546565b5b5f610a26848285016109f0565b91505092915050565b610a38816109c7565b82525050565b5f602082019050610a515f830184610a2f565b92915050565b5f82825260208201905092915050565b5f610a7182610821565b610a7b8185610a57565b9350610a8b818560208601610709565b610a9481610556565b840191505092915050565b5f6020820190508181035f830152610ab78184610a67565b90509291505056fea2646970667358221220fa8b671ace457c2f2af44826af34429112d573d5282ef859f70afeb2ab61cf3964736f6c63430008210033 \ No newline at end of file diff --git a/packages/evm/jsonrpc/chainbackend.go b/packages/evm/jsonrpc/chainbackend.go index 90c480f76b..c3079e2088 100644 --- a/packages/evm/jsonrpc/chainbackend.go +++ b/packages/evm/jsonrpc/chainbackend.go @@ -22,7 +22,13 @@ import ( // ChainBackend provides access to the underlying ISC chain. type ChainBackend interface { EVMSendTransaction(tx *types.Transaction) error - EVMCall(anchor *isc.StateAnchor, callMsg ethereum.CallMsg, l1Params *parameters.L1Params) ([]byte, error) + EVMCall( + anchor *isc.StateAnchor, + blockTime time.Time, + entropy hashing.HashValue, + callMsg ethereum.CallMsg, + l1Params *parameters.L1Params, + ) ([]byte, error) EVMEstimateGas(anchor *isc.StateAnchor, callMsg ethereum.CallMsg, l1Params *parameters.L1Params) (uint64, error) EVMTrace( anchor *isc.StateAnchor, diff --git a/packages/evm/jsonrpc/evmchain.go b/packages/evm/jsonrpc/evmchain.go index dc96139197..766db9d999 100644 --- a/packages/evm/jsonrpc/evmchain.go +++ b/packages/evm/jsonrpc/evmchain.go @@ -26,6 +26,7 @@ import ( "github.com/iotaledger/hive.go/runtime/event" "github.com/iotaledger/wasp/v2/packages/evm/evmtypes" "github.com/iotaledger/wasp/v2/packages/evm/evmutil" + "github.com/iotaledger/wasp/v2/packages/hashing" "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/kv" "github.com/iotaledger/wasp/v2/packages/kv/buffered" @@ -475,7 +476,19 @@ func (e *EVMChain) CallContract(callMsg ethereum.CallMsg, blockNumberOrHash *rpc if err != nil { return nil, err } - return e.backend.EVMCall(anchor, callMsg, blockinfo.L1Params) + + // make sure that the entropy received by the call is deterministic for + // each block, but also different from the entropy used in any of the + // requests that are committed in the block. + entropy := hashing.HashData(blockinfo.Entropy[:]) + + return e.backend.EVMCall( + anchor, + blockinfo.Timestamp, + entropy, + callMsg, + blockinfo.L1Params, + ) } func (e *EVMChain) EstimateGas(callMsg ethereum.CallMsg, blockNumberOrHash *rpc.BlockNumberOrHash) (uint64, error) { diff --git a/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go b/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go index f67d95d176..6ce9878b2f 100644 --- a/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go +++ b/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go @@ -502,6 +502,36 @@ func TestRPCCallNonView(t *testing.T) { require.NoError(t, err) } +func TestRPCCallTimestampAndBlockNumber(t *testing.T) { + env := newSoloTestEnv(t) + creator, creatorAddress := env.soloChain.NewEthereumAccountWithL2Funds() + contractABI, err := abi.JSON(strings.NewReader(evmtest.ISCTestContractABI)) + require.NoError(t, err) + _, _, contractAddress := env.DeployEVMContract(creator, contractABI, evmtest.ISCTestContractBytecode) + + bi := env.soloChain.GetLatestBlockInfo() + require.EqualValues(t, 1, bi.NumSuccessfulRequests) + + ret, err := env.Client.CallContract(context.Background(), ethereum.CallMsg{ + From: creatorAddress, + To: &contractAddress, + Data: lo.Must(contractABI.Pack("getTimestampAndBlockNumber")), + Gas: 100_000, + }, nil) + require.NoError(t, err) + + var v struct { + Timestamp *big.Int + BlockNumber *big.Int + } + v.BlockNumber = new(big.Int) + err = contractABI.UnpackIntoInterface(&v, "getTimestampAndBlockNumber", ret) + require.NoError(t, err) + + require.EqualValues(t, bi.BlockIndex, v.BlockNumber.Uint64()) + require.EqualValues(t, uint64(bi.Timestamp.Unix()), v.Timestamp.Uint64()) +} + func TestRPCAccessHistoricalState(t *testing.T) { env := newSoloTestEnv(t) env.TestRPCAccessHistoricalState() diff --git a/packages/origin/origin.go b/packages/origin/origin.go index 5791feaf81..4cc001e65d 100644 --- a/packages/origin/origin.go +++ b/packages/origin/origin.go @@ -3,19 +3,18 @@ package origin import ( "fmt" - "time" + "sync" + + "github.com/samber/lo" bcs "github.com/iotaledger/bcs-go" "github.com/iotaledger/wasp/v2/clients/iota-go/iotago" "github.com/iotaledger/wasp/v2/packages/coin" "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/isc/coreutil" - "github.com/iotaledger/wasp/v2/packages/kv" - "github.com/iotaledger/wasp/v2/packages/kv/codec" "github.com/iotaledger/wasp/v2/packages/kvstore/mapdb" "github.com/iotaledger/wasp/v2/packages/parameters" "github.com/iotaledger/wasp/v2/packages/state" - "github.com/iotaledger/wasp/v2/packages/state/statetest" "github.com/iotaledger/wasp/v2/packages/transaction" "github.com/iotaledger/wasp/v2/packages/vm/core/accounts" "github.com/iotaledger/wasp/v2/packages/vm/core/blocklog" @@ -83,7 +82,7 @@ func L1Commitment( ) *state.L1Commitment { block, _ := InitChain( v, - statetest.NewStoreWithUniqueWriteMutex(mapdb.NewMapDB()), + lo.Must(state.NewStore(mapdb.NewMapDB(), false, new(sync.Mutex))), args, gasCoinObjectID, originDeposit, @@ -125,8 +124,6 @@ func InitChain( } d := store.NewOriginStateDraft() - d.Set(kv.Key(coreutil.StatePrefixBlockIndex), codec.Encode(uint32(0))) - d.Set(kv.Key(coreutil.StatePrefixTimestamp), codec.Encode(time.Unix(0, 0))) contracts := []*coreutil.ContractInfo{ root.Contract, @@ -151,7 +148,7 @@ func InitChain( // init the state of each core contract root.NewStateWriter(root.Contract.StateSubrealm(d)).SetInitialState(v, contracts) accounts.NewStateWriter(v, accounts.Contract.StateSubrealm(d)).SetInitialState(originDeposit, l1Params.BaseToken) - blocklog.NewStateWriter(blocklog.Contract.StateSubrealm(d)).SetInitialState(l1Params) + blocklog.NewStateWriter(blocklog.Contract.StateSubrealm(d)).SetInitialState(l1Params, d.Timestamp()) errors.NewStateWriter(errors.Contract.StateSubrealm(d)).SetInitialState() governance.NewStateWriter(governance.Contract.StateSubrealm(d)).SetInitialState(initParams.ChainAdmin, blockKeepAmount) evmimpl.SetInitialState(evm.Contract.StateSubrealm(d), initParams.EVMChainID) diff --git a/packages/solo/evm.go b/packages/solo/evm.go index 12aa258c79..d4986816a7 100644 --- a/packages/solo/evm.go +++ b/packages/solo/evm.go @@ -55,13 +55,21 @@ func (b *jsonRPCSoloBackend) EVMSendTransaction(tx *types.Transaction) error { return err } -func (b *jsonRPCSoloBackend) EVMCall(anchor *isc.StateAnchor, callMsg ethereum.CallMsg, l1Params *parameters.L1Params) ([]byte, error) { +func (b *jsonRPCSoloBackend) EVMCall( + anchor *isc.StateAnchor, + blockTime time.Time, + entropy hashing.HashValue, + callMsg ethereum.CallMsg, + l1Params *parameters.L1Params, +) ([]byte, error) { return chainutil.EVMCall( anchor, l1Params, b.Chain.store, b.Chain.proc, b.Chain.log, + blockTime, + entropy, callMsg, ) } diff --git a/packages/solo/run.go b/packages/solo/run.go index f2c0a87a13..9ca02a63b2 100644 --- a/packages/solo/run.go +++ b/packages/solo/run.go @@ -7,6 +7,7 @@ import ( "errors" "fmt" "os" + "time" "github.com/samber/lo" "github.com/stretchr/testify/require" @@ -81,6 +82,7 @@ func (ch *Chain) EstimateOnLedgerRequest(dryRunRes *iotajsonrpc.DryRunTransactio } func (ch *Chain) runTaskNoLock(reqs []isc.Request, estimateGas bool) *vm.VMTaskResult { + ch.Env.AdvanceClockBy(time.Millisecond) task := &vm.VMTask{ Processors: ch.proc, Anchor: ch.GetLatestAnchor(), diff --git a/packages/solo/solo.go b/packages/solo/solo.go index a35fb64eda..a05a18f2fb 100644 --- a/packages/solo/solo.go +++ b/packages/solo/solo.go @@ -170,6 +170,7 @@ func New(t Context, initOptions ...*InitOptions) *Solo { seed: cryptolib.NewSeed(), publisher: publisher.New(opt.Log.NewChildLogger("publisher")), l1ParamsFetcher: parameters.NewL1ParamsFetcher(l1starter.Instance().L1Client().IotaClient(), opt.Log), + mockTime: state.OriginTimestamp, ctx: ctx, } _ = ret.publisher.Events.Published.Hook(func(ev *publisher.ISCEvent[any]) { diff --git a/packages/state/state_rapid_test.go b/packages/state/state_rapid_test.go index 2485c24e45..1e77819682 100644 --- a/packages/state/state_rapid_test.go +++ b/packages/state/state_rapid_test.go @@ -9,9 +9,7 @@ import ( "github.com/stretchr/testify/require" "pgregory.net/rapid" - "github.com/iotaledger/wasp/v2/packages/isc/coreutil" "github.com/iotaledger/wasp/v2/packages/kv" - "github.com/iotaledger/wasp/v2/packages/kv/codec" "github.com/iotaledger/wasp/v2/packages/kvstore" "github.com/iotaledger/wasp/v2/packages/kvstore/mapdb" "github.com/iotaledger/wasp/v2/packages/state" @@ -32,9 +30,11 @@ func newStateSM() *stateSM { sm := new(stateSM) sm.store = statetest.NewStoreWithUniqueWriteMutex(mapdb.NewMapDB()) sm.draft = sm.store.NewOriginStateDraft() - sm.draft.Set(kv.Key(coreutil.StatePrefixBlockIndex), codec.Encode(uint32(0))) sm.model = mapdb.NewMapDB() - sm.model.Set([]byte(coreutil.StatePrefixBlockIndex), codec.Encode(uint32(0))) + sm.draft.Iterate("", func(k kv.Key, v []byte) bool { + sm.model.Set([]byte(k), v) + return true + }) return sm } @@ -120,7 +120,6 @@ func TestRapidReproduced(t *testing.T) { var err error store := statetest.NewStoreWithUniqueWriteMutex(mapdb.NewMapDB()) draft := store.NewOriginStateDraft() - draft.Set(kv.Key(coreutil.StatePrefixBlockIndex), codec.Encode(uint32(0))) draft.Set(kv.Key([]byte{0}), []byte{0}) draft.Set(kv.Key([]byte{1}), []byte{0}) draft.Set(kv.Key([]byte{0x10}), []byte{0}) @@ -146,7 +145,6 @@ func TestRapidReproduced(t *testing.T) { func TestRapidReproduced2(t *testing.T) { store := statetest.NewStoreWithUniqueWriteMutex(mapdb.NewMapDB()) draft := store.NewOriginStateDraft() - draft.Set(kv.Key(coreutil.StatePrefixBlockIndex), codec.Encode(uint32(0))) draft.Set(kv.Key([]byte{0x2}), []byte{0x1}) draft.Set(kv.Key([]byte{0x7}), []byte{0x1}) diff --git a/packages/state/state_test.go b/packages/state/state_test.go index c8e4769fa0..6fc77c0c84 100644 --- a/packages/state/state_test.go +++ b/packages/state/state_test.go @@ -146,7 +146,7 @@ func TestOriginBlock(t *testing.T) { validateBlock0(block0, nil) s := cs.StateByTrieRoot(block0.TrieRoot()) require.EqualValues(t, 0, s.BlockIndex()) - require.True(t, s.Timestamp().IsZero()) + require.True(t, s.Timestamp().Equal(state.OriginTimestamp)) validateBlock0(statetest.NewStoreWithUniqueWriteMutex(db).BlockByTrieRoot(block0.TrieRoot())) validateBlock0(statetest.NewStoreWithUniqueWriteMutex(db).LatestBlock()) diff --git a/packages/state/statedraft.go b/packages/state/statedraft.go index 7443195778..87d188afdf 100644 --- a/packages/state/statedraft.go +++ b/packages/state/statedraft.go @@ -4,6 +4,7 @@ package state import ( + "fmt" "time" "github.com/iotaledger/wasp/v2/packages/isc" @@ -24,10 +25,19 @@ type stateDraft struct { var _ StateDraft = &stateDraft{} +// OriginTimestamp is the timestamp stored in the origin ISC block. +// Cannot use time.Unix(0, 0) because bcs-go would encode it as the zero time (time.Time{} != time.Unix(0, 0)). +// Also cannot use the zero time because it is before the unix epoch, and that introduces subtle bugs. +// TODO: make configurable +var OriginTimestamp = time.Unix(1, 0) + func newOriginStateDraft() *stateDraft { - return &stateDraft{ + d := &stateDraft{ BufferedKVStore: buffered.NewBufferedKVStore(dict.Dict{}), } + d.Set(kv.Key(coreutil.StatePrefixBlockIndex), codec.Encode(uint32(0))) + d.Set(kv.Key(coreutil.StatePrefixTimestamp), codec.Encode(OriginTimestamp)) + return d } func newEmptyStateDraft(prevL1Commitment *L1Commitment, baseState State) *stateDraft { @@ -39,9 +49,12 @@ func newEmptyStateDraft(prevL1Commitment *L1Commitment, baseState State) *stateD } func newStateDraft(timestamp time.Time, prevL1Commitment *L1Commitment, baseState State) *stateDraft { + if !timestamp.IsZero() && timestamp.Before(time.Unix(0, 0)) { + panic(fmt.Sprintf("timestamp %s is before unix epoch", timestamp.String())) + } d := newEmptyStateDraft(prevL1Commitment, baseState) - d.Set(kv.Key(coreutil.StatePrefixBlockIndex), codec.Encode[uint32](baseState.BlockIndex()+1)) - d.Set(kv.Key(coreutil.StatePrefixTimestamp), codec.Encode[time.Time](timestamp)) + d.Set(kv.Key(coreutil.StatePrefixBlockIndex), codec.Encode(baseState.BlockIndex()+1)) + d.Set(kv.Key(coreutil.StatePrefixTimestamp), codec.Encode(timestamp)) d.Set(kv.Key(coreutil.StatePrefixPrevL1Commitment), prevL1Commitment.Bytes()) return d } diff --git a/packages/vm/core/blocklog/impl.go b/packages/vm/core/blocklog/impl.go index f49f0750df..06bbe12cbb 100644 --- a/packages/vm/core/blocklog/impl.go +++ b/packages/vm/core/blocklog/impl.go @@ -23,14 +23,14 @@ var Processor = Contract.Processor(nil, var ErrBlockNotFound = coreerrors.Register("Block not found").Create() -func (s *StateWriter) SetInitialState(l1Params *parameters.L1Params) { +func (s *StateWriter) SetInitialState(l1Params *parameters.L1Params, timestamp time.Time) { s.SaveNextBlockInfo(&BlockInfo{ SchemaVersion: BlockInfoLatestSchemaVersion, BlockIndex: 0, - Timestamp: time.Time{}, + Timestamp: timestamp, L1Params: l1Params, - TotalRequests: 1, - NumSuccessfulRequests: 1, + TotalRequests: 0, + NumSuccessfulRequests: 0, NumOffLedgerRequests: 0, }) } diff --git a/packages/vm/core/evm/emulator/emulator.go b/packages/vm/core/evm/emulator/emulator.go index 67a6f1e410..6b1707257d 100644 --- a/packages/vm/core/evm/emulator/emulator.go +++ b/packages/vm/core/evm/emulator/emulator.go @@ -217,8 +217,10 @@ func (e *EVMEmulator) CallContract(call ethereum.CallMsg, gasEstimateMode bool) call.Value = big.NewInt(0) } - pendingHeader := e.BlockchainDB().GetPendingHeader(e.ctx.Timestamp()) - + // Using the latest committed header (instead of the "pending" header) so + // that the executed call sees the same block number and timestamp (instead + // of block number + 1). + header := e.BlockchainDB().GetCurrentBlock().Header() statedb := e.StateDB() // don't commit changes to state @@ -228,7 +230,7 @@ func (e *EVMEmulator) CallContract(call ethereum.CallMsg, gasEstimateMode bool) return e.applyMessage( coreMsgFromCallMsg(call, gasEstimateMode, statedb), statedb, - pendingHeader, + header, nil, nil, ) diff --git a/packages/vm/core/evm/evmtest/evm_test.go b/packages/vm/core/evm/evmtest/evm_test.go index 6fb90302ae..e3554c5665 100644 --- a/packages/vm/core/evm/evmtest/evm_test.go +++ b/packages/vm/core/evm/evmtest/evm_test.go @@ -11,7 +11,6 @@ import ( "math" "math/big" "testing" - "time" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi" @@ -444,11 +443,7 @@ func TestISCTimestamp(t *testing.T) { var ret int64 env.ISCMagicSandbox(ethKey).callView("getTimestampUnixSeconds", nil, &ret) - require.WithinRange(t, - time.Unix(ret, 0), - time.Now().Add(-1*time.Hour), - time.Now().Add(1*time.Hour), - ) + require.Equal(t, env.Chain.GetLatestBlockInfo().Timestamp.Unix(), ret) } func TestISCCallView(t *testing.T) { diff --git a/packages/vm/core/evm/iscmagic/ERC20Coin.bin-runtime b/packages/vm/core/evm/iscmagic/ERC20Coin.bin-runtime index 926ec66444..c0204c8eed 100644 --- a/packages/vm/core/evm/iscmagic/ERC20Coin.bin-runtime +++ b/packages/vm/core/evm/iscmagic/ERC20Coin.bin-runtime @@ -1 +1 @@ -608060405234801561000f575f5ffd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f5ffd5b61009d6101fd565b6040516100aa919061104e565b60405180910390f35b6100cd60048036038101906100c8919061110c565b61028d565b6040516100da9190611164565b60405180910390f35b6100eb6103ca565b6040516100f8919061118c565b60405180910390f35b61011b600480360381019061011691906111a5565b61046d565b6040516101289190611164565b60405180910390f35b6101396107a9565b6040516101469190611210565b60405180910390f35b61016960048036038101906101649190611229565b6107be565b604051610176919061118c565b60405180910390f35b61018761086b565b604051610194919061104e565b60405180910390f35b6101b760048036038101906101b2919061110c565b6108fb565b6040516101c49190611164565b60405180910390f35b6101e760048036038101906101e29190611254565b610b84565b6040516101f4919061118c565b60405180910390f35b60606001805461020c906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610238906112bf565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f67ffffffffffffffff80168211156102db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d290611339565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636df2519733855f866040518563ffffffff1660e01b815260040161032e949392919061141b565b5f604051808303815f87803b158015610345575f5ffd5b505af1158015610357573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103b8919061118c565b60405180910390a36001905092915050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e12214005f6040518263ffffffff1660e01b81526004016104189190611465565b5f60405180830381865afa158015610432573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061045a919061173c565b60c0015167ffffffffffffffff16905090565b5f67ffffffffffffffff80168211156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611339565b60405180910390fd5b6104c3610f8e565b600167ffffffffffffffff8111156104de576104dd611489565b5b60405190808252806020026020018201604052801561051757816020015b610504610fa8565b8152602001906001900390816104fc5790505b50815f01819052505f805461052b906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610557906112bf565b80156105a25780601f10610579576101008083540402835291602001916105a2565b820191905f5260205f20905b81548152906001019060200180831161058557829003601f168201915b5050505050815f01515f815181106105bd576105bc611783565b5b60200260200101515f018190525082815f01515f815181106105e2576105e1611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633865d9818633846040518463ffffffff1660e01b815260040161065993929190611a5b565b5f604051808303815f87803b158015610670575f5ffd5b505af1158015610682573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107385773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b815260040161070a93929190611a5b565b5f604051808303815f87803b158015610721575f5ffd5b505af1158015610733573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610795919061118c565b60405180910390a360019150509392505050565b5f60035f9054906101000a900460ff16905090565b5f5f6107c983610cc9565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c5f836040518363ffffffff1660e01b815260040161081a929190611b10565b602060405180830381865afa158015610835573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108599190611b45565b67ffffffffffffffff16915050919050565b60606002805461087a906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906112bf565b80156108f15780601f106108c8576101008083540402835291602001916108f1565b820191905f5260205f20905b8154815290600101906020018083116108d457829003601f168201915b5050505050905090565b5f67ffffffffffffffff8016821115610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611339565b60405180910390fd5b610951610f8e565b600167ffffffffffffffff81111561096c5761096b611489565b5b6040519080825280602002602001820160405280156109a557816020015b610992610fa8565b81526020019060019003908161098a5790505b50815f01819052505f80546109b9906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546109e5906112bf565b8015610a305780601f10610a0757610100808354040283529160200191610a30565b820191905f5260205f20905b815481529060010190602001808311610a1357829003601f168201915b5050505050815f01515f81518110610a4b57610a4a611783565b5b60200260200101515f018190525082815f01515f81518110610a7057610a6f611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b8152600401610ae793929190611a5b565b5f604051808303815f87803b158015610afe575f5ffd5b505af1158015610b10573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b71919061118c565b60405180910390a3600191505092915050565b5f5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630af4187d85856040518363ffffffff1660e01b8152600401610bd5929190611b70565b5f60405180830381865afa158015610bef573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c179190611ed8565b9050610cb65f8054610c28906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c54906112bf565b8015610c9f5780601f10610c7657610100808354040283529160200191610c9f565b820191905f5260205f20905b815481529060010190602001808311610c8257829003601f168201915b5050505050825f0151610e3a90919063ffffffff16565b67ffffffffffffffff1691505092915050565b610cd1610fcb565b5f82604051602001610ce39190611f64565b6040516020818303038152906040529050610cfc610fcb565b81516001610d0a9190611fab565b67ffffffffffffffff811115610d2357610d22611489565b5b6040519080825280601f01601f191660200182016040528015610d555781602001600182028036833780820191505090505b50815f0181905250600360f81b815f01515f81518110610d7857610d77611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b8251811015610e2f57828181518110610dc757610dc6611783565b5b602001015160f81c60f81b825f0151600183610de39190611fab565b81518110610df457610df3611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610dab565b508092505050919050565b5f5f5f90505b8351811015610ea957610e70848281518110610e5f57610e5e611783565b5b60200260200101515f015184610eb4565b15610e9c57838181518110610e8857610e87611783565b5b602002602001015160200151915050610eae565b8080600101915050610e40565b505f90505b92915050565b5f610ebf8383610ec7565b905092915050565b5f8151835114610ed9575f9050610f88565b5f5f90505b8351811015610f8257828181518110610efa57610ef9611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110610f3a57610f39611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f75575f915050610f88565b8080600101915050610ede565b50600190505b92915050565b604051806040016040528060608152602001606081525090565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b6040518060200160405280606081525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61102082610fde565b61102a8185610fe8565b935061103a818560208601610ff8565b61104381611006565b840191505092915050565b5f6020820190508181035f8301526110668184611016565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a88261107f565b9050919050565b6110b88161109e565b81146110c2575f5ffd5b50565b5f813590506110d3816110af565b92915050565b5f819050919050565b6110eb816110d9565b81146110f5575f5ffd5b50565b5f81359050611106816110e2565b92915050565b5f5f6040838503121561112257611121611077565b5b5f61112f858286016110c5565b9250506020611140858286016110f8565b9150509250929050565b5f8115159050919050565b61115e8161114a565b82525050565b5f6020820190506111775f830184611155565b92915050565b611186816110d9565b82525050565b5f60208201905061119f5f83018461117d565b92915050565b5f5f5f606084860312156111bc576111bb611077565b5b5f6111c9868287016110c5565b93505060206111da868287016110c5565b92505060406111eb868287016110f8565b9150509250925092565b5f60ff82169050919050565b61120a816111f5565b82525050565b5f6020820190506112235f830184611201565b92915050565b5f6020828403121561123e5761123d611077565b5b5f61124b848285016110c5565b91505092915050565b5f5f6040838503121561126a57611269611077565b5b5f611277858286016110c5565b9250506020611288858286016110c5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112d657607f821691505b6020821081036112e9576112e8611292565b5b50919050565b7f616d6f756e7420697320746f6f206c61726765000000000000000000000000005f82015250565b5f611323601383610fe8565b915061132e826112ef565b602082019050919050565b5f6020820190508181035f83015261135081611317565b9050919050565b6113608161109e565b82525050565b5f819050815f5260205f209050919050565b5f8154611384816112bf565b61138e8186610fe8565b9450600182165f81146113a857600181146113be576113f0565b60ff1983168652811515602002860193506113f0565b6113c785611366565b5f5b838110156113e8578154818901526001820191506020810190506113c9565b808801955050505b50505092915050565b5f67ffffffffffffffff82169050919050565b611415816113f9565b82525050565b5f60808201905061142e5f830187611357565b61143b6020830186611357565b818103604083015261144d8185611378565b905061145c606083018461140c565b95945050505050565b5f6020820190508181035f83015261147d8184611378565b905092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114bf82611006565b810181811067ffffffffffffffff821117156114de576114dd611489565b5b80604052505050565b5f6114f061106e565b90506114fc82826114b6565b919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561152757611526611489565b5b61153082611006565b9050602081019050919050565b5f61154f61154a8461150d565b6114e7565b90508281526020810184848401111561156b5761156a611509565b5b611576848285610ff8565b509392505050565b5f82601f83011261159257611591611505565b5b81516115a284826020860161153d565b91505092915050565b6115b4816111f5565b81146115be575f5ffd5b50565b5f815190506115cf816115ab565b92915050565b6115de816113f9565b81146115e8575f5ffd5b50565b5f815190506115f9816115d5565b92915050565b5f60e0828403121561161457611613611485565b5b61161e60e06114e7565b90505f82015167ffffffffffffffff81111561163d5761163c611501565b5b6116498482850161157e565b5f83015250602061165c848285016115c1565b602083015250604082015167ffffffffffffffff8111156116805761167f611501565b5b61168c8482850161157e565b604083015250606082015167ffffffffffffffff8111156116b0576116af611501565b5b6116bc8482850161157e565b606083015250608082015167ffffffffffffffff8111156116e0576116df611501565b5b6116ec8482850161157e565b60808301525060a082015167ffffffffffffffff8111156117105761170f611501565b5b61171c8482850161157e565b60a08301525060c0611730848285016115eb565b60c08301525092915050565b5f6020828403121561175157611750611077565b5b5f82015167ffffffffffffffff81111561176e5761176d61107b565b5b61177a848285016115ff565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6117f382610fde565b6117fd81856117d9565b935061180d818560208601610ff8565b61181681611006565b840191505092915050565b61182a816113f9565b82525050565b5f604083015f8301518482035f86015261184a82826117e9565b915050602083015161185f6020860182611821565b508091505092915050565b5f6118758383611830565b905092915050565b5f602082019050919050565b5f611893826117b0565b61189d81856117ba565b9350836020820285016118af856117ca565b805f5b858110156118ea57848403895281516118cb858261186a565b94506118d68361187d565b925060208a019950506001810190506118b2565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f61193882611925565b9050919050565b6119488161192e565b82525050565b5f604083015f8301516119635f86018261193f565b506020830151848203602086015261197b82826117e9565b9150508091505092915050565b5f611993838361194e565b905092915050565b5f602082019050919050565b5f6119b1826118fc565b6119bb8185611906565b9350836020820285016119cd85611916565b805f5b85811015611a0857848403895281516119e98582611988565b94506119f48361199b565b925060208a019950506001810190506119d0565b50829750879550505050505092915050565b5f604083015f8301518482035f860152611a348282611889565b91505060208301518482036020860152611a4e82826119a7565b9150508091505092915050565b5f606082019050611a6e5f830186611357565b611a7b6020830185611357565b8181036040830152611a8d8184611a1a565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f611abb82611a97565b611ac58185611aa1565b9350611ad5818560208601610ff8565b611ade81611006565b840191505092915050565b5f602083015f8301518482035f860152611b038282611ab1565b9150508091505092915050565b5f6040820190508181035f830152611b288185611378565b90508181036020830152611b3c8184611ae9565b90509392505050565b5f60208284031215611b5a57611b59611077565b5b5f611b67848285016115eb565b91505092915050565b5f604082019050611b835f830185611357565b611b906020830184611357565b9392505050565b5f67ffffffffffffffff821115611bb157611bb0611489565b5b602082029050602081019050919050565b5f5ffd5b5f60408284031215611bdb57611bda611485565b5b611be560406114e7565b90505f82015167ffffffffffffffff811115611c0457611c03611501565b5b611c108482850161157e565b5f830152506020611c23848285016115eb565b60208301525092915050565b5f611c41611c3c84611b97565b6114e7565b90508083825260208201905060208402830185811115611c6457611c63611bc2565b5b835b81811015611cab57805167ffffffffffffffff811115611c8957611c88611505565b5b808601611c968982611bc6565b85526020850194505050602081019050611c66565b5050509392505050565b5f82601f830112611cc957611cc8611505565b5b8151611cd9848260208601611c2f565b91505092915050565b5f67ffffffffffffffff821115611cfc57611cfb611489565b5b602082029050602081019050919050565b611d1681611925565b8114611d20575f5ffd5b50565b5f81519050611d3181611d0d565b92915050565b5f60408284031215611d4c57611d4b611485565b5b611d5660406114e7565b90505f611d6584828501611d23565b5f83015250602082015167ffffffffffffffff811115611d8857611d87611501565b5b611d948482850161157e565b60208301525092915050565b5f611db2611dad84611ce2565b6114e7565b90508083825260208201905060208402830185811115611dd557611dd4611bc2565b5b835b81811015611e1c57805167ffffffffffffffff811115611dfa57611df9611505565b5b808601611e078982611d37565b85526020850194505050602081019050611dd7565b5050509392505050565b5f82601f830112611e3a57611e39611505565b5b8151611e4a848260208601611da0565b91505092915050565b5f60408284031215611e6857611e67611485565b5b611e7260406114e7565b90505f82015167ffffffffffffffff811115611e9157611e90611501565b5b611e9d84828501611cb5565b5f83015250602082015167ffffffffffffffff811115611ec057611ebf611501565b5b611ecc84828501611e26565b60208301525092915050565b5f60208284031215611eed57611eec611077565b5b5f82015167ffffffffffffffff811115611f0a57611f0961107b565b5b611f1684828501611e53565b91505092915050565b5f8160601b9050919050565b5f611f3582611f1f565b9050919050565b5f611f4682611f2b565b9050919050565b611f5e611f598261109e565b611f3c565b82525050565b5f611f6f8284611f4d565b60148201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fb5826110d9565b9150611fc0836110d9565b9250828201905080821115611fd857611fd7611f7e565b5b9291505056fea2646970667358221220c017dabec63e09f8b1a688348f6fe6d81d6900c00dabdecb2ecfc38e9ae720d964736f6c634300081d0033 \ No newline at end of file +608060405234801561000f575f5ffd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f5ffd5b61009d6101fd565b6040516100aa919061104e565b60405180910390f35b6100cd60048036038101906100c8919061110c565b61028d565b6040516100da9190611164565b60405180910390f35b6100eb6103ca565b6040516100f8919061118c565b60405180910390f35b61011b600480360381019061011691906111a5565b61046d565b6040516101289190611164565b60405180910390f35b6101396107a9565b6040516101469190611210565b60405180910390f35b61016960048036038101906101649190611229565b6107be565b604051610176919061118c565b60405180910390f35b61018761086b565b604051610194919061104e565b60405180910390f35b6101b760048036038101906101b2919061110c565b6108fb565b6040516101c49190611164565b60405180910390f35b6101e760048036038101906101e29190611254565b610b84565b6040516101f4919061118c565b60405180910390f35b60606001805461020c906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610238906112bf565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f67ffffffffffffffff80168211156102db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d290611339565b60405180910390fd5b73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636df2519733855f866040518563ffffffff1660e01b815260040161032e949392919061141b565b5f604051808303815f87803b158015610345575f5ffd5b505af1158015610357573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103b8919061118c565b60405180910390a36001905092915050565b5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e12214005f6040518263ffffffff1660e01b81526004016104189190611465565b5f60405180830381865afa158015610432573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061045a919061173c565b60c0015167ffffffffffffffff16905090565b5f67ffffffffffffffff80168211156104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611339565b60405180910390fd5b6104c3610f8e565b600167ffffffffffffffff8111156104de576104dd611489565b5b60405190808252806020026020018201604052801561051757816020015b610504610fa8565b8152602001906001900390816104fc5790505b50815f01819052505f805461052b906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610557906112bf565b80156105a25780601f10610579576101008083540402835291602001916105a2565b820191905f5260205f20905b81548152906001019060200180831161058557829003601f168201915b5050505050815f01515f815181106105bd576105bc611783565b5b60200260200101515f018190525082815f01515f815181106105e2576105e1611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16633865d9818633846040518463ffffffff1660e01b815260040161065993929190611a5b565b5f604051808303815f87803b158015610670575f5ffd5b505af1158015610682573d5f5f3e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146107385773107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b815260040161070a93929190611a5b565b5f604051808303815f87803b158015610721575f5ffd5b505af1158015610733573d5f5f3e3d5ffd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610795919061118c565b60405180910390a360019150509392505050565b5f60035f9054906101000a900460ff16905090565b5f5f6107c983610cc9565b905073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b9e0734c5f836040518363ffffffff1660e01b815260040161081a929190611b10565b602060405180830381865afa158015610835573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108599190611b45565b67ffffffffffffffff16915050919050565b60606002805461087a906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546108a6906112bf565b80156108f15780601f106108c8576101008083540402835291602001916108f1565b820191905f5260205f20905b8154815290600101906020018083116108d457829003601f168201915b5050505050905090565b5f67ffffffffffffffff8016821115610949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094090611339565b60405180910390fd5b610951610f8e565b600167ffffffffffffffff81111561096c5761096b611489565b5b6040519080825280602002602001820160405280156109a557816020015b610992610fa8565b81526020019060019003908161098a5790505b50815f01819052505f80546109b9906112bf565b80601f01602080910402602001604051908101604052809291908181526020018280546109e5906112bf565b8015610a305780601f10610a0757610100808354040283529160200191610a30565b820191905f5260205f20905b815481529060010190602001808311610a1357829003601f168201915b5050505050815f01515f81518110610a4b57610a4a611783565b5b60200260200101515f018190525082815f01515f81518110610a7057610a6f611783565b5b60200260200101516020019067ffffffffffffffff16908167ffffffffffffffff168152505073107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166368df2def3386846040518463ffffffff1660e01b8152600401610ae793929190611a5b565b5f604051808303815f87803b158015610afe575f5ffd5b505af1158015610b10573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610b71919061118c565b60405180910390a3600191505092915050565b5f5f73107400000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630af4187d85856040518363ffffffff1660e01b8152600401610bd5929190611b70565b5f60405180830381865afa158015610bef573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f82011682018060405250810190610c179190611ed8565b9050610cb65f8054610c28906112bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610c54906112bf565b8015610c9f5780601f10610c7657610100808354040283529160200191610c9f565b820191905f5260205f20905b815481529060010190602001808311610c8257829003601f168201915b5050505050825f0151610e3a90919063ffffffff16565b67ffffffffffffffff1691505092915050565b610cd1610fcb565b5f82604051602001610ce39190611f64565b6040516020818303038152906040529050610cfc610fcb565b81516001610d0a9190611fab565b67ffffffffffffffff811115610d2357610d22611489565b5b6040519080825280601f01601f191660200182016040528015610d555781602001600182028036833780820191505090505b50815f0181905250600360f81b815f01515f81518110610d7857610d77611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5f90505b8251811015610e2f57828181518110610dc757610dc6611783565b5b602001015160f81c60f81b825f0151600183610de39190611fab565b81518110610df457610df3611783565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610dab565b508092505050919050565b5f5f5f90505b8351811015610ea957610e70848281518110610e5f57610e5e611783565b5b60200260200101515f015184610eb4565b15610e9c57838181518110610e8857610e87611783565b5b602002602001015160200151915050610eae565b8080600101915050610e40565b505f90505b92915050565b5f610ebf8383610ec7565b905092915050565b5f8151835114610ed9575f9050610f88565b5f5f90505b8351811015610f8257828181518110610efa57610ef9611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110610f3a57610f39611783565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614610f75575f915050610f88565b8080600101915050610ede565b50600190505b92915050565b604051806040016040528060608152602001606081525090565b6040518060400160405280606081526020015f67ffffffffffffffff1681525090565b6040518060200160405280606081525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61102082610fde565b61102a8185610fe8565b935061103a818560208601610ff8565b61104381611006565b840191505092915050565b5f6020820190508181035f8301526110668184611016565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6110a88261107f565b9050919050565b6110b88161109e565b81146110c2575f5ffd5b50565b5f813590506110d3816110af565b92915050565b5f819050919050565b6110eb816110d9565b81146110f5575f5ffd5b50565b5f81359050611106816110e2565b92915050565b5f5f6040838503121561112257611121611077565b5b5f61112f858286016110c5565b9250506020611140858286016110f8565b9150509250929050565b5f8115159050919050565b61115e8161114a565b82525050565b5f6020820190506111775f830184611155565b92915050565b611186816110d9565b82525050565b5f60208201905061119f5f83018461117d565b92915050565b5f5f5f606084860312156111bc576111bb611077565b5b5f6111c9868287016110c5565b93505060206111da868287016110c5565b92505060406111eb868287016110f8565b9150509250925092565b5f60ff82169050919050565b61120a816111f5565b82525050565b5f6020820190506112235f830184611201565b92915050565b5f6020828403121561123e5761123d611077565b5b5f61124b848285016110c5565b91505092915050565b5f5f6040838503121561126a57611269611077565b5b5f611277858286016110c5565b9250506020611288858286016110c5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112d657607f821691505b6020821081036112e9576112e8611292565b5b50919050565b7f616d6f756e7420697320746f6f206c61726765000000000000000000000000005f82015250565b5f611323601383610fe8565b915061132e826112ef565b602082019050919050565b5f6020820190508181035f83015261135081611317565b9050919050565b6113608161109e565b82525050565b5f819050815f5260205f209050919050565b5f8154611384816112bf565b61138e8186610fe8565b9450600182165f81146113a857600181146113be576113f0565b60ff1983168652811515602002860193506113f0565b6113c785611366565b5f5b838110156113e8578154818901526001820191506020810190506113c9565b808801955050505b50505092915050565b5f67ffffffffffffffff82169050919050565b611415816113f9565b82525050565b5f60808201905061142e5f830187611357565b61143b6020830186611357565b818103604083015261144d8185611378565b905061145c606083018461140c565b95945050505050565b5f6020820190508181035f83015261147d8184611378565b905092915050565b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6114bf82611006565b810181811067ffffffffffffffff821117156114de576114dd611489565b5b80604052505050565b5f6114f061106e565b90506114fc82826114b6565b919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561152757611526611489565b5b61153082611006565b9050602081019050919050565b5f61154f61154a8461150d565b6114e7565b90508281526020810184848401111561156b5761156a611509565b5b611576848285610ff8565b509392505050565b5f82601f83011261159257611591611505565b5b81516115a284826020860161153d565b91505092915050565b6115b4816111f5565b81146115be575f5ffd5b50565b5f815190506115cf816115ab565b92915050565b6115de816113f9565b81146115e8575f5ffd5b50565b5f815190506115f9816115d5565b92915050565b5f60e0828403121561161457611613611485565b5b61161e60e06114e7565b90505f82015167ffffffffffffffff81111561163d5761163c611501565b5b6116498482850161157e565b5f83015250602061165c848285016115c1565b602083015250604082015167ffffffffffffffff8111156116805761167f611501565b5b61168c8482850161157e565b604083015250606082015167ffffffffffffffff8111156116b0576116af611501565b5b6116bc8482850161157e565b606083015250608082015167ffffffffffffffff8111156116e0576116df611501565b5b6116ec8482850161157e565b60808301525060a082015167ffffffffffffffff8111156117105761170f611501565b5b61171c8482850161157e565b60a08301525060c0611730848285016115eb565b60c08301525092915050565b5f6020828403121561175157611750611077565b5b5f82015167ffffffffffffffff81111561176e5761176d61107b565b5b61177a848285016115ff565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6117f382610fde565b6117fd81856117d9565b935061180d818560208601610ff8565b61181681611006565b840191505092915050565b61182a816113f9565b82525050565b5f604083015f8301518482035f86015261184a82826117e9565b915050602083015161185f6020860182611821565b508091505092915050565b5f6118758383611830565b905092915050565b5f602082019050919050565b5f611893826117b0565b61189d81856117ba565b9350836020820285016118af856117ca565b805f5b858110156118ea57848403895281516118cb858261186a565b94506118d68361187d565b925060208a019950506001810190506118b2565b50829750879550505050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b5f61193882611925565b9050919050565b6119488161192e565b82525050565b5f604083015f8301516119635f86018261193f565b506020830151848203602086015261197b82826117e9565b9150508091505092915050565b5f611993838361194e565b905092915050565b5f602082019050919050565b5f6119b1826118fc565b6119bb8185611906565b9350836020820285016119cd85611916565b805f5b85811015611a0857848403895281516119e98582611988565b94506119f48361199b565b925060208a019950506001810190506119d0565b50829750879550505050505092915050565b5f604083015f8301518482035f860152611a348282611889565b91505060208301518482036020860152611a4e82826119a7565b9150508091505092915050565b5f606082019050611a6e5f830186611357565b611a7b6020830185611357565b8181036040830152611a8d8184611a1a565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f611abb82611a97565b611ac58185611aa1565b9350611ad5818560208601610ff8565b611ade81611006565b840191505092915050565b5f602083015f8301518482035f860152611b038282611ab1565b9150508091505092915050565b5f6040820190508181035f830152611b288185611378565b90508181036020830152611b3c8184611ae9565b90509392505050565b5f60208284031215611b5a57611b59611077565b5b5f611b67848285016115eb565b91505092915050565b5f604082019050611b835f830185611357565b611b906020830184611357565b9392505050565b5f67ffffffffffffffff821115611bb157611bb0611489565b5b602082029050602081019050919050565b5f5ffd5b5f60408284031215611bdb57611bda611485565b5b611be560406114e7565b90505f82015167ffffffffffffffff811115611c0457611c03611501565b5b611c108482850161157e565b5f830152506020611c23848285016115eb565b60208301525092915050565b5f611c41611c3c84611b97565b6114e7565b90508083825260208201905060208402830185811115611c6457611c63611bc2565b5b835b81811015611cab57805167ffffffffffffffff811115611c8957611c88611505565b5b808601611c968982611bc6565b85526020850194505050602081019050611c66565b5050509392505050565b5f82601f830112611cc957611cc8611505565b5b8151611cd9848260208601611c2f565b91505092915050565b5f67ffffffffffffffff821115611cfc57611cfb611489565b5b602082029050602081019050919050565b611d1681611925565b8114611d20575f5ffd5b50565b5f81519050611d3181611d0d565b92915050565b5f60408284031215611d4c57611d4b611485565b5b611d5660406114e7565b90505f611d6584828501611d23565b5f83015250602082015167ffffffffffffffff811115611d8857611d87611501565b5b611d948482850161157e565b60208301525092915050565b5f611db2611dad84611ce2565b6114e7565b90508083825260208201905060208402830185811115611dd557611dd4611bc2565b5b835b81811015611e1c57805167ffffffffffffffff811115611dfa57611df9611505565b5b808601611e078982611d37565b85526020850194505050602081019050611dd7565b5050509392505050565b5f82601f830112611e3a57611e39611505565b5b8151611e4a848260208601611da0565b91505092915050565b5f60408284031215611e6857611e67611485565b5b611e7260406114e7565b90505f82015167ffffffffffffffff811115611e9157611e90611501565b5b611e9d84828501611cb5565b5f83015250602082015167ffffffffffffffff811115611ec057611ebf611501565b5b611ecc84828501611e26565b60208301525092915050565b5f60208284031215611eed57611eec611077565b5b5f82015167ffffffffffffffff811115611f0a57611f0961107b565b5b611f1684828501611e53565b91505092915050565b5f8160601b9050919050565b5f611f3582611f1f565b9050919050565b5f611f4682611f2b565b9050919050565b611f5e611f598261109e565b611f3c565b82525050565b5f611f6f8284611f4d565b60148201915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611fb5826110d9565b9150611fc0836110d9565b9250828201905080821115611fd857611fd7611f7e565b5b9291505056fea2646970667358221220932c1fe0f851fccd3518263c4a53acc0c32568a54810a486cb47040900d6747064736f6c63430008210033 \ No newline at end of file diff --git a/packages/vm/core/testcore/blocklog_test.go b/packages/vm/core/testcore/blocklog_test.go index 9d2a531f62..54110b9822 100644 --- a/packages/vm/core/testcore/blocklog_test.go +++ b/packages/vm/core/testcore/blocklog_test.go @@ -37,8 +37,8 @@ func TestBlocklog_BlockInfo(t *testing.T) { require.NoError(t, err) require.NotNil(t, bi) require.EqualValues(t, 0, bi.BlockIndex) - require.EqualValues(t, 1, bi.TotalRequests) - require.EqualValues(t, 1, bi.NumSuccessfulRequests) + require.EqualValues(t, 0, bi.TotalRequests) + require.EqualValues(t, 0, bi.NumSuccessfulRequests) require.EqualValues(t, 0, bi.NumOffLedgerRequests) t.Logf("%s", bi.String()) @@ -91,8 +91,10 @@ func TestBlocklog_BlockInfoSeveral(t *testing.T) { require.NotNil(t, bi1) t.Logf("%s", bi1.String()) require.EqualValues(t, blockIndex, bi1.BlockIndex) - require.EqualValues(t, 1, bi1.TotalRequests) - require.EqualValues(t, 1, bi1.NumSuccessfulRequests) + if blockIndex > 0 { + require.EqualValues(t, 1, bi1.TotalRequests) + require.EqualValues(t, 1, bi1.NumSuccessfulRequests) + } require.LessOrEqual(t, bi1.NumOffLedgerRequests, bi1.TotalRequests) } } diff --git a/packages/webapi/services/waspevmbackend.go b/packages/webapi/services/waspevmbackend.go index 75573a97ac..0b3965254f 100644 --- a/packages/webapi/services/waspevmbackend.go +++ b/packages/webapi/services/waspevmbackend.go @@ -77,13 +77,21 @@ func (b *WaspEVMBackend) EVMSendTransaction(tx *types.Transaction) error { return nil } -func (b *WaspEVMBackend) EVMCall(anchor *isc.StateAnchor, callMsg ethereum.CallMsg, l1Params *parameters.L1Params) ([]byte, error) { +func (b *WaspEVMBackend) EVMCall( + anchor *isc.StateAnchor, + blockTime time.Time, + entropy hashing.HashValue, + callMsg ethereum.CallMsg, + l1Params *parameters.L1Params, +) ([]byte, error) { return chainutil.EVMCall( anchor, l1Params, b.chain.Store(), b.chain.Processors(), b.chain.Log(), + blockTime, + entropy, callMsg, ) } diff --git a/tools/cluster/cluster.go b/tools/cluster/cluster.go index 939ef5c65d..e35dd8ffed 100644 --- a/tools/cluster/cluster.go +++ b/tools/cluster/cluster.go @@ -248,7 +248,6 @@ func (clu *Cluster) RunDistributedKeyGeneration(committeeNodes []int, threshold addr, err = apilib.RunDistributedKeyGeneration(context.Background(), client, peerPubKeys, threshold, timeout...) return err }, 5) - if err != nil { return nil, err }