From 519484ff0a3bab441dd734e807ba26c8d6d5ad1f Mon Sep 17 00:00:00 2001 From: Dmitry Savonin Date: Tue, 14 Jun 2022 20:30:58 +0300 Subject: [PATCH 1/2] Revert "check origin caller instead of sender" This reverts commit c5e3b368a03f7701d1bd80d3b3b82fd7660ef906. --- core/vm/chiliz.go | 4 ++-- core/vm/evm.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/vm/chiliz.go b/core/vm/chiliz.go index f15e595ba..1f7206134 100644 --- a/core/vm/chiliz.go +++ b/core/vm/chiliz.go @@ -23,11 +23,11 @@ func applyChilizInvocationEvmHook(evm *EVM, addr common.Address, gas uint64) (le return gas, nil } -func applyChilizDeploymentEvmHook(evm *EVM, addr common.Address, gas uint64) (leftOverGas uint64, err error) { +func applyChilizDeploymentEvmHook(evm *EVM, caller ContractRef, addr common.Address, gas uint64) (leftOverGas uint64, err error) { if systemcontract.IsSystemContract(addr) { return gas, nil } - input, err := systemcontract.EvmHooksAbi.Pack("registerDeployedContract", evm.TxContext.Origin, addr) + input, err := systemcontract.EvmHooksAbi.Pack("registerDeployedContract", caller.Address(), addr) if err != nil { return gas, ErrNotAllowed } diff --git a/core/vm/evm.go b/core/vm/evm.go index 59d3a2408..5f1c99daa 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -492,7 +492,7 @@ func (evm *EVM) create(caller ContractRef, codeAndHash *codeAndHash, gas uint64, // Make sure it's allowed to deploy smart contracts var err error - gas, err = applyChilizDeploymentEvmHook(evm, address, gas) + gas, err = applyChilizDeploymentEvmHook(evm, caller, address, gas) if err != nil { return nil, common.Address{}, gas, err } From 60f08332e5ad7eb3d398fa99dce62025d01ab0be Mon Sep 17 00:00:00 2001 From: Dmitry Savonin Date: Thu, 16 Jun 2022 20:05:21 +0300 Subject: [PATCH 2/2] added embedded scoville config and implemented fork for deploy origin block --- cmd/geth/config.go | 44 ++++++----- cmd/geth/main.go | 2 + cmd/utils/flags.go | 9 +-- config/embedded/scoville.json | 139 ++++++++++++++++++++++++++++++++++ config/embeded.go | 21 +++++ core/vm/chiliz.go | 7 +- params/bootnodes.go | 9 ++- params/config.go | 90 ++++++---------------- 8 files changed, 226 insertions(+), 95 deletions(-) create mode 100644 config/embedded/scoville.json create mode 100644 config/embeded.go diff --git a/cmd/geth/config.go b/cmd/geth/config.go index b28fe1531..110a020ec 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -21,6 +21,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/ethereum/go-ethereum/config" "math/big" "os" "reflect" @@ -111,22 +112,11 @@ func defaultNodeConfig() node.Config { return cfg } -// makeConfigNode loads geth configuration and creates a blank node instance. -func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { - // Load defaults. - cfg := gethConfig{ - Eth: ethconfig.Defaults, - Node: defaultNodeConfig(), - Metrics: metrics.DefaultConfig, +func readGenesisConfig(ctx *cli.Context) *core.Genesis { + // for scoville just return already stored genesis config + if ctx.GlobalBool(utils.ChilizTestnetFlag.Name) { + return config.ScovilleGenesisConfig } - - // Load config file. - if file := ctx.GlobalString(configFileFlag.Name); file != "" { - if err := loadConfig(file, &cfg); err != nil { - utils.Fatalf("%v", err) - } - } - // Make sure we have a valid genesis JSON genesisPath := ctx.GlobalString(utils.GenesisFlag.Name) if len(genesisPath) == 0 { @@ -138,12 +128,30 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { } //goland:noinspection GoUnhandledErrorResult defer file.Close() - genesis := new(core.Genesis) if err := json.NewDecoder(file).Decode(genesis); err != nil { utils.Fatalf("invalid genesis file: %v", err) } - cfg.Eth.Genesis = genesis + return genesis +} + +// makeConfigNode loads geth configuration and creates a blank node instance. +func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { + // Load defaults. + cfg := gethConfig{ + Eth: ethconfig.Defaults, + Node: defaultNodeConfig(), + Metrics: metrics.DefaultConfig, + } + + // Load config file. + if file := ctx.GlobalString(configFileFlag.Name); file != "" { + if err := loadConfig(file, &cfg); err != nil { + utils.Fatalf("%v", err) + } + } + + cfg.Eth.Genesis = readGenesisConfig(ctx) // Apply flags. utils.SetNodeConfig(ctx, &cfg.Node) @@ -163,7 +171,7 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, gethConfig) { if err != nil { utils.Fatalf("Failed to open database: %v", err) } - _, hash, err := core.SetupGenesisBlock(chaindb, genesis) + _, hash, err := core.SetupGenesisBlock(chaindb, cfg.Eth.Genesis) if err != nil { utils.Fatalf("Failed to write genesis block: %v", err) } diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 6839e21d0..c0f0e6d63 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -60,6 +60,8 @@ var ( // flags that configure the node nodeFlags = []cli.Flag{ utils.GenesisFlag, + utils.ChilizTestnetFlag, + utils.ChilizMainnetFlag, utils.IdentityFlag, utils.UnlockedAccountFlag, utils.PasswordFileFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index d75bb4008..3ecb00c8c 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -112,7 +112,6 @@ var ( GenesisFlag = cli.StringFlag{ Name: "genesis", Usage: "Path to genesis JSON file", - Value: "./genesis/devnet.json", } // General settings @@ -201,8 +200,8 @@ var ( Usage: "Chiliz network: pre-configured proof-of-work test network", } ChilizTestnetFlag = cli.BoolFlag{ - Name: "chiliztestnet", - Usage: "Chiliz network: pre-configured proof-of-work test network", + Name: "scoville", + Usage: "Chiliz testnet network", } DeveloperFlag = cli.BoolFlag{ Name: "dev", @@ -939,7 +938,7 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) { case ctx.GlobalBool(ChilizMainnetFlag.Name): urls = params.ChilizMainnetBootnodes case ctx.GlobalBool(ChilizTestnetFlag.Name): - urls = params.ChilizTestnetBootnodes + urls = params.ChilizScovilleBootnodes case cfg.BootstrapNodes != nil: return // already set, don't apply defaults. } @@ -1776,12 +1775,10 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { if !ctx.GlobalIsSet(NetworkIdFlag.Name) { cfg.NetworkId = 88888 } - cfg.Genesis = core.DefaultChilizMainnetGenesisBlock() case ctx.GlobalBool(ChilizTestnetFlag.Name): if !ctx.GlobalIsSet(NetworkIdFlag.Name) { cfg.NetworkId = 88880 } - cfg.Genesis = core.DefaultChilizTestnetGenesisBlock() case ctx.GlobalBool(DeveloperFlag.Name): if !ctx.GlobalIsSet(NetworkIdFlag.Name) { cfg.NetworkId = 1337 diff --git a/config/embedded/scoville.json b/config/embedded/scoville.json new file mode 100644 index 000000000..0da4fdfbc --- /dev/null +++ b/config/embedded/scoville.json @@ -0,0 +1,139 @@ +{ + "config": { + "chainId": 88880, + "homesteadBlock": 0, + "eip150Block": 0, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, + "runtimeUpgradeBlock": 0, + "deployOriginBlock": 3000000, + "ramanujanBlock": 0, + "nielsBlock": 0, + "mirrorSyncBlock": 0, + "brunoBlock": 0, + "parlia": { + "period": 3, + "epoch": 1200 + } + }, + "nonce": "0x0", + "timestamp": "0x5e9da7ce", + "extraData": "0x000000000000000000000000000000000000000000000000000000000000000086d12897c56fe1db08bdfb84bc90f458ee7dc5cee45d81a7ef9456a254aa4db010aaf6601a15b5b776106f0857938684d24f2ce167ee11607dfaa57d48223c151df5dc1dbc2e24f17e7772835811370549cfdaff386fd2683d28678abd53f11dec23c76c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit": "0x2625a00", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "0000000000000000000000000000000000001000": { + "code": "0x60806040526004361061023a5760003560e01c806361cadbf41161012e578063c15f28c4116100ab578063e1c7392a1161006f578063e1c7392a14610739578063f340fa011461074e578063facd743b14610761578063fe38ebef14610781578063ff4794fc146107a157600080fd5b8063c15f28c41461067c578063c2fd58fc1461069c578063c6fb9065146106bc578063c96be4cb146106dc578063d951e186146106fc57600080fd5b8063a310624f116100f2578063a310624f146105f2578063adf2a79c14610612578063aea0e78b14610632578063b46e552014610647578063b7ab4db51461066757600080fd5b806361cadbf41461055657806373a3dda61461056957806376671808146105895780637a37cc59146105b65780637b1391a6146105d457600080fd5b8063426594b1116101bc5780634d238c8e116101805780634d238c8e146104d25780634d99dd16146104f257806352b7bea2146105055780635c19a95c14610525578063606c0c941461053857600080fd5b8063426594b1146103b957806342ad55ac146103d9578063457179fd146103f9578063459463341461042757806348124d261461044557600080fd5b8063289b3c0d11610203578063289b3c0d146102fe57806330108c221461031c578063392e53cd146103555780633e1bbdc91461037957806340a141ff1461039957600080fd5b806252c9e11461023f57806314f8649f1461026157806318f062cd146102815780631fe97684146102ac578063244d8257146102cc575b600080fd5b34801561024b57600080fd5b5061025f61025a36600461559a565b6107c1565b005b34801561026d57600080fd5b5061025f61027c3660046155ea565b610a36565b34801561028d57600080fd5b50610296610d01565b6040516102a3919061561f565b60405180910390f35b3480156102b857600080fd5b5061025f6102c736600461566c565b610ebe565b3480156102d857600080fd5b506003546001600160a01b03165b6040516001600160a01b0390911681526020016102a3565b34801561030a57600080fd5b506006546001600160a01b03166102e6565b34801561032857600080fd5b506102e661033736600461566c565b6001600160a01b039081166000908152606760205260409020541690565b34801561036157600080fd5b5060005460ff165b60405190151581526020016102a3565b34801561038557600080fd5b5061025f610394366004615689565b610ef4565b3480156103a557600080fd5b5061025f6103b436600461566c565b610fb0565b3480156103c557600080fd5b5061025f6103d436600461566c565b610fe3565b3480156103e557600080fd5b506103696103f436600461566c565b611050565b34801561040557600080fd5b5061041961041436600461566c565b611109565b6040519081526020016102a3565b34801561043357600080fd5b506005546001600160a01b03166102e6565b34801561045157600080fd5b50610465610460366004615732565b6111f3565b604080516001600160a01b03909a168a5260ff90981660208a01529688019590955263ffffffff90931660608701526001600160401b039182166080870152811660a08601521660c084015261ffff1660e08301526001600160601b0316610100820152610120016102a3565b3480156104de57600080fd5b5061025f6104ed36600461566c565b61134c565b61025f61050036600461576c565b61138d565b34801561051157600080fd5b5061041961052036600461559a565b611398565b61025f61053336600461566c565b6113b5565b34801561054457600080fd5b506007546001600160a01b03166102e6565b61025f6105643660046155ea565b6113c0565b34801561057557600080fd5b5061025f61058436600461566c565b6114c8565b34801561059557600080fd5b5061059e611772565b6040516001600160401b0390911681526020016102a3565b3480156105c257600080fd5b506004546001600160a01b03166102e6565b3480156105e057600080fd5b506002546001600160a01b03166102e6565b3480156105fe57600080fd5b5061046561060d36600461566c565b611781565b34801561061e57600080fd5b5061025f61062d366004615732565b611949565b34801561063e57600080fd5b5061059e6119fc565b34801561065357600080fd5b5061025f61066236600461566c565b611a06565b34801561067357600080fd5b50610296611a39565b34801561068857600080fd5b5061025f6106973660046157dc565b611a43565b3480156106a857600080fd5b506104196106b736600461559a565b611b18565b3480156106c857600080fd5b506104196106d736600461566c565b611b27565b3480156106e857600080fd5b5061025f6106f736600461566c565b611c05565b34801561070857600080fd5b5061071c61071736600461559a565b611c7f565b604080519283526001600160401b039091166020830152016102a3565b34801561074557600080fd5b5061025f611e3f565b61025f61075c36600461566c565b611ee5565b34801561076d57600080fd5b5061036961077c36600461566c565b611faa565b34801561078d57600080fd5b5061025f61079c366004615732565b611fec565b3480156107ad57600080fd5b5061025f6107bc36600461566c565b612074565b6001600160a01b038281166000908152606660209081526040808320815160c081018352815486168152600182015495861693810193909352929391929190830190600160a01b900460ff16600381111561081e5761081e61585c565b600381111561082f5761082f61585c565b815260018201546001600160401b03600160a81b90910481166020808401919091526002909301548082166040840152600160401b9004166060909101528101519091506001600160a01b031633146108a35760405162461bcd60e51b815260040161089a90615872565b60405180910390fd5b602081810180516001600160a01b0390811660009081526067808552604080832080546001600160a01b03199081169091558885168087528452918652808320805483168a8616908117909155835260669095529084902085518154831690841617815592516001840180549283169190931690811783559385015185949092916001600160a81b03191617600160a01b8360038111156109465761094661585c565b0217905550606082015160018201805467ffffffffffffffff60a81b1916600160a81b6001600160401b039384160217905560808301516002909201805460a0909401519282166001600160801b031990941693909317600160401b929091169190910217905560006109c0826109bb612108565b61211d565b905081600001516001600160a01b03167fc00107e0d011ac7c8e4dfa18e3dd3623ff151f8bfcc3821cd39bc114bd6504d9836020015184604001516003811115610a0c57610a0c61585c565b8454604051610a28939291600160f01b900461ffff16906158a9565b60405180910390a250505050565b610bb861ffff82161115610a8c5760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a2062616420636f6d6d697373696f6e207261746500000000604482015260640161089a565b6001600160a01b038281166000908152606660209081526040808320815160c081018352815486168152600182015495861693810193909352929391929190830190600160a01b900460ff166003811115610ae957610ae961585c565b6003811115610afa57610afa61585c565b815260018201546001600160401b03600160a81b909104811660208301526002909201548083166040830152600160401b90049091166060909101529050600081604001516003811115610b5057610b5061585c565b1415610b6e5760405162461bcd60e51b815260040161089a906158d1565b60208101516001600160a01b03163314610b9a5760405162461bcd60e51b815260040161089a90615872565b6000610ba8826109bb612108565b805461ffff8516600160f01b026001600160f01b039091161781556001600160a01b03808616600090815260666020908152604091829020865181549085166001600160a01b03199182161782559187015160018201805491909516928116831785559287015194955086949093909290916001600160a81b031990911617600160a01b836003811115610c3e57610c3e61585c565b0217905550606082015160018201805467ffffffffffffffff60a81b1916600160a81b6001600160401b039384160217905560808301516002909201805460a0909401519282166001600160801b031990941693909317600160401b92909116919091021790558151602083015160408401516001600160a01b03909216917fc00107e0d011ac7c8e4dfa18e3dd3623ff151f8bfcc3821cd39bc114bd6504d991906003811115610cf157610cf161585c565b86604051610a28939291906158a9565b6040805160088082526101208201909252606091600091906020820161010080368337505060025482519293506001600160a01b031691839150600090610d4a57610d4a61591e565b6001600160a01b039283166020918202929092010152600354825191169082906001908110610d7b57610d7b61591e565b6001600160a01b039283166020918202929092010152600454825191169082906002908110610dac57610dac61591e565b6001600160a01b039283166020918202929092010152600554825191169082906003908110610ddd57610ddd61591e565b6001600160a01b039283166020918202929092010152600654825191169082906004908110610e0e57610e0e61591e565b6001600160a01b039283166020918202929092010152600754825191169082906005908110610e3f57610e3f61591e565b6001600160a01b039283166020918202929092010152600854825191169082906006908110610e7057610e7061591e565b6001600160a01b039283166020918202929092010152600954825191169082906007908110610ea157610ea161591e565b6001600160a01b0390921660209283029190910190910152919050565b6006546001600160a01b03163314610ee85760405162461bcd60e51b815260040161089a90615934565b610ef181612256565b50565b60005460ff1615610f175760405162461bcd60e51b815260040161089a9061597a565b600280546001600160a01b03199081166001600160a01b038b8116919091179092556003805482168a841617905560048054821689841617905560058054821688841617905560068054821687841617905560078054821686841617905560088054821685841617905560098054909116918316919091179055610f9961239c565b50506000805460ff19166001179055505050505050565b6006546001600160a01b03163314610fda5760405162461bcd60e51b815260040161089a90615934565b610ef18161248e565b6001600160a01b0381166000908152606660205260408120906001820154600160a01b900460ff16600381111561101c5761101c61585c565b141561103a5760405162461bcd60e51b815260040161089a906158d1565b61104c823361104761260d565b612696565b5050565b600060016001600160a01b038316600090815260666020526040902060010154600160a01b900460ff16600381111561108b5761108b61585c565b1461109857506000919050565b60006110a2612b5b565b905060005b81518110156110ff57836001600160a01b03168282815181106110cc576110cc61591e565b60200260200101516001600160a01b031614156110ed575060019392505050565b806110f7816159c7565b9150506110a7565b5060009392505050565b6001600160a01b038181166000908152606660209081526040808320815160c0810183528154861681526001820154958616938101939093529293849391830190600160a01b900460ff1660038111156111655761116561585c565b60038111156111765761117661585c565b815260018201546001600160401b03600160a81b909104811660208301526002909201548083166040830152600160401b900490911660609091015290506000816040015160038111156111cc576111cc61585c565b14156111db5750600092915050565b6111ec816111e761260d565b612f57565b9392505050565b6001600160a01b038281166000908152606660209081526040808320815160c081018352815486168152600182015495861693810193909352929384938493849384938493849384938493849391830190600160a01b900460ff16600381111561125f5761125f61585c565b60038111156112705761127061585c565b815260018201546001600160401b03600160a81b909104811660208301526002909201548083166040830152600160401b9004909116606090910152905060006112ba828d61303c565b905081602001519a508a826040015160038111156112da576112da61585c565b9a508a6402540be40083602001516001600160701b03166112fb91906159e2565b9a508a83604001519a508a85606001519a508a86608001519a508a8760a001519a508a87606001519a508a88600001519a509a509a509a509a509a509a509a509a5050509295985092959850929598565b6006546001600160a01b031633146113765760405162461bcd60e51b815260040161089a90615934565b610ef181826001600080611388612108565b613187565b61104c338383613758565b60006113ac83836113a761260d565b613e4d565b90505b92915050565b610ef1338234614283565b60075460408051636f85684760e01b8152905134926001600160a01b031691636f8568479160048083019260209291908290030181865afa158015611409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142d9190615a01565b8110156114865760405162461bcd60e51b815260206004820152602160248201527f5374616b696e673a20696e697469616c207374616b6520697320746f6f206c6f6044820152607760f81b606482015260840161089a565b6114956402540be40082615a30565b156114b25760405162461bcd60e51b815260040161089a90615a44565b6114c3833360028585611388612108565b505050565b6001600160a01b038181166000908152606660209081526040808320815160c081018352815486168152600182015495861693810193909352929391929190830190600160a01b900460ff1660038111156115255761152561585c565b60038111156115365761153661585c565b815260018201546001600160401b03600160a81b909104811660208301526002909201548083166040830152600160401b9004909116606090910152905060038160400151600381111561158c5761158c61585c565b146115d95760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a2076616c696461746f72206e6f7420696e206a61696c0000604482015260640161089a565b80602001516001600160a01b0316336001600160a01b03161461160e5760405162461bcd60e51b815260040161089a90615872565b80608001516001600160401b031661162461260d565b6001600160401b031610156116745760405162461bcd60e51b815260206004820152601660248201527514dd185ada5b99ce881cdd1a5b1b081a5b881a985a5b60521b604482015260640161089a565b6040810160015b9081600381111561168e5761168e61585c565b9052506001600160a01b03808316600090815260666020908152604091829020845181549085166001600160a01b0319918216178255918501516001820180549190951692811683178555928501518594919390926001600160a81b031990911617600160a01b8360038111156117075761170761585c565b0217905550606082015160018201805467ffffffffffffffff60a81b1916600160a81b6001600160401b039384160217905560808301516002909201805460a0909401519282166001600160801b031990941693909317600160401b92909116919091021790555050565b600061177c61260d565b905090565b6001600160a01b038181166000908152606660209081526040808320815160c081018352815486168152600182015495861693810193909352929384938493849384938493849384938493849391830190600160a01b900460ff1660038111156117ed576117ed61585c565b60038111156117fe576117fe61585c565b81526001820154600160a81b90046001600160401b03908116602080840191909152600290930154808216604080850191909152600160401b909104821660609384015284516001600160a01b03166000908152606a855281812086850151909316815291845290819020815160808101835290546001600160601b0381168252600160601b81046001600160701b031682860152600160d01b810463ffffffff1682840152600160f01b900461ffff16928101929092529183015191830151919c509192508b9060038111156118d7576118d761585c565b9a508a6402540be40083602001516001600160701b03166118f891906159e2565b9a508a83604001519a508a85606001519a508a86608001519a508a8760a001519a508a87606001519a508a88600001519a509a509a509a509a509a509a509a509a5050509193959799909294969850565b6001600160a01b0382166000908152606660205260408120906001820154600160a01b900460ff1660038111156119825761198261585c565b14156119a05760405162461bcd60e51b815260040161089a906158d1565b60018101546001600160a01b031633146119cc5760405162461bcd60e51b815260040161089a90615872565b6119d461260d565b6001600160401b0316826001600160401b031611156119f257600080fd5b6114c381836147c7565b600061177c612108565b6006546001600160a01b03163314611a305760405162461bcd60e51b815260040161089a90615934565b610ef181614972565b606061177c612b5b565b60005460ff1615611a665760405162461bcd60e51b815260040161089a9061597a565b818414611a7257600080fd5b60005b84811015611b0357611af1868683818110611a9257611a9261591e565b9050602002016020810190611aa7919061566c565b878784818110611ab957611ab961591e565b9050602002016020810190611ace919061566c565b600185888887818110611ae357611ae361591e565b905060200201356000613187565b80611afb816159c7565b915050611a75565b50506000805460ff1916600117905550505050565b60006113ac83836113a7612108565b6001600160a01b038181166000908152606660209081526040808320815160c0810183528154861681526001820154958616938101939093529293849391830190600160a01b900460ff166003811115611b8357611b8361585c565b6003811115611b9457611b9461585c565b815260018201546001600160401b03600160a81b909104811660208301526002909201548083166040830152600160401b90049091166060909101529050600081604001516003811115611bea57611bea61585c565b1415611bf95750600092915050565b6111ec816111e7612108565b6003546001600160a01b03163314611c765760405162461bcd60e51b815260206004820152602e60248201527f496e6a6563746f72436f6e74657874486f6c6465723a206f6e6c7920736c617360448201526d3434b7339034b73234b1b0ba37b960911b606482015260840161089a565b610ef181614af7565b6001600160a01b03808316600090815260696020908152604080832093851683529281528282208351815460a0938102820184019095526080810185815293948594859492939284928491879085015b82821015611d1e57600084815260209081902060408051808201909152908401546001600160701b0381168252600160701b90046001600160401b031681830152825260019092019101611ccf565b5050509082525060018201546001600160401b0316602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015611dab57600084815260209081902060408051808201909152908401546001600160701b0381168252600160701b90046001600160401b031681830152825260019092019101611d5c565b50505090825250600391909101546001600160401b0316602090910152805151909150611ddf575060009150819050611e38565b8051805160009190611df390600190615a79565b81518110611e0357611e0361591e565b602002602001015190506402540be40081600001516001600160701b0316611e2b91906159e2565b6020909101519093509150505b9250929050565b60005460ff1615611e625760405162461bcd60e51b815260040161089a9061597a565b600280546001600160a01b03199081166110001790915560038054821661100117905560048054821661100217905560058054821661700117905560068054821661700217905560078054821661700317905560088054821661700417905560098054909116617005179055611ed661239c565b6000805460ff19166001179055565b334114611f405760405162461bcd60e51b8152602060048201526024808201527f496e6a6563746f72436f6e74657874486f6c6465723a206f6e6c7920636f696e6044820152636261736560e01b606482015260840161089a565b3a15611fa15760405162461bcd60e51b815260206004820152602a60248201527f496e6a6563746f72436f6e74657874486f6c6465723a206f6e6c79207a65726f6044820152692067617320707269636560b01b606482015260840161089a565b610ef181614fa6565b6000806001600160a01b038316600090815260666020526040902060010154600160a01b900460ff166003811115611fe457611fe461585c565b141592915050565b6001600160a01b0382166000908152606660205260408120906001820154600160a01b900460ff1660038111156120255761202561585c565b14156120435760405162461bcd60e51b815260040161089a906158d1565b61204b61260d565b6001600160401b0316826001600160401b0316111561206957600080fd5b6114c3833384612696565b6001600160a01b0381166000908152606660205260408120906001820154600160a01b900460ff1660038111156120ad576120ad61585c565b14156120cb5760405162461bcd60e51b815260040161089a906158d1565b60018101546001600160a01b031633146120f75760405162461bcd60e51b815260040161089a90615872565b61104c8161210361260d565b6147c7565b600061211261260d565b61177c906001615a90565b81516001600160a01b03166000908152606a602090815260408083206001600160401b038516845290915281208054600160601b90046001600160701b0316156121685790506113af565b83516001600160a01b03166000908152606a60209081526040808320606080890180516001600160401b03908116875292855294839020835160808101855290546001600160601b0381168252600160601b8082046001600160701b0316968301879052600160d01b820463ffffffff1695830195909552600160f01b9081900461ffff1692820183905287547dffffffff0000000000000000000000000000ffffffffffffffffffffffff16959094026001600160f01b031694909417920291909117845591519091908116908516111561224e576001600160401b03841660608601525b509392505050565b6001600160a01b038181166000908152606660209081526040808320815160c081018352815486168152600182015495861693810193909352929391929190830190600160a01b900460ff1660038111156122b3576122b361585c565b60038111156122c4576122c461585c565b81526001828101546001600160401b03600160a81b909104811660208401526002909301548084166040840152600160401b90049092166060909101529091506001600160a01b038316600090815260666020526040902060010154600160a01b900460ff16600381111561233b5761233b61585c565b146123885760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e673a206e6f74206163746976652076616c696461746f72000000604482015260640161089a565b6123918261512f565b60408101600261167b565b600180546123a990615abb565b151590506123b357565b600080306001600160a01b031660016040516123cf9190615af6565b6000604051808303816000865af19150503d806000811461240c576040519150601f19603f3d011682016040523d82523d6000602084013e612411565b606091505b50915091508115612420575050565b80516124855760405162461bcd60e51b815260206004820152602e60248201527f496e6a6563746f723a20636f6e737472756374696f6e206661696c656420772f60448201526d103ab735b737bbb71032b93937b960911b606482015260840161089a565b80518082602001fd5b6001600160a01b038181166000908152606660209081526040808320815160c081018352815486168152600182015495861693810193909352929391929190830190600160a01b900460ff1660038111156124eb576124eb61585c565b60038111156124fc576124fc61585c565b815260018201546001600160401b03600160a81b909104811660208301526002909201548083166040830152600160401b900490911660609091015290506000816040015160038111156125525761255261585c565b14156125705760405162461bcd60e51b815260040161089a906158d1565b6125798261512f565b6020808201516001600160a01b03908116600090815260678352604080822080546001600160a01b03199081169091559286168083526066909452808220805490931683556001830180546001600160e81b0319169055600290920180546001600160801b031916905590517fe1434e25d6611e0db941968fdc97811c982ac1602e951637d206f5fdda9dd8f19190a25050565b6007546040805163068d921560e31b815290516000926001600160a01b03169163346c90a89160048083019260209291908290030181865afa158015612657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267b9190615b92565b61268b9063ffffffff1643615bb8565b61177c906000615bcc565b6001600160a01b0380841660009081526069602090815260408083209386168352929052908120600181015481549192916001600160401b03909116905b80826001600160401b031610156129b857600084600001836001600160401b0316815481106127055761270561591e565b6000918252602091829020604080518082019091529101546001600160701b03811682526001600160401b03600160701b909104811692820183905290925087161161275157506129b8565b600061275e600184615a79565b846001600160401b031610156127b2578561277a856001615a90565b6001600160401b0316815481106127935761279361591e565b600091825260209091200154600160701b90046001600160401b031690505b866001600160401b031682602001516001600160401b03161080156127eb57508015806127eb57508082602001516001600160401b0316105b156128eb576001600160a01b0389166000908152606a60209081526040808320858301516001600160401b03168452825291829020825160808101845290546001600160601b0381168252600160601b81046001600160701b0316928201839052600160d01b810463ffffffff1693820193909352600160f01b90920461ffff16606083015261287b57506128ca565b600061288682615275565b5050905081602001516001600160701b031684600001516001600160701b0316826128b191906159e2565b6128bb9190615bb8565b6128c59088615bcc565b965050505b602082018051906128da82615be4565b6001600160401b03169052506127b2565b6128f6600184615a79565b846001600160401b03161061296f578186600001856001600160401b0316815481106129245761292461591e565b600091825260209182902083519101805493909201516001600160401b0316600160701b026001600160b01b03199093166001600160701b0390911617919091179055506129b89050565b85600001846001600160401b03168154811061298d5761298d61591e565b600091825260209091200180546001600160b01b03191690556129af84615be4565b935050506126d4565b5060018301805467ffffffffffffffff19166001600160401b0383811691909117909155600384015460028501549116905b80826001600160401b03161015612ad757600085600201836001600160401b031681548110612a1b57612a1b61591e565b6000918252602091829020604080518082019091529101546001600160701b03811682526001600160401b03600160701b909104811692820183905290925088161015612a685750612ad7565b8051612a83906402540be400906001600160701b03166159e2565b612a8d9086615bcc565b945085600201836001600160401b031681548110612aad57612aad61591e565b600091825260209091200180546001600160b01b0319169055612acf83615be4565b9250506129ea565b5060038401805467ffffffffffffffff19166001600160401b038316179055612b00868461539d565b604080518481526001600160401b03871660208201526001600160a01b0380891692908a16917fb22dec804803f8b1c5333f626cdbfdfb1bd629f1e1bb45dcfb22b5f74ed46b1c91015b60405180910390a350505050505050565b6068546060906000816001600160401b03811115612b7b57612b7b615908565b604051908082528060200260200182016040528015612ba4578160200160208202803683370190505b50905060005b82811015612c1f5760688181548110612bc557612bc561591e565b9060005260206000200160009054906101000a90046001600160a01b0316828281518110612bf557612bf561591e565b6001600160a01b039092166020928302919091019091015280612c17816159c7565b915050612baa565b50600754604080516306598de160e31b815290516000926001600160a01b0316916332cc6f089160048083019260209291908290030181865afa158015612c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8e9190615b92565b63ffffffff16905082811115612ca15750815b60005b81811015612f4e576000819050600060666000868481518110612cc957612cc961591e565b6020908102919091018101516001600160a01b039081168352828201939093526040918201600020825160c08101845281548516815260018201549485169281019290925290929091830190600160a01b900460ff166003811115612d3057612d3061585c565b6003811115612d4157612d4161585c565b81526001828101546001600160401b03600160a81b909104811660208401526002909301548084166040840152600160401b9004909216606090910152909150600090612d8f908590615bcc565b90505b86811015612e9a57600060666000888481518110612db257612db261591e565b6020908102919091018101516001600160a01b039081168352828201939093526040918201600020825160c08101845281548516815260018201549485169281019290925290929091830190600160a01b900460ff166003811115612e1957612e1961585c565b6003811115612e2a57612e2a61585c565b815260018201546001600160401b03600160a81b909104811660208301526002909201548083166040830152600160401b90049091166060909101529050612e7181615443565b612e7a84615443565b1015612e87578193508092505b5080612e92816159c7565b915050612d92565b506000858481518110612eaf57612eaf61591e565b60200260200101519050858381518110612ecb57612ecb61591e565b6020026020010151868581518110612ee557612ee561591e565b60200260200101906001600160a01b031690816001600160a01b03168152505080868481518110612f1857612f1861591e565b60200260200101906001600160a01b031690816001600160a01b0316815250505050508080612f46906159c7565b915050612ca4565b50815292915050565b6000805b826001600160401b03168460a001516001600160401b031610156113ac5783516001600160a01b03166000908152606a6020908152604080832060a08801516001600160401b031684528252808320815160808101835290546001600160601b0381168252600160601b81046001600160701b031693820193909352600160d01b830463ffffffff1691810191909152600160f01b90910461ffff1660608201529061300682615275565b50915061301590508184615bcc565b925050508360a001805180919061302b90615be4565b6001600160401b0316905250612f5b565b60408051608081018252600080825260208201819052918101829052606081019190915282516001600160a01b03166000908152606a602090815260408083206001600160401b0386168452825291829020825160808101845290546001600160601b0381168252600160601b81046001600160701b0316928201839052600160d01b810463ffffffff1693820193909352600160f01b90920461ffff166060830152156130eb5790506113af565b83516001600160a01b03166000908152606a602090815260408083206060808901516001600160401b0316855290835292819020815160808101835290546001600160601b03811682526001600160701b03600160601b82041682850181905263ffffffff600160d01b8304169383019390935261ffff600160f01b909104811691850191825292850191909152511690820152905092915050565b610bb861ffff841611156131dd5760405162461bcd60e51b815260206004820152601c60248201527f5374616b696e673a2062616420636f6d6d697373696f6e207261746500000000604482015260640161089a565b6001600160a01b038681166000908152606660209081526040808320815160c081018352815486168152600182015495861693810193909352929391929190830190600160a01b900460ff16600381111561323a5761323a61585c565b600381111561324b5761324b61585c565b815260018201546001600160401b03600160a81b909104811660208301526002909201548083166040830152600160401b9004909116606090910152905060006001600160a01b038816600090815260666020526040902060010154600160a01b900460ff1660038111156132c2576132c261585c565b1461330f5760405162461bcd60e51b815260206004820181905260248201527f5374616b696e673a2076616c696461746f7220616c7265616479206578697374604482015260640161089a565b6001600160a01b03808816825286166020820152604081018560038111156133395761333961585c565b9081600381111561334c5761334c61585c565b9052506001600160401b03821660608201526001600160a01b03808816600090815260666020908152604091829020845181549085166001600160a01b0319918216178255918501516001820180549190951692811683178555928501518594919390926001600160a81b031990911617600160a01b8360038111156133d4576133d461585c565b0217905550606082015160018201805467ffffffffffffffff60a81b1916600160a81b6001600160401b039384160217905560808301516002909201805460a0909401519282166001600160801b031990941693909317600160401b92909116919091021790556001600160a01b0386811660009081526067602052604090205416156134a35760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e673a206f776e657220616c726561647920696e20757365000000604482015260640161089a565b6001600160a01b03868116600090815260676020526040902080546001600160a01b03191691891691909117905560018560038111156134e5576134e561585c565b141561353757606880546001810182556000919091527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977530180546001600160a01b0319166001600160a01b0389161790555b604080516080810190915260008152602081016135596402540be40086615bb8565b6001600160701b0390811682526000602080840182905261ffff808a166040958601526001600160a01b03808e16808552606a84528685206001600160401b038b1686528452868520885181548a8701518b8b01516060909c0151909616600160f01b026001600160f01b0363ffffffff9c909c16600160d01b029b909b166001600160d01b0396909916600160601b026001600160d01b03199091166001600160601b039092169190911717939093169590951796909617905591815260698252828120938a16815292905290208054156136865760405162461bcd60e51b815260206004820152602660248201527f5374616b696e673a2064656c65676174696f6e207175657565206973206e6f7460448201526520656d70747960d01b606482015260840161089a565b604080518082019091528190806136a26402540be40088615bb8565b6001600160701b0390811682526001600160401b038088166020938401528454600181018655600095865294839020845195018054949093015116600160701b026001600160b01b03199093169316929092171790556001600160a01b0388167f42449fd19d367b0177da9082fe6da7d4da41af7573e3a3c1750ecffeffe26f9d888860038111156137365761373661585c565b88604051613746939291906158a9565b60405180910390a25050505050505050565b600760009054906101000a90046001600160a01b03166001600160a01b031663eea9a01b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cf9190615a01565b81101580156137dd57508015155b6138295760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20616d6f756e7420697320746f6f206c6f77000000000000604482015260640161089a565b6138386402540be40082615a30565b156138555760405162461bcd60e51b815260040161089a90615a44565b6001600160a01b038281166000908152606660209081526040808320815160c081018352815486168152600182015495861693810193909352929391929190830190600160a01b900460ff1660038111156138b2576138b261585c565b60038111156138c3576138c361585c565b815260018201546001600160401b03600160a81b909104811660208301526002909201548083166040830152600160401b900490911660609091015290506000816040015160038111156139195761391961585c565b14156139375760405162461bcd60e51b815260040161089a906158d1565b6000613941612108565b9050600061394f838361211d565b90506139606402540be40085615bb8565b81546001600160701b03918216600160601b90910490911610156139c65760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e673a20696e73756666696369656e742062616c616e6365000000604482015260640161089a565b6139d56402540be40085615bb8565b81548290600c906139f7908490600160601b90046001600160701b0316615c0b565b82546001600160701b039182166101009390930a9283029190920219909116179055506001600160a01b03808616600090815260666020908152604091829020865181549085166001600160a01b0319918216178255918701516001820180549190951692811683178555928701518794919390926001600160a81b031990911617600160a01b836003811115613a9057613a9061585c565b0217905550606082015160018201805467ffffffffffffffff60a81b1916600160a81b6001600160401b039384160217905560808301516002909201805460a0909401519282166001600160801b031990941693909317600160401b92909116919091021790556001600160a01b038581166000908152606960209081526040808320938a168352929052208054613b755760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a2064656c65676174696f6e20717565756520697320656d70604482015261747960f01b606482015260840161089a565b80546000908290613b8890600190615a79565b81548110613b9857613b9861591e565b9060005260206000200190506402540be40086613bb59190615bb8565b81546001600160401b03919091166001600160701b039091161015613c1c5760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e673a20696e73756666696369656e742062616c616e6365000000604482015260640161089a565b6000613c2d6402540be40088615bb8565b8254613c4291906001600160701b0316615c0b565b82549091506001600160401b03808716600160701b9092041610613c855781546dffffffffffffffffffffffffffff19166001600160701b038216178255613ce9565b604080518082019091526001600160701b0380831682526001600160401b03808816602080850191825287546001810189556000898152919091209451940180549151909216600160701b026001600160b01b031990911693909216929092171790555b8260020160405180604001604052806402540be4008a613d099190615bb8565b6001600160701b0316815260075460408051635e7b72ad60e01b815290516020938401936001600160a01b0390931692635e7b72ad92600480820193918290030181865afa158015613d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d839190615b92565b613d939063ffffffff1689615a90565b6001600160401b03908116909152825460018101845560009384526020938490208351910180549490930151909116600160701b026001600160b01b03199093166001600160701b03909116179190911790556040516001600160a01b03808b1691908a16907fa410e32157a44414a502bb47d775234de1aa7da123f5adfe426898f1601883fd90613e3a908b908a909182526001600160401b0316602082015260400190565b60405180910390a3505050505050505050565b6001600160a01b03808416600090815260696020908152604080832093861683529281528282208351815460a093810282018401909552608081018581529394859491938492918491879085015b82821015613eea57600084815260209081902060408051808201909152908401546001600160701b0381168252600160701b90046001600160401b031681830152825260019092019101613e9b565b5050509082525060018201546001600160401b0316602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015613f7757600084815260209081902060408051808201909152908401546001600160701b0381168252600160701b90046001600160401b031681830152825260019092019101613f28565b50505090825250600391909101546001600160401b0316602090910152905060005b81515160208301516001600160401b031610156141c6576000826000015183602001516001600160401b031681518110613fd557613fd561591e565b60200260200101519050846001600160401b031681602001516001600160401b03161061400257506141c6565b82515160009061401490600190615a79565b84602001516001600160401b0316101561406b578351602085015161403a906001615a90565b6001600160401b0316815181106140535761405361591e565b6020026020010151602001516001600160401b031690505b856001600160401b031682602001516001600160401b03161080156140a457508015806140a457508082602001516001600160401b0316105b156141a4576001600160a01b0388166000908152606a60209081526040808320858301516001600160401b03168452825291829020825160808101845290546001600160601b0381168252600160601b81046001600160701b0316928201839052600160d01b810463ffffffff1693820193909352600160f01b90920461ffff1660608301526141345750614183565b600061413f82615275565b5050905081602001516001600160701b031684600001516001600160701b03168261416a91906159e2565b6141749190615bb8565b61417e9086615bcc565b945050505b6020820180519061419382615be4565b6001600160401b031690525061406b565b8360200180516141b390615be4565b6001600160401b0316905250613f999050565b81604001515182606001516001600160401b0316101561427a576000826040015183606001516001600160401b0316815181106142055761420561591e565b60200260200101519050846001600160401b031681602001516001600160401b03161115614233575061427a565b805161424e906402540be400906001600160701b03166159e2565b6142589083615bcc565b915082606001805161426990615be4565b6001600160401b03169052506141c6565b95945050505050565b600760009054906101000a90046001600160a01b03166001600160a01b031663eea9a01b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142fa9190615a01565b811015801561430857508015155b6143545760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20616d6f756e7420697320746f6f206c6f77000000000000604482015260640161089a565b6143636402540be40082615a30565b156143805760405162461bcd60e51b815260040161089a90615a44565b6001600160a01b038281166000908152606660209081526040808320815160c081018352815486168152600182015495861693810193909352929391929190830190600160a01b900460ff1660038111156143dd576143dd61585c565b60038111156143ee576143ee61585c565b815260018201546001600160401b03600160a81b909104811660208301526002909201548083166040830152600160401b900490911660609091015290506000816040015160038111156144445761444461585c565b14156144625760405162461bcd60e51b815260040161089a906158d1565b600061446c612108565b9050600061447a838361211d565b905061448b6402540be40085615bb8565b81548290600c906144ad908490600160601b90046001600160701b0316615c33565b82546001600160701b039182166101009390930a9283029190920219909116179055506001600160a01b03808616600090815260666020908152604091829020865181549085166001600160a01b0319918216178255918701516001820180549190951692811683178555928701518794919390926001600160a81b031990911617600160a01b8360038111156145465761454661585c565b0217905550606082015160018201805467ffffffffffffffff60a81b1916600160a81b6001600160401b039384160217905560808301516002909201805460a0909401519282166001600160801b031990941693909317600160401b92909116919091021790556001600160a01b038581166000908152606960209081526040808320938a1683529290522080541561470657805460009082906145ec90600190615a79565b815481106145fc576145fc61591e565b600091825260209091200180549091506001600160401b03808616600160701b9092041610614678576146346402540be40087615bb8565b8154829060009061464f9084906001600160701b0316615c33565b92506101000a8154816001600160701b0302191690836001600160701b03160217905550614700565b604080518082019091528290806146946402540be4008a615bb8565b84546146a991906001600160701b0316615c33565b6001600160701b0390811682526001600160401b038089166020938401528454600181018655600095865294839020845195018054949093015116600160701b026001600160b01b03199093169316929092171790555b50614779565b604080518082019091528190806147226402540be40089615bb8565b6001600160701b0390811682526001600160401b038088166020938401528454600181018655600095865294839020845195018054949093015116600160701b026001600160b01b03199093169316929092171790555b604080518681526001600160401b03851660208201526001600160a01b03808a1692908916917f30bcda2f188b532c7644e632473e83a6fb3c5c79717650d0ac790d141bb1b1779101612b4a565b60028201546000908190600160401b90046001600160401b03165b836001600160401b0316816001600160401b031610156148bb5784546001600160a01b03166000908152606a602090815260408083206001600160401b03851684528252808320815160808101835290546001600160601b0381168252600160601b81046001600160701b031693820193909352600160d01b830463ffffffff1691810191909152600160f01b90910461ffff166060820152908061488683615275565b925092505081866148979190615bcc565b95506148a38186615bcc565b945050505080806148b390615be4565b9150506147e2565b6002850180546fffffffffffffffff00000000000000001916600160401b6001600160401b0384160217905560018501546148ff906001600160a01b03168461539d565b811561491b5760045461491b906001600160a01b0316836154d7565b8454604080518581526001600160401b03871660208201526001600160a01b03909216917fb947d7b49cedaf132fd7a9592099c21170864455405d51b4825032441532410091015b60405180910390a25050505050565b6001600160a01b038181166000908152606660209081526040808320815160c081018352815486168152600182015495861693810193909352929391929190830190600160a01b900460ff1660038111156149cf576149cf61585c565b60038111156149e0576149e061585c565b815260018201546001600160401b03600160a81b909104811660208301526002928301548082166040840152600160401b9004166060909101529091506001600160a01b038316600090815260666020526040902060010154600160a01b900460ff166003811115614a5457614a5461585c565b14614aa15760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a206e6f742070656e64696e672076616c696461746f720000604482015260640161089a565b60688054600180820183556000929092527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977530180546001600160a01b0319166001600160a01b038516179055604082019061167b565b6001600160a01b038181166000908152606660209081526040808320815160c081018352815486168152600182015495861693810193909352929391929190830190600160a01b900460ff166003811115614b5457614b5461585c565b6003811115614b6557614b6561585c565b815260018201546001600160401b03600160a81b909104811660208301526002909201548083166040830152600160401b90049091166060909101529050600081604001516003811115614bbb57614bbb61585c565b1415614bd95760405162461bcd60e51b815260040161089a906158d1565b6000614be361260d565b90506000614bf1838361211d565b8054909150600090614c1190600160d01b900463ffffffff166001615c55565b825463ffffffff8216600160d01b0263ffffffff60d01b199091161783556001600160a01b03808716600090815260666020908152604091829020885181549085166001600160a01b03199182161782559189015160018201805491909516928116831785559289015194955088949093909290916001600160a81b031990911617600160a01b836003811115614caa57614caa61585c565b0217905550606082015160018201805467ffffffffffffffff60a81b1916600160a81b6001600160401b039384160217905560808301516002909201805460a0909401519282166001600160801b031990941693909317600160401b9290911691909102179055600754604080516317c332e760e31b815290516001600160a01b039092169163be199738916004808201926020929091908290030181865afa158015614d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d7f9190615b92565b63ffffffff168163ffffffff161415614f5757600760009054906101000a90046001600160a01b03166001600160a01b0316636cbe6cd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015614de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e099190615b92565b63ffffffff16614e1761260d565b614e219190615a90565b6001600160401b03166080850152600360408501819052506001600160a01b03808616600090815260666020908152604091829020875181549085166001600160a01b0319918216178255918801516001820180549190951692811683178555928801518894919390926001600160a81b031990911617600160a01b836003811115614eaf57614eaf61585c565b021790555060608201516001820180546001600160401b03928316600160a81b0267ffffffffffffffff60a81b1990911617905560808301516002909201805460a0909401518216600160401b026001600160801b03199094169282169290921792909217905560405190841681526001600160a01b038616907f6acc1079130362b805ce4a8874346d4ee8893d55f223e378ddc73031ce427eab9060200160405180910390a25b6040805163ffffffff831681526001600160401b03851660208201526001600160a01b038716917ff30f0392d5346908bf200bc0924d0c9860e22d46fc606e979a2e14fff24c62b99101614963565b60003411614ff65760405162461bcd60e51b815260206004820152601860248201527f5374616b696e673a206465706f736974206973207a65726f0000000000000000604482015260640161089a565b6001600160a01b038181166000908152606660209081526040808320815160c081018352815486168152600182015495861693810193909352929391929190830190600160a01b900460ff1660038111156150535761505361585c565b60038111156150645761506461585c565b815260018201546001600160401b03600160a81b909104811660208301526002909201548083166040830152600160401b900490911660609091015290506000816040015160038111156150ba576150ba61585c565b14156150d85760405162461bcd60e51b815260040161089a906158d1565b60006150e6826109bb61260d565b8054909150349082906000906151069084906001600160601b0316615c74565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550505050565b60001960005b60685481101561519557826001600160a01b03166068828154811061515c5761515c61591e565b6000918252602090912001546001600160a01b03161461517b57615183565b809150615195565b8061518d816159c7565b915050615135565b506000811261104c5760685460011080156151be57506068546151ba90600190615a79565b8114155b1561523e57606880546151d390600190615a79565b815481106151e3576151e361591e565b600091825260209091200154606880546001600160a01b03909216918390811061520f5761520f61591e565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b606880548061524f5761524f615c96565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b6000806000600760009054906101000a90046001600160a01b03166001600160a01b0316639dbf97db6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156152cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906152f19190615b92565b63ffffffff16846040015163ffffffff161061531f57505081516000915081906001600160601b0316615396565b60208401516001600160701b03166153485750508151600091506001600160601b031681615396565b612710846060015161ffff1685600001516001600160601b031661536c91906159e2565b6153769190615bb8565b845190925061538f9083906001600160601b0316615a79565b9250600090505b9193909250565b6040516000906001600160a01b0384169061753090849084818181858888f193505050503d80600081146153ed576040519150601f19603f3d011682016040523d82523d6000602084013e6153f2565b606091505b50509050806114c35760405162461bcd60e51b815260206004820181905260248201527f5374616b696e673a206661696c656420746f2073616665207472616e73666572604482015260640161089a565b80516001600160a01b03166000908152606a602090815260408083206060808601516001600160401b03168552908352818420825160808101845290546001600160601b0381168252600160601b81046001600160701b0316948201859052600160d01b810463ffffffff1693820193909352600160f01b90920461ffff1690820152906111ec906402540be400906159e2565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114615524576040519150601f19603f3d011682016040523d82523d6000602084013e615529565b606091505b50509050806114c35760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a206661696c656420746f20756e73616665207472616e736660448201526132b960f11b606482015260840161089a565b6001600160a01b0381168114610ef157600080fd5b600080604083850312156155ad57600080fd5b82356155b881615585565b915060208301356155c881615585565b809150509250929050565b803561ffff811681146155e557600080fd5b919050565b600080604083850312156155fd57600080fd5b823561560881615585565b9150615616602084016155d3565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156156605783516001600160a01b03168352928401929184019160010161563b565b50909695505050505050565b60006020828403121561567e57600080fd5b81356113ac81615585565b600080600080600080600080610100898b0312156156a657600080fd5b88356156b181615585565b975060208901356156c181615585565b965060408901356156d181615585565b955060608901356156e181615585565b945060808901356156f181615585565b935060a089013561570181615585565b925060c089013561571181615585565b915060e089013561572181615585565b809150509295985092959890939650565b6000806040838503121561574557600080fd5b823561575081615585565b915060208301356001600160401b03811681146155c857600080fd5b6000806040838503121561577f57600080fd5b823561578a81615585565b946020939093013593505050565b60008083601f8401126157aa57600080fd5b5081356001600160401b038111156157c157600080fd5b6020830191508360208260051b8501011115611e3857600080fd5b6000806000806000606086880312156157f457600080fd5b85356001600160401b038082111561580b57600080fd5b61581789838a01615798565b9097509550602088013591508082111561583057600080fd5b5061583d88828901615798565b90945092506158509050604087016155d3565b90509295509295909350565b634e487b7160e01b600052602160045260246000fd5b6020808252601d908201527f5374616b696e673a206f6e6c792076616c696461746f72206f776e6572000000604082015260600190565b6001600160a01b0393909316835260ff91909116602083015261ffff16604082015260600190565b6020808252601c908201527f5374616b696e673a2076616c696461746f72206e6f7420666f756e6400000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60208082526026908201527f496e6a6563746f72436f6e74657874486f6c6465723a206f6e6c7920676f7665604082015265726e616e636560d01b606082015260800190565b6020808252601d908201527f496e6a6563746f723a20616c726561647920696e697469616c697a6564000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006000198214156159db576159db6159b1565b5060010190565b60008160001904831182151516156159fc576159fc6159b1565b500290565b600060208284031215615a1357600080fd5b5051919050565b634e487b7160e01b600052601260045260246000fd5b600082615a3f57615a3f615a1a565b500690565b6020808252818101527f5374616b696e673a20616d6f756e74206861766520612072656d61696e646572604082015260600190565b600082821015615a8b57615a8b6159b1565b500390565b60006001600160401b03808316818516808303821115615ab257615ab26159b1565b01949350505050565b600181811c90821680615acf57607f821691505b60208210811415615af057634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680615b1257607f831692505b6020808410821415615b3257634e487b7160e01b86526022600452602486fd5b818015615b465760018114615b5757615b84565b60ff19861689528489019650615b84565b60008a81526020902060005b86811015615b7c5781548b820152908501908301615b63565b505084890196505b509498975050505050505050565b600060208284031215615ba457600080fd5b815163ffffffff811681146113ac57600080fd5b600082615bc757615bc7615a1a565b500490565b60008219821115615bdf57615bdf6159b1565b500190565b60006001600160401b0380831681811415615c0157615c016159b1565b6001019392505050565b60006001600160701b0383811690831681811015615c2b57615c2b6159b1565b039392505050565b60006001600160701b03808316818516808303821115615ab257615ab26159b1565b600063ffffffff808316818516808303821115615ab257615ab26159b1565b60006001600160601b03808316818516808303821115615ab257615ab26159b1565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220cb4c9de140164670209be69f38230fdc92d55652e0e47d31bd7063e078bfb0be64736f6c634300080b0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000000000000000000000000000000000000000003c9", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "0xc15f28c400000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7": "0x0000006000000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8": "0x0000012000000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9": "0x000007d000000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa": "0x0000000500000000000000000000000086d12897c56fe1db08bdfb84bc90f458", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfb": "0xee7dc5ce000000000000000000000000e45d81a7ef9456a254aa4db010aaf660", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfc": "0x1a15b5b700000000000000000000000076106f0857938684d24f2ce167ee1160", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfd": "0x7dfaa57d00000000000000000000000048223c151df5dc1dbc2e24f17e777283", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfe": "0x5811370500000000000000000000000049cfdaff386fd2683d28678abd53f11d", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cff": "0xec23c76c00000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0d00": "0x0000000500000000000000000000000000000000000000000000152d02c7e14a", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0d01": "0xf680000000000000000000000000000000000000000000000000003635c9adc5", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0d02": "0xdea0000000000000000000000000000000000000000000000000003635c9adc5", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0d03": "0xdea0000000000000000000000000000000000000000000000000003635c9adc5", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0d04": "0xdea00000000000000000000000000000000000000000000000000002b5e3af16", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0d05": "0xb188000000000000000000000000000000000000000000000000000000000000" + }, + "balance": "0x15d25a0899b343e80000" + }, + "0000000000000000000000000000000000001001": { + "code": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c806346344031116100715780634634403114610149578063606c0c94146101515780637a37cc59146101625780637b1391a614610173578063c96be4cb14610184578063e1c7392a1461019757600080fd5b806318f062cd146100b9578063244d8257146100d7578063289b3c0d146100fc578063392e53cd1461010d5780633e1bbdc9146101235780634594633414610138575b600080fd5b6100c161019f565b6040516100ce9190610695565b60405180910390f35b6003546001600160a01b03165b6040516001600160a01b0390911681526020016100ce565b6006546001600160a01b03166100e4565b60005460ff1660405190151581526020016100ce565b6101366101313660046106fa565b61035c565b005b6005546001600160a01b03166100e4565b610136610421565b6007546001600160a01b03166100e4565b6004546001600160a01b03166100e4565b6002546001600160a01b03166100e4565b6101366101923660046107a3565b610453565b610136610510565b6040805160088082526101208201909252606091600091906020820161010080368337505060025482519293506001600160a01b0316918391506000906101e8576101e86107c7565b6001600160a01b039283166020918202929092010152600354825191169082906001908110610219576102196107c7565b6001600160a01b03928316602091820292909201015260045482519116908290600290811061024a5761024a6107c7565b6001600160a01b03928316602091820292909201015260055482519116908290600390811061027b5761027b6107c7565b6001600160a01b0392831660209182029290920101526006548251911690829060049081106102ac576102ac6107c7565b6001600160a01b0392831660209182029290920101526007548251911690829060059081106102dd576102dd6107c7565b6001600160a01b03928316602091820292909201015260085482519116908290600690811061030e5761030e6107c7565b6001600160a01b03928316602091820292909201015260095482519116908290600790811061033f5761033f6107c7565b6001600160a01b0390921660209283029190910190910152919050565b60005460ff16156103885760405162461bcd60e51b815260040161037f906107dd565b60405180910390fd5b600280546001600160a01b03199081166001600160a01b038b8116919091179092556003805482168a84161790556004805482168984161790556005805482168884161790556006805482168784161790556007805482168684161790556008805482168584161790556009805490911691831691909117905561040a6105a3565b50506000805460ff19166001179055505050505050565b60005460ff16156104445760405162461bcd60e51b815260040161037f906107dd565b6000805460ff19166001179055565b3341146104ae5760405162461bcd60e51b8152602060048201526024808201527f496e6a6563746f72436f6e74657874486f6c6465723a206f6e6c7920636f696e6044820152636261736560e01b606482015260840161037f565b60025460405163c96be4cb60e01b81526001600160a01b0383811660048301529091169063c96be4cb90602401600060405180830381600087803b1580156104f557600080fd5b505af1158015610509573d6000803e3d6000fd5b5050505050565b60005460ff16156105335760405162461bcd60e51b815260040161037f906107dd565b600280546001600160a01b031990811661100017909155600380548216611001179055600480548216611002179055600580548216617001179055600680548216617002179055600780548216617003179055600880548216617004179055600980549091166170051790556104445b600180546105b090610814565b151590506105ba57565b600080306001600160a01b031660016040516105d6919061084f565b6000604051808303816000865af19150503d8060008114610613576040519150601f19603f3d011682016040523d82523d6000602084013e610618565b606091505b50915091508115610627575050565b805161068c5760405162461bcd60e51b815260206004820152602e60248201527f496e6a6563746f723a20636f6e737472756374696f6e206661696c656420772f60448201526d103ab735b737bbb71032b93937b960911b606482015260840161037f565b80518082602001fd5b6020808252825182820181905260009190848201906040850190845b818110156106d65783516001600160a01b0316835292840192918401916001016106b1565b50909695505050505050565b6001600160a01b03811681146106f757600080fd5b50565b600080600080600080600080610100898b03121561071757600080fd5b8835610722816106e2565b97506020890135610732816106e2565b96506040890135610742816106e2565b95506060890135610752816106e2565b94506080890135610762816106e2565b935060a0890135610772816106e2565b925060c0890135610782816106e2565b915060e0890135610792816106e2565b809150509295985092959890939650565b6000602082840312156107b557600080fd5b81356107c0816106e2565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6020808252601d908201527f496e6a6563746f723a20616c726561647920696e697469616c697a6564000000604082015260600190565b600181811c9082168061082857607f821691505b6020821081141561084957634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c91508083168061086b57607f831692505b602080841082141561088b57634e487b7160e01b86526022600452602486fd5b81801561089f57600181146108b0576108dd565b60ff198616895284890196506108dd565b60008a81526020902060005b868110156108d55781548b8201529085019083016108bc565b505084890196505b50949897505050505050505056fea2646970667358221220e47f8bceeebd71303563d84b263c1285014ce0251dc45fdad19bb86d4ad28c7964736f6c634300080b0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x4634403100000000000000000000000000000000000000000000000000000008" + }, + "balance": "0x0" + }, + "0000000000000000000000000000000000001002": { + "code": "0x6080604052600436106100e15760003560e01c8063459463341161007f5780637b1391a6116100595780637b1391a614610275578063929a55c0146102935780639ac51fab146102b0578063e1c7392a146102c557600080fd5b8063459463341461021b578063606c0c94146102395780637a37cc591461025757600080fd5b8063244d8257116100bb578063244d825714610188578063289b3c0d146101ba578063392e53cd146101d85780633e1bbdc9146101fb57600080fd5b806316cbea511461011e57806318f062cd1461013e57806323056e991461016957600080fd5b366101195734606760008282546100f89190610796565b90915550506067546802b5e3af16b188000011610117576101176102da565b005b600080fd5b34801561012a57600080fd5b506101176101393660046107d4565b610320565b34801561014a57600080fd5b5061015361037b565b60405161016091906107f8565b60405180910390f35b34801561017557600080fd5b506067545b604051908152602001610160565b34801561019457600080fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610160565b3480156101c657600080fd5b506006546001600160a01b03166101a2565b3480156101e457600080fd5b5060005460ff166040519015158152602001610160565b34801561020757600080fd5b50610117610216366004610845565b610538565b34801561022757600080fd5b506005546001600160a01b03166101a2565b34801561024557600080fd5b506007546001600160a01b03166101a2565b34801561026357600080fd5b506004546001600160a01b03166101a2565b34801561028157600080fd5b506002546001600160a01b03166101a2565b34801561029f57600080fd5b5061017a6802b5e3af16b188000081565b3480156102bc57600080fd5b506101176105f4565b3480156102d157600080fd5b506101176105fe565b6066546067546040516001600160a01b0390921691829180156108fc02916000818181858888f19350505050158015610317573d6000803e3d6000fd5b50506000606755565b60005460ff161561034c5760405162461bcd60e51b8152600401610343906108ee565b60405180910390fd5b606680546001600160a01b0319166001600160a01b03929092169190911790556000805460ff19166001179055565b6040805160088082526101208201909252606091600091906020820161010080368337505060025482519293506001600160a01b0316918391506000906103c4576103c4610925565b6001600160a01b0392831660209182029290920101526003548251911690829060019081106103f5576103f5610925565b6001600160a01b03928316602091820292909201015260045482519116908290600290811061042657610426610925565b6001600160a01b03928316602091820292909201015260055482519116908290600390811061045757610457610925565b6001600160a01b03928316602091820292909201015260065482519116908290600490811061048857610488610925565b6001600160a01b0392831660209182029290920101526007548251911690829060059081106104b9576104b9610925565b6001600160a01b0392831660209182029290920101526008548251911690829060069081106104ea576104ea610925565b6001600160a01b03928316602091820292909201015260095482519116908290600790811061051b5761051b610925565b6001600160a01b0390921660209283029190910190910152919050565b60005460ff161561055b5760405162461bcd60e51b8152600401610343906108ee565b600280546001600160a01b03199081166001600160a01b038b8116919091179092556003805482168a8416179055600480548216898416179055600580548216888416179055600680548216878416179055600780548216868416179055600880548216858416179055600980549091169183169190911790556105dd6106a4565b50506000805460ff19166001179055505050505050565b6105fc6102da565b565b60005460ff16156106215760405162461bcd60e51b8152600401610343906108ee565b600280546001600160a01b031990811661100017909155600380548216611001179055600480548216611002179055600580548216617001179055600680548216617002179055600780548216617003179055600880548216617004179055600980549091166170051790556106956106a4565b6000805460ff19166001179055565b600180546106b19061093b565b151590506106bb57565b600080306001600160a01b031660016040516106d79190610976565b6000604051808303816000865af19150503d8060008114610714576040519150601f19603f3d011682016040523d82523d6000602084013e610719565b606091505b50915091508115610728575050565b805161078d5760405162461bcd60e51b815260206004820152602e60248201527f496e6a6563746f723a20636f6e737472756374696f6e206661696c656420772f60448201526d103ab735b737bbb71032b93937b960911b6064820152608401610343565b80518082602001fd5b600082198211156107b757634e487b7160e01b600052601160045260246000fd5b500190565b6001600160a01b03811681146107d157600080fd5b50565b6000602082840312156107e657600080fd5b81356107f1816107bc565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156108395783516001600160a01b031683529284019291840191600101610814565b50909695505050505050565b600080600080600080600080610100898b03121561086257600080fd5b883561086d816107bc565b9750602089013561087d816107bc565b9650604089013561088d816107bc565b9550606089013561089d816107bc565b945060808901356108ad816107bc565b935060a08901356108bd816107bc565b925060c08901356108cd816107bc565b915060e08901356108dd816107bc565b809150509295985092959890939650565b6020808252601d908201527f496e6a6563746f723a20616c726561647920696e697469616c697a6564000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061094f57607f821691505b6020821081141561097057634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c91508083168061099257607f831692505b60208084108214156109b257634e487b7160e01b86526022600452602486fd5b8180156109c657600181146109d757610a04565b60ff19861689528489019650610a04565b60008a81526020902060005b868110156109fc5781548b8201529085019083016109e3565b505084890196505b50949897505050505050505056fea26469706673582212207e9394bf15b5dd774246cd08e8c6182d2d954f9ca25f84abafd1488aa986856f64736f6c634300080b0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000049", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "0x16cbea51000000000000000000000000de8712be934a6a4c7ddd17dc91669f51", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7": "0x284f4b0c00000000000000000000000000000000000000000000000000000000" + }, + "balance": "0x0" + }, + "0000000000000000000000000000000000007001": { + "code": "0x6080604052600436106101175760003560e01c80633e1bbdc9116100a0578063754b270711610064578063754b2707146103985780637a37cc59146103b85780637b1391a6146103d6578063c2a672e0146103f4578063e1c7392a1461041457600080fd5b80633e1bbdc9146102e15780634594633414610301578063463440311461031f578063606c0c94146103345780636be9dcce1461035257600080fd5b80631e83409a116100e75780631e83409a1461023b578063244d82571461025b578063264762041461028d578063289b3c0d146102a0578063392e53cd146102be57600080fd5b80623920401461013a5780630db14e95146101935780631712b0d8146101b357806318f062cd1461021957600080fd5b36610135576002546001600160a01b0316331461013357600080fd5b005b600080fd5b34801561014657600080fd5b506101806101553660046118b1565b6001600160a01b03918216600090815260686020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b34801561019f57600080fd5b506101806101ae3660046118b1565b610429565b3480156101bf57600080fd5b506101d36101ce3660046118ea565b61048a565b60405161018a919081516001600160a01b031681526020808301519082015260408083015190820152606080830151908201526080918201519181019190915260a00190565b34801561022557600080fd5b5061022e6104d0565b60405161018a9190611907565b34801561024757600080fd5b506101336102563660046118ea565b61068d565b34801561026757600080fd5b506003546001600160a01b03165b6040516001600160a01b03909116815260200161018a565b61013361029b3660046118ea565b610af4565b3480156102ac57600080fd5b506006546001600160a01b0316610275565b3480156102ca57600080fd5b5060005460ff16604051901515815260200161018a565b3480156102ed57600080fd5b506101336102fc366004611954565b610dea565b34801561030d57600080fd5b506005546001600160a01b0316610275565b34801561032b57600080fd5b50610133610ea6565b34801561034057600080fd5b506007546001600160a01b0316610275565b34801561035e57600080fd5b5061018061036d3660046118b1565b6001600160a01b03918216600090815260676020908152604080832093909416825291909152205490565b3480156103a457600080fd5b506101806103b33660046118ea565b610ed8565b3480156103c457600080fd5b506004546001600160a01b0316610275565b3480156103e257600080fd5b506002546001600160a01b0316610275565b34801561040057600080fd5b5061013361040f3660046119fd565b610ef6565b34801561042057600080fd5b506101336114b4565b6000806104358461154b565b9050610440816115aa565b6001600160a01b0380861660009081526068602090815260408083209388168352929052205461047890670de0b6b3a7640000611a3f565b6104829190611a5e565b949350505050565b610492611861565b600061049d8361154b565b90506000806104ab83611613565b9150915081836040018181516104c19190611a80565b90525060608301525092915050565b6040805160088082526101208201909252606091600091906020820161010080368337505060025482519293506001600160a01b03169183915060009061051957610519611a98565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061054a5761054a611a98565b6001600160a01b03928316602091820292909201015260045482519116908290600290811061057b5761057b611a98565b6001600160a01b0392831660209182029290920101526005548251911690829060039081106105ac576105ac611a98565b6001600160a01b0392831660209182029290920101526006548251911690829060049081106105dd576105dd611a98565b6001600160a01b03928316602091820292909201015260075482519116908290600590811061060e5761060e611a98565b6001600160a01b03928316602091820292909201015260085482519116908290600690811061063f5761063f611a98565b6001600160a01b03928316602091820292909201015260095482519116908290600790811061067057610670611a98565b6001600160a01b0390921660209283029190910190910152919050565b8060006106998261154b565b90506000806106a783611613565b60025460405163426594b160e01b81526001600160a01b038881166004830152939550919350919091169063426594b190602401600060405180830381600087803b1580156106f557600080fd5b505af1158015610709573d6000803e3d6000fd5b505050506000821115610778576002546040516317066a5760e21b81526001600160a01b03868116600483015290911690635c19a95c9084906024016000604051808303818588803b15801561075e57600080fd5b505af1158015610772573d6000803e3d6000fd5b50505050505b818360400181815161078a9190611a80565b90525060608381019182526001600160a01b038581166000908152606660209081526040808320885181546001600160a01b03191690861617815582890151600180830191909155828a015160028084019190915597516003830155608090990151600490910155928916825260678152828220338352815290829020825193840183528054808552968101549184018290529093015467ffffffffffffffff1690820152929150610840565b60405180910390fd5b600260009054906101000a90046001600160a01b03166001600160a01b031663766718086040518163ffffffff1660e01b8152600401602060405180830381865afa158015610893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b79190611aae565b67ffffffffffffffff16836040015167ffffffffffffffff1611156109175760405162461bcd60e51b81526020600482015260166024820152755374616b696e67506f6f6c3a206e6f7420726561647960501b6044820152606401610837565b6001600160a01b03851660009081526068602090815260408083203384529091528120805483929061094a908490611ad8565b909155506000905061095b8661154b565b9050818160200181815161096f9190611ad8565b905250604081018051849190610986908390611ad8565b90525060808101805184919061099d908390611ad8565b9052506001600160a01b038681166000908152606660209081526040808320855181546001600160a01b031916951694909417845584820151600180860191909155858201516002808701919091556060870151600387015560808701516004909601959095556067835281842033855290925282208281559081019190915501805467ffffffffffffffff1916905547831115610a7d5760405162461bcd60e51b815260206004820152601f60248201527f5374616b696e67506f6f6c3a206e6f7420656e6f7567682062616c616e6365006044820152606401610837565b604051339084156108fc029085906000818181858888f19350505050158015610aaa573d6000803e3d6000fd5b5060405183815233906001600160a01b038816907f70eb43c4a8ae8c40502dcf22436c509c28d6ff421cf07c491be56984bd987068906020015b60405180910390a3505050505050565b806000610b008261154b565b9050600080610b0e83611613565b60025460405163426594b160e01b81526001600160a01b038881166004830152939550919350919091169063426594b190602401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b505050506000821115610bdf576002546040516317066a5760e21b81526001600160a01b03868116600483015290911690635c19a95c9084906024016000604051808303818588803b158015610bc557600080fd5b505af1158015610bd9573d6000803e3d6000fd5b50505050505b8183604001818151610bf19190611a80565b905250606083019081526001600160a01b038481166000908152606660209081526040808320875181546001600160a01b031916951694909417845590860151600184015585015160028301559151600382015560809093015160049093019290925550610c5e8361154b565b90506000670de0b6b3a7640000610c74836115aa565b610c7e9034611a3f565b610c889190611a5e565b6001600160a01b0385166000908152606860209081526040808320338452909152812080549293508392909190610cc0908490611a80565b925050819055503482604001818151610cd99190611a80565b905250602082018051829190610cf0908390611a80565b9052506001600160a01b03848116600081815260666020908152604091829020865181546001600160a01b031916908616178155908601516001820155858201516002808301919091556060870151600383015560808701516004928301555491516317066a5760e21b81529081019290925290911690635c19a95c9034906024016000604051808303818588803b158015610d8b57600080fd5b505af1158015610d9f573d6000803e3d6000fd5b50506040513481523393506001600160a01b03881692507f99039fcf0a98f484616c5196ee8b2ecfa971babf0b519848289ea4db381f85f7915060200160405180910390a350505050565b60005460ff1615610e0d5760405162461bcd60e51b815260040161083790611aef565b600280546001600160a01b03199081166001600160a01b038b8116919091179092556003805482168a841617905560048054821689841617905560058054821688841617905560068054821687841617905560078054821686841617905560088054821685841617905560098054909116918316919091179055610e8f61176f565b50506000805460ff19166001179055505050505050565b60005460ff1615610ec95760405162461bcd60e51b815260040161083790611aef565b6000805460ff19166001179055565b600080610ee48361154b565b9050610eef816115aa565b9392505050565b816000610f028261154b565b9050600080610f1083611613565b60025460405163426594b160e01b81526001600160a01b038881166004830152939550919350919091169063426594b190602401600060405180830381600087803b158015610f5e57600080fd5b505af1158015610f72573d6000803e3d6000fd5b505050506000821115610fe1576002546040516317066a5760e21b81526001600160a01b03868116600483015290911690635c19a95c9084906024016000604051808303818588803b158015610fc757600080fd5b505af1158015610fdb573d6000803e3d6000fd5b50505050505b8183604001818151610ff39190611a80565b905250606083019081526001600160a01b038481166000908152606660209081526040808320875181546001600160a01b0319169516949094178455908601516001840155850151600283015591516003820155608090930151600490930192909255506110608461154b565b905060008160400151116110b65760405162461bcd60e51b815260206004820152601f60248201527f5374616b696e67506f6f6c3a206e6f7468696e6720746f20756e7374616b65006044820152606401610837565b6001600160a01b038416600090815260676020908152604080832033845290915290206002015467ffffffffffffffff16156111345760405162461bcd60e51b815260206004820152601f60248201527f5374616b696e67506f6f6c3a20756e64656c65676174652070656e64696e67006044820152606401610837565b6000670de0b6b3a7640000611148836115aa565b6111529086611a3f565b61115c9190611a5e565b6001600160a01b03861660009081526068602090815260408083203384529091529020549091508111156111d25760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e67506f6f6c3a206e6f7420656e6f7567682073686172657300006044820152606401610837565b6002546040516326ccee8b60e11b81526001600160a01b0387811660048301526024820187905290911690634d99dd1690604401600060405180830381600087803b15801561122057600080fd5b505af1158015611234573d6000803e3d6000fd5b505050506000600260009054906101000a90046001600160a01b03166001600160a01b031663606c0c946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b19190611b26565b90506040518060600160405280868152602001838152602001826001600160a01b0316635e7b72ad6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132c9190611b43565b63ffffffff16600260009054906101000a90046001600160a01b03166001600160a01b031663aea0e78b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a99190611aae565b6113b39190611b69565b67ffffffffffffffff9081169091526001600160a01b0388166000908152606760209081526040808320338452825291829020845181559084015160018201559201516002909201805467ffffffffffffffff191692909116919091179055608083018051869190611426908390611a80565b9052506001600160a01b03868116600081815260666020908152604091829020875181546001600160a01b03191695169490941784558681015160018501558682015160028501556060870151600385015560808701516004909401939093555187815233927f390b1276974b9463e5d66ab10df69b6f3d7b930eb066a0e66df327edd2cc811c9101610ae4565b60005460ff16156114d75760405162461bcd60e51b815260040161083790611aef565b600280546001600160a01b03199081166110001790915560038054821661100117905560048054821661100217905560058054821661700117905560068054821661700217905560078054821661700317905560088054821661700417905560098054909116617005179055610ec961176f565b611553611861565b506001600160a01b0316600081815260666020908152604091829020825160a08101845260018201549281019290925260028101549282019290925260038201546060820152600490910154608082015290815290565b6000806115b683611613565b50905060008184604001516115cb9190611a80565b9050806115e35750670de0b6b3a76400009392505050565b806001828660200151670de0b6b3a76400006115ff9190611a3f565b6116099190611a80565b6104789190611ad8565b600254815160405163295bdf5160e11b81526001600160a01b039182166004820152306024820152600092839283929116906352b7bea290604401602060405180830381865afa15801561166b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168f9190611b95565b90508360600151816116a19190611a80565b90508360800151816116b39190611ad8565b90506402540be4006116c58183611a5e565b6116cf9190611a3f565b9250600760009054906101000a90046001600160a01b03166001600160a01b031663eea9a01b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611724573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117489190611b95565b83101561175a57600094909350915050565b826117658183611ad8565b9250925050915091565b6001805461177c90611bae565b1515905061178657565b600080306001600160a01b031660016040516117a29190611be9565b6000604051808303816000865af19150503d80600081146117df576040519150601f19603f3d011682016040523d82523d6000602084013e6117e4565b606091505b509150915081156117f3575050565b80516118585760405162461bcd60e51b815260206004820152602e60248201527f496e6a6563746f723a20636f6e737472756374696f6e206661696c656420772f60448201526d103ab735b737bbb71032b93937b960911b6064820152608401610837565b80518082602001fd5b6040518060a0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b03811681146118ae57600080fd5b50565b600080604083850312156118c457600080fd5b82356118cf81611899565b915060208301356118df81611899565b809150509250929050565b6000602082840312156118fc57600080fd5b8135610eef81611899565b6020808252825182820181905260009190848201906040850190845b818110156119485783516001600160a01b031683529284019291840191600101611923565b50909695505050505050565b600080600080600080600080610100898b03121561197157600080fd5b883561197c81611899565b9750602089013561198c81611899565b9650604089013561199c81611899565b955060608901356119ac81611899565b945060808901356119bc81611899565b935060a08901356119cc81611899565b925060c08901356119dc81611899565b915060e08901356119ec81611899565b809150509295985092959890939650565b60008060408385031215611a1057600080fd5b8235611a1b81611899565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611a5957611a59611a29565b500290565b600082611a7b57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115611a9357611a93611a29565b500190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611ac057600080fd5b815167ffffffffffffffff81168114610eef57600080fd5b600082821015611aea57611aea611a29565b500390565b6020808252601d908201527f496e6a6563746f723a20616c726561647920696e697469616c697a6564000000604082015260600190565b600060208284031215611b3857600080fd5b8151610eef81611899565b600060208284031215611b5557600080fd5b815163ffffffff81168114610eef57600080fd5b600067ffffffffffffffff808316818516808303821115611b8c57611b8c611a29565b01949350505050565b600060208284031215611ba757600080fd5b5051919050565b600181811c90821680611bc257607f821691505b60208210811415611be357634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680611c0557607f831692505b6020808410821415611c2557634e487b7160e01b86526022600452602486fd5b818015611c395760018114611c4a57611c77565b60ff19861689528489019650611c77565b60008a81526020902060005b86811015611c6f5781548b820152908501908301611c56565b505084890196505b50949897505050505050505056fea26469706673582212206bc39af5bd063fd9531f07ce4b24539981d54ec69bae26c6957a6b5637d711d264736f6c634300080b0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x4634403100000000000000000000000000000000000000000000000000000008" + }, + "balance": "0x0" + }, + "0000000000000000000000000000000000007002": { + "code": "0x6080604052600436106102285760003560e01c80635678138811610123578063bb4d4436116100ab578063e1c7392a1161006f578063e1c7392a146106f4578063ea0217cf14610709578063eb9019d414610729578063ece40cc114610749578063f8ce560a1461076957600080fd5b8063bb4d44361461061a578063c01f9e371461063a578063c59057e41461065a578063dd4e2ba51461067a578063deaaa7cc146106c057600080fd5b80637a37cc59116100f25780637a37cc59146105895780637b1391a6146105a75780637b3c71d3146105c55780637d5e81e2146105e5578063b58131b01461060557600080fd5b8063567813881461051657806359fe2ccf14610536578063606c0c941461054b57806370b0f6601461056957600080fd5b80632d63f693116101b15780633e4f49e6116101755780633e4f49e614610402578063438596321461042f5780634594633414610479578063544ffc9c1461049757806354fd4d50146104ec57600080fd5b80632d63f69314610375578063392e53cd146103955780633932abb1146103ad5780633bccf4fd146103c25780633e1bbdc9146103e257600080fd5b80630eb448fa116101f85780630eb448fa146102d057806318f062cd146102f0578063244d8257146103125780632656227d14610344578063289b3c0d1461035757600080fd5b8062f8df171461023657806301ffc9a71461025657806302a251a31461028b57806306fdde03146102ae57600080fd5b3661023157005b005b600080fd5b34801561024257600080fd5b5061022f6102513660046125ac565b610789565b34801561026257600080fd5b506102766102713660046125c5565b6107ce565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102a0610805565b604051908152602001610282565b3480156102ba57600080fd5b506102c3610824565b604051610282919061264b565b3480156102dc57600080fd5b506102a06102eb3660046128b6565b6108b6565b3480156102fc57600080fd5b506103056109d7565b60405161028291906129ae565b34801561031e57600080fd5b506003546001600160a01b03165b6040516001600160a01b039091168152602001610282565b6102a06103523660046129c1565b610b94565b34801561036357600080fd5b506006546001600160a01b031661032c565b34801561038157600080fd5b506102a06103903660046125ac565b610ca7565b3480156103a157600080fd5b5060005460ff16610276565b3480156103b957600080fd5b506102a0610cde565b3480156103ce57600080fd5b506102a06103dd366004612a5f565b610ce9565b3480156103ee57600080fd5b5061022f6103fd366004612ab1565b610d7d565b34801561040e57600080fd5b5061042261041d3660046125ac565b610e39565b6040516102829190612b70565b34801561043b57600080fd5b5061027661044a366004612b98565b60008281526068602090815260408083206001600160a01b038516845260030190915290205460ff1692915050565b34801561048557600080fd5b506005546001600160a01b031661032c565b3480156104a357600080fd5b506104d16104b23660046125ac565b6000908152606860205260409020805460018201546002909201549092565b60408051938452602084019290925290820152606001610282565b3480156104f857600080fd5b506040805180820190915260018152603160f81b60208201526102c3565b34801561052257600080fd5b506102a0610531366004612bc8565b610f9e565b34801561054257600080fd5b506102a06110ad565b34801561055757600080fd5b506007546001600160a01b031661032c565b34801561057557600080fd5b5061022f6105843660046125ac565b6110b8565b34801561059557600080fd5b506004546001600160a01b031661032c565b3480156105b357600080fd5b506002546001600160a01b031661032c565b3480156105d157600080fd5b506102a06105e0366004612bed565b6110e3565b3480156105f157600080fd5b506102a0610600366004612c75565b61112b565b34801561061157600080fd5b506102a0611234565b34801561062657600080fd5b506102a0610635366004612d21565b61123f565b34801561064657600080fd5b506102a06106553660046125ac565b61124b565b34801561066657600080fd5b506102a06106753660046129c1565b61127a565b34801561068657600080fd5b506040805180820190915260208082527f737570706f72743d627261766f2671756f72756d3d666f722c6162737461696e908201526102c3565b3480156106cc57600080fd5b506102a07f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b34801561070057600080fd5b5061022f6112b4565b34801561071557600080fd5b5061022f6107243660046125ac565b61135a565b34801561073557600080fd5b506102a0610744366004612d3e565b611382565b34801561075557600080fd5b5061022f6107643660046125ac565b61138e565b34801561077557600080fd5b506102a06107843660046125ac565b6113b6565b60005460ff16156107b55760405162461bcd60e51b81526004016107ac90612d6a565b60405180910390fd5b6107be816113db565b506000805460ff19166001179055565b60006001600160e01b0319821663bf26d89760e01b14806107ff57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000606c546000146108185750606c5490565b50606a5490565b905090565b60606066805461083390612da1565b80601f016020809104026020016040519081016040528092919081815260200182805461085f90612da1565b80156108ac5780601f10610881576101008083540402835291602001916108ac565b820191906000526020600020905b81548152906001019060200180831161088f57829003601f168201915b5050505050905090565b600254604051631808461160e11b815233600482015260009182916001600160a01b03909116906330108c2290602401602060405180830381865afa158015610903573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109279190612dd6565b6002546040516310ab556b60e21b81526001600160a01b0380841660048301529293509116906342ad55ac90602401602060405180830381865afa158015610973573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109979190612df3565b6109b35760405162461bcd60e51b81526004016107ac90612e15565b606c83905560006109c68888888861112b565b6000606c5598975050505050505050565b6040805160088082526101208201909252606091600091906020820161010080368337505060025482519293506001600160a01b031691839150600090610a2057610a20612e4a565b6001600160a01b039283166020918202929092010152600354825191169082906001908110610a5157610a51612e4a565b6001600160a01b039283166020918202929092010152600454825191169082906002908110610a8257610a82612e4a565b6001600160a01b039283166020918202929092010152600554825191169082906003908110610ab357610ab3612e4a565b6001600160a01b039283166020918202929092010152600654825191169082906004908110610ae457610ae4612e4a565b6001600160a01b039283166020918202929092010152600754825191169082906005908110610b1557610b15612e4a565b6001600160a01b039283166020918202929092010152600854825191169082906006908110610b4657610b46612e4a565b6001600160a01b039283166020918202929092010152600954825191169082906007908110610b7757610b77612e4a565b6001600160a01b0390921660209283029190910190910152919050565b600254604051631808461160e11b815233600482015260009182916001600160a01b03909116906330108c2290602401602060405180830381865afa158015610be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c059190612dd6565b6002546040516310ab556b60e21b81526001600160a01b0380841660048301529293509116906342ad55ac90602401602060405180830381865afa158015610c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c759190612df3565b610c915760405162461bcd60e51b81526004016107ac90612e15565b610c9d8686868661147c565b9695505050505050565b60008181526067602090815260408083208151928301909152546001600160401b0316908190525b6001600160401b031692915050565b600061081f60695490565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff851660608201526000908190610d5590610d4d906080016040516020818303038152906040528051906020012061158e565b8686866115dc565b9050610d72878288604051806020016040528060008152506115fa565b979650505050505050565b60005460ff1615610da05760405162461bcd60e51b81526004016107ac90612d6a565b600280546001600160a01b03199081166001600160a01b038b8116919091179092556003805482168a841617905560048054821689841617905560058054821688841617905560068054821687841617905560078054821686841617905560088054821685841617905560098054909116918316919091179055610e22611704565b50506000805460ff19166001179055505050505050565b6000818152606760209081526040808320815160a08101835281546001600160401b039081166080830190815282528351808601855260018401549091168152938101939093526002015460ff808216158015938501939093526101009091041615156060830152610eae5750600792915050565b806060015115610ec15750600292915050565b80515143906001600160401b031610610edd5750600092915050565b43610eea82602001515190565b6001600160401b031610610f015750600192915050565b610f0e81602001516117f6565b15610f5057610f1c83611825565b8015610f3b575060008381526068602052604090208054600190910154115b610f46576003610f49565b60045b9392505050565b60405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c20696400000060448201526064016107ac565b50919050565b600254604051631808461160e11b815233600482015260009182916001600160a01b03909116906330108c2290602401602060405180830381865afa158015610feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100f9190612dd6565b6002546040516310ab556b60e21b81526001600160a01b0380841660048301529293509116906342ad55ac90602401602060405180830381865afa15801561105b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107f9190612df3565b61109b5760405162461bcd60e51b81526004016107ac90612e15565b6110a5848461185c565b949350505050565b600061081f4361187d565b3330146110d75760405162461bcd60e51b81526004016107ac90612e60565b6110e081611951565b50565b600080339050610c9d86828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115fa92505050565b600254604051631808461160e11b815233600482015260009182916001600160a01b03909116906330108c2290602401602060405180830381865afa158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190612dd6565b6002546040516310ab556b60e21b81526001600160a01b0380841660048301529293509116906342ad55ac90602401602060405180830381865afa1580156111e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120c9190612df3565b6112285760405162461bcd60e51b81526004016107ac90612e15565b610c9d86868686611992565b600061081f606b5490565b60006107ff8243611c6d565b60008181526067602090815260408083208151928301909152600101546001600160401b031690819052610ccf565b6000848484846040516020016112939493929190612f1c565b60408051601f19818403018152919052805160209091012095945050505050565b60005460ff16156112d75760405162461bcd60e51b81526004016107ac90612d6a565b600280546001600160a01b0319908116611000179091556003805482166110011790556004805482166110021790556005805482166170011790556006805482166170021790556007805482166170031790556008805482166170041790556009805490911661700517905561134b611704565b6000805460ff19166001179055565b3330146113795760405162461bcd60e51b81526004016107ac90612e60565b6110e0816113db565b6000610f498383611c6d565b3330146113ad5760405162461bcd60e51b81526004016107ac90612e60565b6110e081611e72565b6000806113c28361187d565b905060036113d1826002612f7d565b610f499190612f9c565b6000811161143b5760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f7253657474696e67733a20766f74696e6720706572696f6420604482015266746f6f206c6f7760c81b60648201526084016107ac565b606a5460408051918252602082018390527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a1606a55565b60008061148b8686868661127a565b9050600061149882610e39565b905060048160078111156114ae576114ae612b5a565b14806114cb575060058160078111156114c9576114c9612b5a565b145b6115215760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756044820152601b60fa1b60648201526084016107ac565b60008281526067602052604090819020600201805460ff19166001179055517f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f9061156f9084815260200190565b60405180910390a16115848288888888611eb3565b5095945050505050565b60006107ff61159b611fb2565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006115ed878787876120d9565b91509150611584816121c6565b6000848152606760205260408120600161161387610e39565b600781111561162457611624612b5a565b1461167d5760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b60648201526084016107ac565b604080516020810190915281546001600160401b0316908190526000906116a5908790611382565b90506116b387878784612381565b856001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4888784886040516116f29493929190612fbe565b60405180910390a29695505050505050565b6001805461171190612da1565b1515905061171b57565b600080306001600160a01b031660016040516117379190612fe6565b6000604051808303816000865af19150503d8060008114611774576040519150601f19603f3d011682016040523d82523d6000602084013e611779565b606091505b50915091508115611788575050565b80516117ed5760405162461bcd60e51b815260206004820152602e60248201527f496e6a6563746f723a20636f6e737472756374696f6e206661696c656420772f60448201526d103ab735b737bbb71032b93937b960911b60648201526084016107ac565b80518082602001fd5b600061180b82516001600160401b0316151590565b80156107ff57505051436001600160401b03909116111590565b6000818152606860205260408120600281015460018201546118479190613082565b61185361078485610ca7565b11159392505050565b6000803390506110a5848285604051806020016040528060008152506115fa565b600080600260009054906101000a90046001600160a01b03166001600160a01b031663b7ab4db56040518163ffffffff1660e01b8152600401600060405180830381865afa1580156118d3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118fb919081019061309a565b905060005b815181101561194a5761192c82828151811061191e5761191e612e4a565b602002602001015185611c6d565b6119369084613082565b92508061194281613128565b915050611900565b5050919050565b60695460408051918252602082018390527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a1606955565b600061199c611234565b6119ab33610744600143613143565b1015611a2b5760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a2070726f7060448201527f6f73657220766f7465732062656c6f772070726f706f73616c207468726573686064820152621bdb1960ea1b608482015260a4016107ac565b6000611a40868686868051906020012061127a565b90508451865114611a635760405162461bcd60e51b81526004016107ac9061315a565b8351865114611a845760405162461bcd60e51b81526004016107ac9061315a565b6000865111611ad55760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a20656d7074792070726f706f73616c000000000000000060448201526064016107ac565b600081815260676020908152604091829020825191820190925281546001600160401b03169081905215611b555760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b60648201526084016107ac565b6000611b67611b62610cde565b612507565b611b7043612507565b611b7a919061319b565b90506000611b89611b62610805565b611b93908361319b565b835467ffffffffffffffff19166001600160401b038416178455905060018301805467ffffffffffffffff19166001600160401b0383161790557f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084338b8b8d516001600160401b03811115611c0b57611c0b61265e565b604051908082528060200260200182016040528015611c3e57816020015b6060815260200190600190039081611c295790505b508c88888e604051611c58999897969594939291906131c6565b60405180910390a15091979650505050505050565b600254604051631808461160e11b81526001600160a01b03848116600483015260009283929116906330108c2290602401602060405180830381865afa158015611cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cdf9190612dd6565b6002546040516310ab556b60e21b81526001600160a01b0380841660048301529293509116906342ad55ac90602401602060405180830381865afa158015611d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4f9190612df3565b611d5d5760009150506107ff565b6007546040805163068d921560e31b815290516000926001600160a01b03169163346c90a89160048083019260209291908290030181865afa158015611da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcb91906132ce565b611ddb9063ffffffff1685612f9c565b600254604051632409269360e11b81526001600160a01b0385811660048301526001600160401b0384166024830152929350600092909116906348124d269060440161012060405180830381865afa158015611e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5f9190613300565b50949d9c50505050505050505050505050565b606b5460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a1606b55565b60006040518060600160405280602781526020016133e360279139905060005b8551811015611fa957600080878381518110611ef157611ef1612e4a565b60200260200101516001600160a01b0316878481518110611f1457611f14612e4a565b6020026020010151878581518110611f2e57611f2e612e4a565b6020026020010151604051611f4391906133c6565b60006040518083038185875af1925050503d8060008114611f80576040519150601f19603f3d011682016040523d82523d6000602084013e611f85565b606091505b5091509150611f95828286612573565b50505080611fa290613128565b9050611ed3565b50505050505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000070021614801561200b57507f0000000000000000000000000000000000000000000000000000000000015b3046145b1561203557507fa9dd37ce1fe63f8002e699b96337fd646f7c33482e8c93d576a23c3a1e1ce3fe90565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527fdf276cb73863748bcb662935108dff7c987850f3e7a793f7f6131790b165e92f828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561211057506000905060036121bd565b8460ff16601b1415801561212857508460ff16601c14155b1561213957506000905060046121bd565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561218d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166121b6576000600192509250506121bd565b9150600090505b94509492505050565b60008160048111156121da576121da612b5a565b14156121e35750565b60018160048111156121f7576121f7612b5a565b14156122455760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016107ac565b600281600481111561225957612259612b5a565b14156122a75760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016107ac565b60038160048111156122bb576122bb612b5a565b14156123145760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016107ac565b600481600481111561232857612328612b5a565b14156110e05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016107ac565b60008481526068602090815260408083206001600160a01b0387168452600381019092529091205460ff16156124095760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72566f74696e6753696d706c653a20766f746520616c726561604482015266191e4818d85cdd60ca1b60648201526084016107ac565b6001600160a01b03841660009081526003820160205260408120805460ff1916600117905560ff168360ff16141561245a578181600001600082825461244f9190613082565b909155506125009050565b60ff83166001141561247a578181600101600082825461244f9190613082565b60ff83166002141561249a578181600201600082825461244f9190613082565b60405162461bcd60e51b815260206004820152603560248201527f476f7665726e6f72566f74696e6753696d706c653a20696e76616c69642076616044820152746c756520666f7220656e756d20566f74655479706560581b60648201526084016107ac565b5050505050565b60006001600160401b0382111561256f5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b60648201526084016107ac565b5090565b60608315612582575081610f49565b8251156125925782518084602001fd5b8160405162461bcd60e51b81526004016107ac919061264b565b6000602082840312156125be57600080fd5b5035919050565b6000602082840312156125d757600080fd5b81356001600160e01b031981168114610f4957600080fd5b60005b8381101561260a5781810151838201526020016125f2565b83811115612619576000848401525b50505050565b600081518084526126378160208601602086016125ef565b601f01601f19169290920160200192915050565b602081526000610f49602083018461261f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561269c5761269c61265e565b604052919050565b60006001600160401b038211156126bd576126bd61265e565b5060051b60200190565b6001600160a01b03811681146110e057600080fd5b600082601f8301126126ed57600080fd5b813560206127026126fd836126a4565b612674565b82815260059290921b8401810191818101908684111561272157600080fd5b8286015b84811015612745578035612738816126c7565b8352918301918301612725565b509695505050505050565b600082601f83011261276157600080fd5b813560206127716126fd836126a4565b82815260059290921b8401810191818101908684111561279057600080fd5b8286015b848110156127455780358352918301918301612794565b60006001600160401b038311156127c4576127c461265e565b6127d7601f8401601f1916602001612674565b90508281528383830111156127eb57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261281357600080fd5b813560206128236126fd836126a4565b82815260059290921b8401810191818101908684111561284257600080fd5b8286015b848110156127455780356001600160401b038111156128655760008081fd5b8701603f810189136128775760008081fd5b6128888986830135604084016127ab565b845250918301918301612846565b600082601f8301126128a757600080fd5b610f49838335602085016127ab565b600080600080600060a086880312156128ce57600080fd5b85356001600160401b03808211156128e557600080fd5b6128f189838a016126dc565b9650602088013591508082111561290757600080fd5b61291389838a01612750565b9550604088013591508082111561292957600080fd5b61293589838a01612802565b9450606088013591508082111561294b57600080fd5b5061295888828901612896565b95989497509295608001359392505050565b600081518084526020808501945080840160005b838110156129a35781516001600160a01b03168752958201959082019060010161297e565b509495945050505050565b602081526000610f49602083018461296a565b600080600080608085870312156129d757600080fd5b84356001600160401b03808211156129ee57600080fd5b6129fa888389016126dc565b95506020870135915080821115612a1057600080fd5b612a1c88838901612750565b94506040870135915080821115612a3257600080fd5b50612a3f87828801612802565b949793965093946060013593505050565b60ff811681146110e057600080fd5b600080600080600060a08688031215612a7757600080fd5b853594506020860135612a8981612a50565b93506040860135612a9981612a50565b94979396509394606081013594506080013592915050565b600080600080600080600080610100898b031215612ace57600080fd5b8835612ad9816126c7565b97506020890135612ae9816126c7565b96506040890135612af9816126c7565b95506060890135612b09816126c7565b94506080890135612b19816126c7565b935060a0890135612b29816126c7565b925060c0890135612b39816126c7565b915060e0890135612b49816126c7565b809150509295985092959890939650565b634e487b7160e01b600052602160045260246000fd5b6020810160088310612b9257634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215612bab57600080fd5b823591506020830135612bbd816126c7565b809150509250929050565b60008060408385031215612bdb57600080fd5b823591506020830135612bbd81612a50565b60008060008060608587031215612c0357600080fd5b843593506020850135612c1581612a50565b925060408501356001600160401b0380821115612c3157600080fd5b818701915087601f830112612c4557600080fd5b813581811115612c5457600080fd5b886020828501011115612c6657600080fd5b95989497505060200194505050565b60008060008060808587031215612c8b57600080fd5b84356001600160401b0380821115612ca257600080fd5b612cae888389016126dc565b95506020870135915080821115612cc457600080fd5b612cd088838901612750565b94506040870135915080821115612ce657600080fd5b612cf288838901612802565b93506060870135915080821115612d0857600080fd5b50612d1587828801612896565b91505092959194509250565b600060208284031215612d3357600080fd5b8135610f49816126c7565b60008060408385031215612d5157600080fd5b8235612d5c816126c7565b946020939093013593505050565b6020808252601d908201527f496e6a6563746f723a20616c726561647920696e697469616c697a6564000000604082015260600190565b600181811c90821680612db557607f821691505b60208210811415610f9857634e487b7160e01b600052602260045260246000fd5b600060208284031215612de857600080fd5b8151610f49816126c7565b600060208284031215612e0557600080fd5b81518015158114610f4957600080fd5b6020808252818101527f476f7665726e616e63653a206f6e6c792076616c696461746f72206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526018908201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604082015260600190565b600081518084526020808501945080840160005b838110156129a357815187529582019590820190600101612eab565b600081518084526020808501808196508360051b8101915082860160005b85811015612f0f578284038952612efd84835161261f565b98850198935090840190600101612ee5565b5091979650505050505050565b608081526000612f2f608083018761296a565b8281036020840152612f418187612e97565b90508281036040840152612f558186612ec7565b91505082606083015295945050505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612f9757612f97612f67565b500290565b600082612fb957634e487b7160e01b600052601260045260246000fd5b500490565b84815260ff84166020820152826040820152608060608201526000610c9d608083018461261f565b600080835481600182811c91508083168061300257607f831692505b602080841082141561302257634e487b7160e01b86526022600452602486fd5b818015613036576001811461304757613074565b60ff19861689528489019650613074565b60008a81526020902060005b8681101561306c5781548b820152908501908301613053565b505084890196505b509498975050505050505050565b6000821982111561309557613095612f67565b500190565b600060208083850312156130ad57600080fd5b82516001600160401b038111156130c357600080fd5b8301601f810185136130d457600080fd5b80516130e26126fd826126a4565b81815260059190911b8201830190838101908783111561310157600080fd5b928401925b82841015610d72578351613119816126c7565b82529284019290840190613106565b600060001982141561313c5761313c612f67565b5060010190565b60008282101561315557613155612f67565b500390565b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b60006001600160401b038083168185168083038211156131bd576131bd612f67565b01949350505050565b60006101208b8352602060018060a01b038c16818501528160408501526131ef8285018c61296a565b91508382036060850152613203828b612e97565b915083820360808501528189518084528284019150828160051b850101838c0160005b8381101561325457601f1987840301855261324283835161261f565b94860194925090850190600101613226565b505086810360a0880152613268818c612ec7565b94505050505061328360c08401876001600160401b03169052565b6001600160401b03851660e08401528281036101008401526132a5818561261f565b9c9b505050505050505050505050565b805163ffffffff811681146132c957600080fd5b919050565b6000602082840312156132e057600080fd5b610f49826132b5565b80516001600160401b03811681146132c957600080fd5b60008060008060008060008060006101208a8c03121561331f57600080fd5b895161332a816126c7565b60208b015190995061333b81612a50565b60408b0151909850965061335160608b016132b5565b955061335f60808b016132e9565b945061336d60a08b016132e9565b935061337b60c08b016132e9565b925060e08a015161ffff8116811461339257600080fd5b6101008b01519092506bffffffffffffffffffffffff811681146133b557600080fd5b809150509295985092959850929598565b600082516133d88184602087016125ef565b919091019291505056fe476f7665726e6f723a2063616c6c20726576657274656420776974686f7574206d657373616765a26469706673582212204e2459bc1c2774628ecd7b47e3d758d814f0e3965fcc7070ff883d315b8ba2ec64736f6c634300080b0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000049", + "0x0000000000000000000000000000000000000000000000000000000000000066": "0x4368696c697a20476f7665726e616e6365000000000000000000000000000022", + "0x000000000000000000000000000000000000000000000000000000000000006a": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "0x00f8df1700000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7": "0x000004b000000000000000000000000000000000000000000000000000000000" + }, + "balance": "0x0" + }, + "0000000000000000000000000000000000007003": { + "code": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80636f856847116100f9578063c8652bd511610097578063e1c7392a11610071578063e1c7392a146103bf578063e9880ea7146103c7578063eea9a01b146104f4578063fcd6cb3e146104fc57600080fd5b8063c8652bd514610386578063d98e3ebf14610399578063e1a2e863146103ac57600080fd5b80639dbf97db116100d35780639dbf97db14610336578063af70fa2c1461034b578063be1997381461035e578063c227a4121461037357600080fd5b80636f856847146103025780637a37cc59146103145780637b1391a61461032557600080fd5b806341d8a080116101665780635e7b72ad116101405780635e7b72ad146102b4578063606c0c94146102c9578063612d669e146102da5780636cbe6cd8146102ed57600080fd5b806341d8a0801461027d57806345946334146102905780634b635ac5146102a157600080fd5b806332cc6f08116101a257806332cc6f081461021d578063346c90a81461023c578063392e53cd146102525780633e1bbdc91461026857600080fd5b806318f062cd146101c9578063244d8257146101e7578063289b3c0d1461020c575b600080fd5b6101d161050f565b6040516101de9190610fd1565b60405180910390f35b6003546001600160a01b03165b6040516001600160a01b0390911681526020016101de565b6006546001600160a01b03166101f4565b60665463ffffffff165b60405163ffffffff90911681526020016101de565b606654640100000000900463ffffffff16610227565b60005460ff1660405190151581526020016101de565b61027b610276366004611036565b6106cc565b005b61027b61028b3660046110f8565b610791565b6005546001600160a01b03166101f4565b61027b6102af36600461111a565b610825565b606654600160a01b900463ffffffff16610227565b6007546001600160a01b03166101f4565b61027b6102e83660046111a3565b610b0d565b606654600160801b900463ffffffff16610227565b6067545b6040519081526020016101de565b6004546001600160a01b03166101f4565b6002546001600160a01b03166101f4565b606654600160401b900463ffffffff16610227565b61027b6103593660046110f8565b610b4b565b606654600160601b900463ffffffff16610227565b61027b6103813660046110f8565b610bd9565b61027b6103943660046110f8565b610c57565b61027b6103a73660046110f8565b610ce3565b61027b6103ba3660046111a3565b610d6f565b61027b610dad565b6104816040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915250604080516101008101825260665463ffffffff8082168352640100000000820481166020840152600160401b8204811693830193909352600160601b810483166060830152600160801b810483166080830152600160a01b900490911660a082015260675460c082015260685460e082015290565b6040516101de919060006101008201905063ffffffff8084511683528060208501511660208401528060408501511660408401528060608501511660608401528060808501511660808401528060a08501511660a08401525060c083015160c083015260e083015160e083015292915050565b606854610306565b61027b61050a3660046110f8565b610e53565b6040805160088082526101208201909252606091600091906020820161010080368337505060025482519293506001600160a01b031691839150600090610558576105586111bc565b6001600160a01b039283166020918202929092010152600354825191169082906001908110610589576105896111bc565b6001600160a01b0392831660209182029290920101526004548251911690829060029081106105ba576105ba6111bc565b6001600160a01b0392831660209182029290920101526005548251911690829060039081106105eb576105eb6111bc565b6001600160a01b03928316602091820292909201015260065482519116908290600490811061061c5761061c6111bc565b6001600160a01b03928316602091820292909201015260075482519116908290600590811061064d5761064d6111bc565b6001600160a01b03928316602091820292909201015260085482519116908290600690811061067e5761067e6111bc565b6001600160a01b0392831660209182029290920101526009548251911690829060079081106106af576106af6111bc565b6001600160a01b0390921660209283029190910190910152919050565b60005460ff16156106f85760405162461bcd60e51b81526004016106ef906111d2565b60405180910390fd5b600280546001600160a01b03199081166001600160a01b038b8116919091179092556003805482168a84161790556004805482168984161790556005805482168884161790556006805482168784161790556007805482168684161790556008805482168584161790556009805490911691831691909117905561077a610edf565b50506000805460ff19166001179055505050505050565b6006546001600160a01b031633146107bb5760405162461bcd60e51b81526004016106ef90611209565b6066805463ffffffff838116600160a01b81810263ffffffff60a01b1985161790945560408051949093049091168084526020840191909152917fb191e5acbef9e4b8ce0f17af112f8984f92833324657b89fe39768885f81b6ce91015b60405180910390a15050565b60005460ff16156108485760405162461bcd60e51b81526004016106ef906111d2565b6066805463ffffffff191663ffffffff8a16908117909155604080516000815260208101929092527f1c4cfc6dcf4219ed649285020aedf5d064480d1acdf4b8c75b397abd5910f40c910160405180910390a16066805467ffffffff00000000191664010000000063ffffffff8a1690810291909117909155604080516000815260208101929092527f33c8012b0f51f8c1a1e525ea046da837d0eb4fa7473cd863e0bfb73a4f475a5a910160405180910390a16066805463ffffffff60401b1916600160401b63ffffffff891690810291909117909155604080516000815260208101929092527f5aa72ebd12c45515403eef36583106e321b8707946a6ae621f5f393ee0c9677b910160405180910390a16066805463ffffffff60601b1916600160601b63ffffffff881690810291909117909155604080516000815260208101929092527f67da1e9c07e7b373ed5e18cc8355caf6dfe18ab4472ec575600a2172772c6204910160405180910390a16066805463ffffffff60801b1916600160801b63ffffffff871690810291909117909155604080516000815260208101929092527f0a677ce4509bf46fe9bdf65c86abe71921755a78494111b1caa25df328ffcd1c910160405180910390a16066805463ffffffff60a01b1916600160a01b63ffffffff861690810291909117909155604080516000815260208101929092527fb191e5acbef9e4b8ce0f17af112f8984f92833324657b89fe39768885f81b6ce910160405180910390a160678290556040805160008152602081018490527f207082661d623a88e041ad2d52c2d4ddc719880c70c3ab44aa81accff9bd86ed910160405180910390a160688190556040805160008152602081018390527f973f438cb6bc47d284033b6113687c6087f4fb7a3395b03597578ae1259bf23c910160405180910390a150506000805460ff19166001179055505050505050565b606880549082905560408051828152602081018490527f973f438cb6bc47d284033b6113687c6087f4fb7a3395b03597578ae1259bf23c9101610819565b6006546001600160a01b03163314610b755760405162461bcd60e51b81526004016106ef90611209565b6066805463ffffffff83811664010000000081810267ffffffff000000001985161790945560408051949093049091168084526020840191909152917f33c8012b0f51f8c1a1e525ea046da837d0eb4fa7473cd863e0bfb73a4f475a5a9101610819565b6006546001600160a01b03163314610c035760405162461bcd60e51b81526004016106ef90611209565b6066805463ffffffff83811663ffffffff1983168117909355604080519190921680825260208201939093527f1c4cfc6dcf4219ed649285020aedf5d064480d1acdf4b8c75b397abd5910f40c9101610819565b6006546001600160a01b03163314610c815760405162461bcd60e51b81526004016106ef90611209565b6066805463ffffffff838116600160801b81810263ffffffff60801b1985161790945560408051949093049091168084526020840191909152917f0a677ce4509bf46fe9bdf65c86abe71921755a78494111b1caa25df328ffcd1c9101610819565b6006546001600160a01b03163314610d0d5760405162461bcd60e51b81526004016106ef90611209565b6066805463ffffffff838116600160401b81810263ffffffff60401b1985161790945560408051949093049091168084526020840191909152917f5aa72ebd12c45515403eef36583106e321b8707946a6ae621f5f393ee0c9677b9101610819565b606780549082905560408051828152602081018490527f207082661d623a88e041ad2d52c2d4ddc719880c70c3ab44aa81accff9bd86ed9101610819565b60005460ff1615610dd05760405162461bcd60e51b81526004016106ef906111d2565b600280546001600160a01b03199081166110001790915560038054821661100117905560048054821661100217905560058054821661700117905560068054821661700217905560078054821661700317905560088054821661700417905560098054909116617005179055610e44610edf565b6000805460ff19166001179055565b6006546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016106ef90611209565b6066805463ffffffff838116600160601b81810263ffffffff60601b1985161790945560408051949093049091168084526020840191909152917f67da1e9c07e7b373ed5e18cc8355caf6dfe18ab4472ec575600a2172772c62049101610819565b60018054610eec9061124f565b15159050610ef657565b600080306001600160a01b03166001604051610f12919061128a565b6000604051808303816000865af19150503d8060008114610f4f576040519150601f19603f3d011682016040523d82523d6000602084013e610f54565b606091505b50915091508115610f63575050565b8051610fc85760405162461bcd60e51b815260206004820152602e60248201527f496e6a6563746f723a20636f6e737472756374696f6e206661696c656420772f60448201526d103ab735b737bbb71032b93937b960911b60648201526084016106ef565b80518082602001fd5b6020808252825182820181905260009190848201906040850190845b818110156110125783516001600160a01b031683529284019291840191600101610fed565b50909695505050505050565b6001600160a01b038116811461103357600080fd5b50565b600080600080600080600080610100898b03121561105357600080fd5b883561105e8161101e565b9750602089013561106e8161101e565b9650604089013561107e8161101e565b9550606089013561108e8161101e565b9450608089013561109e8161101e565b935060a08901356110ae8161101e565b925060c08901356110be8161101e565b915060e08901356110ce8161101e565b809150509295985092959890939650565b803563ffffffff811681146110f357600080fd5b919050565b60006020828403121561110a57600080fd5b611113826110df565b9392505050565b600080600080600080600080610100898b03121561113757600080fd5b611140896110df565b975061114e60208a016110df565b965061115c60408a016110df565b955061116a60608a016110df565b945061117860808a016110df565b935061118660a08a016110df565b925060c0890135915060e089013590509295985092959890939650565b6000602082840312156111b557600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b6020808252601d908201527f496e6a6563746f723a20616c726561647920696e697469616c697a6564000000604082015260600190565b60208082526026908201527f496e6a6563746f72436f6e74657874486f6c6465723a206f6e6c7920676f7665604082015265726e616e636560d01b606082015260800190565b600181811c9082168061126357607f821691505b6020821081141561128457634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c9150808316806112a657607f831692505b60208084108214156112c657634e487b7160e01b86526022600452602486fd5b8180156112da57600181146112eb57611318565b60ff19861689528489019650611318565b60008a81526020902060005b868110156113105781548b8201529085019083016112f7565b505084890196505b50949897505050505050505056fea2646970667358221220aec27268530fe20741abe5927c25401de17647b1f30019db3b84eac691871ab064736f6c634300080b0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000209", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "0x4b635ac500000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7": "0x0000000500000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8": "0x000004b000000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9": "0x0000006400000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa": "0x000000c800000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfb": "0x0000000600000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfc": "0x0000000100000000000000000000000000000000000000000000003635c9adc5", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfd": "0xdea000000000000000000000000000000000000000000000000000000de0b6b3", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfe": "0xa764000000000000000000000000000000000000000000000000000000000000" + }, + "balance": "0x0" + }, + "0000000000000000000000000000000000007004": { + "code": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80633e1bbdc91161008c5780637a37cc59116100665780637a37cc591461019b5780637b1391a6146101ac578063a8648464146101bd578063e1c7392a146101ce57600080fd5b80633e1bbdc9146101665780634594633414610179578063606c0c941461018a57600080fd5b806316cbea51146100d457806318f062cd146100e9578063244d825714610107578063289b3c0d1461012c57806338dc8ff31461013d578063392e53cd14610150575b600080fd5b6100e76100e2366004610a82565b6101d6565b005b6100f1610231565b6040516100fe9190610aa6565b60405180910390f35b6003546001600160a01b03165b6040516001600160a01b0390911681526020016100fe565b6006546001600160a01b0316610114565b6100e761014b366004610b3c565b6103ee565b60005460ff1660405190151581526020016100fe565b6100e7610174366004610bbf565b61046b565b6005546001600160a01b0316610114565b6007546001600160a01b0316610114565b6004546001600160a01b0316610114565b6002546001600160a01b0316610114565b6066546001600160a01b0316610114565b6100e7610527565b60005460ff16156102025760405162461bcd60e51b81526004016101f990610c68565b60405180910390fd5b606680546001600160a01b0319166001600160a01b03929092169190911790556000805460ff19166001179055565b6040805160088082526101208201909252606091600091906020820161010080368337505060025482519293506001600160a01b03169183915060009061027a5761027a610c9f565b6001600160a01b0392831660209182029290920101526003548251911690829060019081106102ab576102ab610c9f565b6001600160a01b0392831660209182029290920101526004548251911690829060029081106102dc576102dc610c9f565b6001600160a01b03928316602091820292909201015260055482519116908290600390811061030d5761030d610c9f565b6001600160a01b03928316602091820292909201015260065482519116908290600490811061033e5761033e610c9f565b6001600160a01b03928316602091820292909201015260075482519116908290600590811061036f5761036f610c9f565b6001600160a01b0392831660209182029290920101526008548251911690829060069081106103a0576103a0610c9f565b6001600160a01b0392831660209182029290920101526009548251911690829060079081106103d1576103d1610c9f565b6001600160a01b0390921660209283029190910190910152919050565b6006546001600160a01b031633146104575760405162461bcd60e51b815260206004820152602660248201527f496e6a6563746f72436f6e74657874486f6c6465723a206f6e6c7920676f7665604482015265726e616e636560d01b60648201526084016101f9565b61046485858585856105cd565b5050505050565b60005460ff161561048e5760405162461bcd60e51b81526004016101f990610c68565b600280546001600160a01b03199081166001600160a01b038b8116919091179092556003805482168a841617905560048054821689841617905560058054821688841617905560068054821687841617905560078054821686841617905560088054821685841617905560098054909116918316919091179055610510610906565b50506000805460ff19166001179055505050505050565b60005460ff161561054a5760405162461bcd60e51b81526004016101f990610c68565b600280546001600160a01b031990811661100017909155600380548216611001179055600480548216611002179055600580548216617001179055600680548216617002179055600780548216617003179055600880548216617004179055600980549091166170051790556105be610906565b6000805460ff19166001179055565b6105d6856109f8565b6106355760405162461bcd60e51b815260206004820152602a60248201527f52756e74696d65557067726164653a206f6e6c792073797374656d20736d61726044820152691d0818dbdb9d1c9858dd60b21b60648201526084016101f9565b6000636fbc15e960e01b86868660405160240161065493929190610cb5565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925260665491519092506000916001600160a01b0316906106a6908490610cf5565b6000604051808303816000865af19150503d80600081146106e3576040519150601f19603f3d011682016040523d82523d6000602084013e6106e8565b606091505b505090508061074b5760405162461bcd60e51b815260206004820152602960248201527f52756e74696d65557067726164653a206661696c656420746f20696e766f6b656044820152682045564d20686f6f6b60b81b60648201526084016101f9565b6000879050806001600160a01b031663392e53cd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b29190610d30565b61080a57806001600160a01b031663e1c7392a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107f157600080fd5b505af1158015610805573d6000803e3d6000fd5b505050505b83156108c1576000886001600160a01b0316868660405161082c929190610d52565b6000604051808303816000865af19150503d8060008114610869576040519150601f19603f3d011682016040523d82523d6000602084013e61086e565b606091505b50509050806108bf5760405162461bcd60e51b815260206004820181905260248201527f52756e74696d65557067726164653a206d6967726174696f6e206661696c656460448201526064016101f9565b505b7f294c52758d41df5421795a058ea4837ce9d9714c75091eb30fe6925d1231db4a8888886040516108f493929190610cb5565b60405180910390a15050505050505050565b6001805461091390610d62565b1515905061091d57565b600080306001600160a01b031660016040516109399190610d9d565b6000604051808303816000865af19150503d8060008114610976576040519150601f19603f3d011682016040523d82523d6000602084013e61097b565b606091505b5091509150811561098a575050565b80516109ef5760405162461bcd60e51b815260206004820152602e60248201527f496e6a6563746f723a20636f6e737472756374696f6e206661696c656420772f60448201526d103ab735b737bbb71032b93937b960911b60648201526084016101f9565b80518082602001fd5b600080610a03610231565b905060005b8151811015610a6057836001600160a01b0316828281518110610a2d57610a2d610c9f565b60200260200101516001600160a01b03161415610a4e575060019392505050565b80610a5881610e39565b915050610a08565b5060009392505050565b6001600160a01b0381168114610a7f57600080fd5b50565b600060208284031215610a9457600080fd5b8135610a9f81610a6a565b9392505050565b6020808252825182820181905260009190848201906040850190845b81811015610ae75783516001600160a01b031683529284019291840191600101610ac2565b50909695505050505050565b60008083601f840112610b0557600080fd5b50813567ffffffffffffffff811115610b1d57600080fd5b602083019150836020828501011115610b3557600080fd5b9250929050565b600080600080600060608688031215610b5457600080fd5b8535610b5f81610a6a565b9450602086013567ffffffffffffffff80821115610b7c57600080fd5b610b8889838a01610af3565b90965094506040880135915080821115610ba157600080fd5b50610bae88828901610af3565b969995985093965092949392505050565b600080600080600080600080610100898b031215610bdc57600080fd5b8835610be781610a6a565b97506020890135610bf781610a6a565b96506040890135610c0781610a6a565b95506060890135610c1781610a6a565b94506080890135610c2781610a6a565b935060a0890135610c3781610a6a565b925060c0890135610c4781610a6a565b915060e0890135610c5781610a6a565b809150509295985092959890939650565b6020808252601d908201527f496e6a6563746f723a20616c726561647920696e697469616c697a6564000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000825160005b81811015610d165760208186018101518583015201610cfc565b81811115610d25576000828501525b509190910192915050565b600060208284031215610d4257600080fd5b81518015158114610a9f57600080fd5b8183823760009101908152919050565b600181811c90821680610d7657607f821691505b60208210811415610d9757634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680610db957607f831692505b6020808410821415610dd957634e487b7160e01b86526022600452602486fd5b818015610ded5760018114610dfe57610e2b565b60ff19861689528489019650610e2b565b60008a81526020902060005b86811015610e235781548b820152908501908301610e0a565b505084890196505b509498975050505050505050565b6000600019821415610e5b57634e487b7160e01b600052601160045260246000fd5b506001019056fea264697066735822122009a90840919eac14b6d8da5455b8841fc6163bf5ed954514a7d9ece022f7fad564736f6c634300080b0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000049", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "0x16cbea5100000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7": "0x00007f0100000000000000000000000000000000000000000000000000000000" + }, + "balance": "0x0" + }, + "0000000000000000000000000000000000007005": { + "code": "0x608060405234801561001057600080fd5b50600436106101425760003560e01c80636ac4d975116100b8578063880f40391161007c578063880f4039146102a957806397f735d5146102bc578063a154ce82146102ef578063aad7e36314610302578063e1c7392a1461033e578063f315df861461034657600080fd5b80636ac4d9751461024e57806377fdcede146102615780637a37cc59146102745780637b1391a61461028557806386497f411461029657600080fd5b806339e7c5361161010a57806339e7c536146101c75780633e1bbdc9146101da57806345946334146101ed57806347d23419146101fe57806350c358a414610211578063606c0c941461023d57600080fd5b80630e17790f1461014757806318f062cd1461015c578063244d82571461017a578063289b3c0d1461019f578063392e53cd146101b0575b600080fd5b61015a61015536600461141b565b610359565b005b6101646103c7565b6040516101719190611454565b60405180910390f35b6003546001600160a01b03165b6040516001600160a01b039091168152602001610171565b6006546001600160a01b0316610187565b60005460ff165b6040519015158152602001610171565b61015a6101d53660046114a1565b610584565b61015a6101e83660046114c5565b610590565b6005546001600160a01b0316610187565b61015a61020c3660046114a1565b61064c565b6101b761021f3660046114a1565b6001600160a01b031660009081526066602052604090205460ff1690565b6007546001600160a01b0316610187565b61015a61025c366004611584565b61067f565b61015a61026f3660046114a1565b6106f3565b6004546001600160a01b0316610187565b6002546001600160a01b0316610187565b61015a6102a43660046114a1565b610726565b61015a6102b73660046114a1565b610759565b6101b76102ca3660046114a1565b6001600160a01b0316600090815260666020526040902054600160a81b900460ff1690565b61015a6102fd3660046114a1565b61078c565b6103156103103660046114a1565b6107bf565b6040805160ff90941684526001600160a01b039283166020850152911690820152606001610171565b61015a610865565b61015a6103543660046114a1565b61090b565b3341146103b95760405162461bcd60e51b8152602060048201526024808201527f496e6a6563746f72436f6e74657874486f6c6465723a206f6e6c7920636f696e6044820152636261736560e01b60648201526084015b60405180910390fd5b6103c3828261093e565b5050565b6040805160088082526101208201909252606091600091906020820161010080368337505060025482519293506001600160a01b03169183915060009061041057610410611649565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061044157610441611649565b6001600160a01b03928316602091820292909201015260045482519116908290600290811061047257610472611649565b6001600160a01b0392831660209182029290920101526005548251911690829060039081106104a3576104a3611649565b6001600160a01b0392831660209182029290920101526006548251911690829060049081106104d4576104d4611649565b6001600160a01b03928316602091820292909201015260075482519116908290600590811061050557610505611649565b6001600160a01b03928316602091820292909201015260085482519116908290600690811061053657610536611649565b6001600160a01b03928316602091820292909201015260095482519116908290600790811061056757610567611649565b6001600160a01b0390921660209283029190910190910152919050565b61058d81610b61565b50565b60005460ff16156105b35760405162461bcd60e51b81526004016103b09061165f565b600280546001600160a01b03199081166001600160a01b038b8116919091179092556003805482168a841617905560048054821689841617905560058054821688841617905560068054821687841617905560078054821686841617905560088054821685841617905560098054909116918316919091179055610635610c43565b50506000805460ff19166001179055505050505050565b6006546001600160a01b031633146106765760405162461bcd60e51b81526004016103b090611696565b61058d81610d35565b60005460ff16156106a25760405162461bcd60e51b81526004016103b09061165f565b60005b81518110156106e2576106d08282815181106106c3576106c3611649565b6020026020010151610ecd565b806106da816116dc565b9150506106a5565b50506000805460ff19166001179055565b6006546001600160a01b0316331461071d5760405162461bcd60e51b81526004016103b090611696565b61058d81610fe0565b6006546001600160a01b031633146107505760405162461bcd60e51b81526004016103b090611696565b61058d816110e4565b6006546001600160a01b031633146107835760405162461bcd60e51b81526004016103b090611696565b61058d81610ecd565b6006546001600160a01b031633146107b65760405162461bcd60e51b81526004016103b090611696565b61058d816111d7565b6001600160a01b0381166000908152606760205260408082208151606081019092528054839283928392829060ff1660028111156107ff576107ff611705565b600281111561081057610810611705565b815281546001600160a01b03610100909104811660208301526001909201549091166040909101528051909150600281111561084e5761084e611705565b602082015160409092015190969195509350915050565b60005460ff16156108885760405162461bcd60e51b81526004016103b09061165f565b600280546001600160a01b031990811661100017909155600380548216611001179055600480548216611002179055600580548216617001179055600680548216617002179055600780548216617003179055600880548216617004179055600980549091166170051790556108fc610c43565b6000805460ff19166001179055565b6006546001600160a01b031633146109355760405162461bcd60e51b81526004016103b090611696565b61058d8161136f565b6001600160a01b03821660009081526066602052604090205460ff166109b05760405162461bcd60e51b815260206004820152602160248201527f4465706c6f7965723a206465706c6f796572206973206e6f7420616c6c6f77656044820152601960fa1b60648201526084016103b0565b6001600160a01b0381166000908152606760205260408082208151606081019092528054829060ff1660028111156109ea576109ea611705565b60028111156109fb576109fb611705565b815281546001600160a01b0361010090910481166020808401919091526001909301548116604090920191909152908201519192501615610a8d5760405162461bcd60e51b815260206004820152602660248201527f4465706c6f7965723a20636f6e7472616374206973206465706c6f79656420616044820152656c726561647960d01b60648201526084016103b0565b60018082526001600160a01b0383811660208085018290529186166040808601919091526000918252606790925220825181548493839160ff191690836002811115610adb57610adb611705565b02179055506020828101518254610100600160a81b0319166101006001600160a01b0392831602178355604093840151600190930180546001600160a01b0319169382169390931790925591518482168152908516917f33c981baba081f8fd2c52ac6ad1ea95b6814b4376640f55689051f6584729688910160405180910390a2505050565b6001600160a01b0381166000908152606760205260408082208151606081019092528054829060ff166002811115610b9b57610b9b611705565b6002811115610bac57610bac611705565b815281546001600160a01b03610100909104811660208301526001909201549091166040909101529050600281516002811115610beb57610beb611705565b14156103c35760405162461bcd60e51b815260206004820152602160248201527f4465706c6f7965723a20636f6e7472616374206973206e6f7420656e61626c656044820152601960fa1b60648201526084016103b0565b60018054610c509061171b565b15159050610c5a57565b600080306001600160a01b03166001604051610c769190611756565b6000604051808303816000865af19150503d8060008114610cb3576040519150601f19603f3d011682016040523d82523d6000602084013e610cb8565b606091505b50915091508115610cc7575050565b8051610d2c5760405162461bcd60e51b815260206004820152602e60248201527f496e6a6563746f723a20636f6e737472756374696f6e206661696c656420772f60448201526d103ab735b737bbb71032b93937b960911b60648201526084016103b0565b80518082602001fd5b6001600160a01b0381166000908152606760205260408082208151606081019092528054829060ff166002811115610d6f57610d6f611705565b6002811115610d8057610d80611705565b815281546001600160a01b03610100909104811660208301526001909201549091166040909101529050600281516002811115610dbf57610dbf611705565b14610e175760405162461bcd60e51b815260206004820152602260248201527f4465706c6f7965723a20636f6e747261637420616c726561647920656e61626c604482015261195960f21b60648201526084016103b0565b60018082526001600160a01b0383166000908152606760205260409020825181548493839160ff191690836002811115610e5357610e53611705565b021790555060208201518154610100600160a81b0319166101006001600160a01b0392831602178255604092830151600190920180546001600160a01b031916928216929092179091559051908316907fae81c15a680e6640ba872ca44f364ad67c60a04089ad9fa100f7a3ce94da9f6890600090a25050565b6001600160a01b03811660009081526066602052604090205460ff1615610f365760405162461bcd60e51b815260206004820181905260248201527f4465706c6f7965723a206465706c6f79657220616c726561647920657869737460448201526064016103b0565b60408051606081018252600181526001600160a01b0383811660208084018281526000858701818152848252606690935286812095518654925193516001600160a81b0319909316901515610100600160a81b0319161761010093909516929092029390931760ff60a81b1916600160a81b9315159390930292909217909255915190917f861a21548a3ee34d896ccac3668a9d65030aaf2cb7367a2ed13608014016a03291a250565b6001600160a01b03811660009081526066602052604090205460ff166110185760405162461bcd60e51b81526004016103b0906117f2565b6001600160a01b038116600090815260666020526040902054600160a81b900460ff16156110925760405162461bcd60e51b815260206004820152602160248201527f4465706c6f7965723a206465706c6f79657220616c72656164792062616e6e656044820152601960fa1b60648201526084016103b0565b6001600160a01b038116600081815260666020526040808220805460ff60a81b1916600160a81b179055517f9cf4d5b60708c113f822fd9addfd8d6d6280c3f539f5edf3ab97b528dedfa80a9190a250565b6001600160a01b03811660009081526066602052604090205460ff1661111c5760405162461bcd60e51b81526004016103b0906117f2565b6001600160a01b038116600090815260666020526040902054600160a81b900460ff1661118b5760405162461bcd60e51b815260206004820181905260248201527f4465706c6f7965723a206465706c6f796572206973206e6f742062616e6e656460448201526064016103b0565b6001600160a01b038116600081815260666020526040808220805460ff60a81b19169055517f59c71bff57754566be21262a328a9c5c20b85a1be305ff7e01378049d02493e19190a250565b6001600160a01b0381166000908152606760205260408082208151606081019092528054829060ff16600281111561121157611211611705565b600281111561122257611222611705565b815281546001600160a01b0361010090910481166020830152600192830154166040909101529091508151600281111561125e5761125e611705565b146112b75760405162461bcd60e51b815260206004820152602360248201527f4465706c6f7965723a20636f6e747261637420616c72656164792064697361626044820152621b195960ea1b60648201526084016103b0565b60028082526001600160a01b0383166000908152606760205260409020825181548493839160ff19169060019084908111156112f5576112f5611705565b021790555060208201518154610100600160a81b0319166101006001600160a01b0392831602178255604092830151600190920180546001600160a01b031916928216929092179091559051908316907f793bc6423dd0257d64f9d47db72fd4b2162f4541aa41740ba1c5fb5e2cd41bcd90600090a25050565b6001600160a01b03811660009081526066602052604090205460ff166113a75760405162461bcd60e51b81526004016103b0906117f2565b6001600160a01b03811660008181526066602052604080822080546001600160b01b0319169055517ffdb22628e87f888d060acc53d048a6a8400a5024f81f9dcb0606e723f238864a9190a250565b6001600160a01b038116811461058d57600080fd5b8035611416816113f6565b919050565b6000806040838503121561142e57600080fd5b8235611439816113f6565b91506020830135611449816113f6565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156114955783516001600160a01b031683529284019291840191600101611470565b50909695505050505050565b6000602082840312156114b357600080fd5b81356114be816113f6565b9392505050565b600080600080600080600080610100898b0312156114e257600080fd5b88356114ed816113f6565b975060208901356114fd816113f6565b9650604089013561150d816113f6565b9550606089013561151d816113f6565b9450608089013561152d816113f6565b935060a089013561153d816113f6565b925060c089013561154d816113f6565b915060e089013561155d816113f6565b809150509295985092959890939650565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561159757600080fd5b823567ffffffffffffffff808211156115af57600080fd5b818501915085601f8301126115c357600080fd5b8135818111156115d5576115d561156e565b8060051b604051601f19603f830116810181811085821117156115fa576115fa61156e565b60405291825284820192508381018501918883111561161857600080fd5b938501935b8285101561163d5761162e8561140b565b8452938501939285019261161d565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b6020808252601d908201527f496e6a6563746f723a20616c726561647920696e697469616c697a6564000000604082015260600190565b60208082526026908201527f496e6a6563746f72436f6e74657874486f6c6465723a206f6e6c7920676f7665604082015265726e616e636560d01b606082015260800190565b60006000198214156116fe57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052602160045260246000fd5b600181811c9082168061172f57607f821691505b6020821081141561175057634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c91508083168061177257607f831692505b602080841082141561179257634e487b7160e01b86526022600452602486fd5b8180156117a657600181146117b7576117e4565b60ff198616895284890196506117e4565b60008a81526020902060005b868110156117dc5781548b8201529085019083016117c3565b505084890196505b509498975050505050505050565b6020808252818101527f4465706c6f7965723a206465706c6f79657220646f65736e277420657869737460408201526060019056fea26469706673582212207dce1b1e05f1c2aecbf67c7332098568c25fe40567f0fcf9603a2982c865aba064736f6c634300080b0033", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000000000000000000000000000000000000000000c9", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "0x6ac4d97500000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7": "0x0000002000000000000000000000000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf8": "0x0000000100000000000000000000000054e98ee51446505fcf69093e015ee360", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf9": "0x3432110400000000000000000000000000000000000000000000000000000000" + }, + "balance": "0x0" + }, + "b0c09bf51e04edc7bf198d61bb74cda886878167": { + "balance": "0x197d7361310e45c669f80000" + }, + "c59181b702a7f3a8ecea27f30072b8dbccc0c48a": { + "balance": "0x33b2e3c9fd0803ce8000000" + }, + "fffffffffffffffffffffffffffffffffffffffe": { + "balance": "0x0" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" +} \ No newline at end of file diff --git a/config/embeded.go b/config/embeded.go new file mode 100644 index 000000000..d7a0fd57c --- /dev/null +++ b/config/embeded.go @@ -0,0 +1,21 @@ +package config + +import ( + _ "embed" + "encoding/json" + "fmt" + "github.com/ethereum/go-ethereum/core" +) + +func mustParseGenesisConfigFromJson(rawJson []byte) *core.Genesis { + genesis := new(core.Genesis) + if err := json.Unmarshal(rawJson, genesis); err != nil { + panic(fmt.Sprintf("invalid genesis file: %v", err)) + } + return genesis +} + +//go:embed embedded/scoville.json +var scovilleRawGenesisConfig []byte + +var ScovilleGenesisConfig = mustParseGenesisConfigFromJson(scovilleRawGenesisConfig) diff --git a/core/vm/chiliz.go b/core/vm/chiliz.go index 1f7206134..1ad2265a4 100644 --- a/core/vm/chiliz.go +++ b/core/vm/chiliz.go @@ -27,7 +27,12 @@ func applyChilizDeploymentEvmHook(evm *EVM, caller ContractRef, addr common.Addr if systemcontract.IsSystemContract(addr) { return gas, nil } - input, err := systemcontract.EvmHooksAbi.Pack("registerDeployedContract", caller.Address(), addr) + var input []byte + if evm.chainRules.HasDeployOrigin { + input, err = systemcontract.EvmHooksAbi.Pack("registerDeployedContract", evm.TxContext.Origin, addr) + } else { + input, err = systemcontract.EvmHooksAbi.Pack("registerDeployedContract", caller.Address(), addr) + } if err != nil { return gas, ErrNotAllowed } diff --git a/params/bootnodes.go b/params/bootnodes.go index 1f94e1972..253860665 100644 --- a/params/bootnodes.go +++ b/params/bootnodes.go @@ -74,9 +74,14 @@ var YoloV3Bootnodes = []string{ "enode://9e1096aa59862a6f164994cb5cb16f5124d6c992cdbf4535ff7dea43ea1512afe5448dca9df1b7ab0726129603f1a3336b631e4d7a1a44c94daddd03241587f9@3.9.20.133:30303", } -var ChilizMainnetBootnodes = []string{} +var ChilizScovilleBootnodes = []string{ + "enode://3e400492243ac18b838fa782d7bcfa08f57f307d130988de2aae63174b5b05aeba29786b82d70b2b3f556c62923b08012ead1eae4a9e17416a9273f788774577@15.237.22.149:30303", + "enode://c80406f22398f9657684cc9d87994cb25857197f6fa26451ae1068d72899eae1a259b4dba2f5310d920b2112de5bed8bccb9f22ea51518c5a1a239b3ce489934@15.236.167.157:30303", + "enode://770d890858aa0cfeb8c64052830f8f3ad87e2b2c52105b9a418565e1e98dc61ecaf58b5742c1b31d76277215eea906c078e532b61c36c4606badbe77c92bbe1f@13.38.166.107:30303", + "enode://1e3593214f7c080e5687594dff5b49a1a7744bf6dca0491ea2e12436ba903d647403f0cecf7fd8305a5be3d999b439b4323fd22f05c64c23401ee60c23528f53@13.36.115.227:30303", +} -var ChilizTestnetBootnodes = []string{} +var ChilizMainnetBootnodes = []string{} var V5Bootnodes = []string{ // Teku team's bootnode diff --git a/params/config.go b/params/config.go index 07cb64c7b..187adf417 100644 --- a/params/config.go +++ b/params/config.go @@ -38,8 +38,8 @@ var ( RialtoGenesisHash = common.HexToHash("0xaabe549bfa85c84f7aee9da7010b97453ad686f2c2d8ce00503d1a00c72cad54") YoloV3GenesisHash = common.HexToHash("0xf1f2876e8500c77afcc03228757b39477eceffccf645b734967fe3c7e16967b7") - ChilizMainnetGenesisHash = common.HexToHash("0x0d21840abff46b96c84b2ac9e10e4f5cdaeb5693cb665db62a2f3b02d2d57b5b") - ChilizTestnetGenesisHash = common.HexToHash("0x0d21840abff46b96c84b2ac9e10e4f5cdaeb5693cb665db62a2f3b02d2d57b5b") + ChilizScovilleGenesisHash = common.HexToHash("0xa148378fbfd7562cd43c8622d20ad056b735fdc0f968f56d0033294c33ededf2") + ChilizMainnetGenesisHash = common.HexToHash("") ) // TrustedCheckpoints associates each known checkpoint with the genesis hash of @@ -329,48 +329,6 @@ var ( }, } - ChilizMainnetChainConfig = &ChainConfig{ - ChainID: big.NewInt(88888), - HomesteadBlock: big.NewInt(0), - EIP150Block: big.NewInt(0), - EIP155Block: big.NewInt(0), - EIP158Block: big.NewInt(0), - ByzantiumBlock: big.NewInt(0), - ConstantinopleBlock: big.NewInt(0), - PetersburgBlock: big.NewInt(0), - IstanbulBlock: big.NewInt(0), - MuirGlacierBlock: big.NewInt(0), - RamanujanBlock: big.NewInt(0), - NielsBlock: big.NewInt(0), - MirrorSyncBlock: big.NewInt(0), - BrunoBlock: big.NewInt(0), - Parlia: &ParliaConfig{ - Period: 3, - Epoch: 200, - }, - } - - ChilizTestnetChainConfig = &ChainConfig{ - ChainID: big.NewInt(88880), - HomesteadBlock: big.NewInt(0), - EIP150Block: big.NewInt(0), - EIP155Block: big.NewInt(0), - EIP158Block: big.NewInt(0), - ByzantiumBlock: big.NewInt(0), - ConstantinopleBlock: big.NewInt(0), - PetersburgBlock: big.NewInt(0), - IstanbulBlock: big.NewInt(0), - MuirGlacierBlock: big.NewInt(0), - RamanujanBlock: big.NewInt(0), - NielsBlock: big.NewInt(0), - MirrorSyncBlock: big.NewInt(0), - BrunoBlock: big.NewInt(0), - Parlia: &ParliaConfig{ - Period: 3, - Epoch: 200, - }, - } - // AllEthashProtocolChanges contains every protocol change (EIPs) introduced // and accepted by the Ethereum core developers into the Ethash consensus. // @@ -532,8 +490,9 @@ type ChainConfig struct { MuirGlacierBlock *big.Int `json:"muirGlacierBlock,omitempty"` // Eip-2384 (bomb delay) switch block (nil = no fork, 0 = already activated) BerlinBlock *big.Int `json:"berlinBlock,omitempty"` // Berlin switch block (nil = no fork, 0 = already on berlin) - RuntimeUpgradeBlock *big.Int `json:"RuntimeUpgradeBlock,omitempty"` - DeployerProxyBlock *big.Int `json:"DeployerProxyBlock,omitempty"` + // Chiliz V2 forks + RuntimeUpgradeBlock *big.Int `json:"runtimeUpgradeBlock,omitempty"` + DeployOriginBlock *big.Int `json:"deployOriginBlock,omitempty"` YoloV3Block *big.Int `json:"yoloV3Block,omitempty"` // YOLO v3: Gas repricings TODO @holiman add EIP references EWASMBlock *big.Int `json:"ewasmBlock,omitempty"` // EWASM switch block (nil = no fork, 0 = already activated) RamanujanBlock *big.Int `json:"ramanujanBlock,omitempty" toml:",omitempty"` // ramanujanBlock switch block (nil = no fork, 0 = already activated) @@ -723,14 +682,6 @@ func (c *ChainConfig) IsEWASM(num *big.Int) bool { return isForked(c.EWASMBlock, num) } -func (c *ChainConfig) HasRuntimeUpgrade(num *big.Int) bool { - return isForked(c.RuntimeUpgradeBlock, num) -} - -func (c *ChainConfig) HasDeployerProxy(num *big.Int) bool { - return isForked(c.DeployerProxyBlock, num) -} - // CheckCompatible checks whether scheduled fork transitions have been imported // with a mismatching chain configuration. func (c *ChainConfig) CheckCompatible(newcfg *ChainConfig, height uint64) *ConfigCompatError { @@ -911,7 +862,9 @@ type Rules struct { IsHomestead, IsEIP150, IsEIP155, IsEIP158 bool IsByzantium, IsConstantinople, IsPetersburg, IsIstanbul bool IsBerlin, IsCatalyst bool - HasRuntimeUpgrade, HasDeployerProxy bool + // features + HasRuntimeUpgrade bool + HasDeployOrigin bool } // Rules ensures c's ChainID is not nil. @@ -921,18 +874,19 @@ func (c *ChainConfig) Rules(num *big.Int) Rules { chainID = new(big.Int) } return Rules{ - ChainID: new(big.Int).Set(chainID), - IsHomestead: c.IsHomestead(num), - IsEIP150: c.IsEIP150(num), - IsEIP155: c.IsEIP155(num), - IsEIP158: c.IsEIP158(num), - IsByzantium: c.IsByzantium(num), - IsConstantinople: c.IsConstantinople(num), - IsPetersburg: c.IsPetersburg(num), - IsIstanbul: c.IsIstanbul(num), - IsBerlin: c.IsBerlin(num), - IsCatalyst: c.IsCatalyst(num), - HasRuntimeUpgrade: c.HasRuntimeUpgrade(num), - HasDeployerProxy: c.HasDeployerProxy(num), + ChainID: new(big.Int).Set(chainID), + IsHomestead: c.IsHomestead(num), + IsEIP150: c.IsEIP150(num), + IsEIP155: c.IsEIP155(num), + IsEIP158: c.IsEIP158(num), + IsByzantium: c.IsByzantium(num), + IsConstantinople: c.IsConstantinople(num), + IsPetersburg: c.IsPetersburg(num), + IsIstanbul: c.IsIstanbul(num), + IsBerlin: c.IsBerlin(num), + IsCatalyst: c.IsCatalyst(num), + // features + HasRuntimeUpgrade: isForked(c.RuntimeUpgradeBlock, num), + HasDeployOrigin: isForked(c.DeployOriginBlock, num), } }