From dd262752c2c501f380fd51db6380c9b23f2edd40 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Wed, 25 Apr 2018 14:49:13 -0400 Subject: [PATCH] Using Embark default ERC20Token, and changed way to determine if contract instance is valid --- app/gas-relayer/abi/ERC20.json | 272 ----- app/gas-relayer/abi/ERC20Token.json | 191 ++++ app/gas-relayer/abi/IdentityFactory.json | 221 +++- app/gas-relayer/abi/IdentityGasRelay.json | 1179 ++++++++++++++++++++- app/gas-relayer/abi/SNTController.json | 603 ++++++++++- app/gas-relayer/config/config.json | 5 +- app/gas-relayer/package.json | 5 +- app/gas-relayer/src/contract-settings.js | 24 +- app/gas-relayer/src/message-processor.js | 21 +- app/gas-relayer/test/sendmsg.js | 2 +- config/contracts.json | 18 + contracts/deploy/Factory.sol | 4 + contracts/identity/IdentityKernel.sol | 2 +- 13 files changed, 2244 insertions(+), 303 deletions(-) delete mode 100644 app/gas-relayer/abi/ERC20.json create mode 100644 app/gas-relayer/abi/ERC20Token.json diff --git a/app/gas-relayer/abi/ERC20.json b/app/gas-relayer/abi/ERC20.json deleted file mode 100644 index cf1013e..0000000 --- a/app/gas-relayer/abi/ERC20.json +++ /dev/null @@ -1,272 +0,0 @@ -[ - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_spender", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_from", - "type": "address" - }, - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "version", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "balance", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "name": "", - "type": "string" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_spender", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - }, - { - "name": "_extraData", - "type": "bytes" - } - ], - "name": "approveAndCall", - "outputs": [ - { - "name": "success", - "type": "bool" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - }, - { - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "remaining", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "inputs": [ - { - "name": "_initialAmount", - "type": "uint256" - }, - { - "name": "_tokenName", - "type": "string" - }, - { - "name": "_decimalUnits", - "type": "uint8" - }, - { - "name": "_tokenSymbol", - "type": "string" - } - ], - "type": "constructor" - }, - { - "payable": false, - "type": "fallback" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_from", - "type": "address" - }, - { - "indexed": true, - "name": "_to", - "type": "address" - }, - { - "indexed": false, - "name": "_value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_owner", - "type": "address" - }, - { - "indexed": true, - "name": "_spender", - "type": "address" - }, - { - "indexed": false, - "name": "_value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } -] \ No newline at end of file diff --git a/app/gas-relayer/abi/ERC20Token.json b/app/gas-relayer/abi/ERC20Token.json new file mode 100644 index 0000000..61a11ce --- /dev/null +++ b/app/gas-relayer/abi/ERC20Token.json @@ -0,0 +1,191 @@ +{ + "contract_name": "ERC20Token", + "code": "", + "runtime_bytecode": "", + "real_runtime_bytecode": "", + "swarm_hash": "", + "gas_estimates": null, + "function_hashes": { + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + }, + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "_spender", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_from", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "name": "balance", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "name": "remaining", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "_from", + "type": "address" + }, + { + "indexed": true, + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "name": "_value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "_owner", + "type": "address" + }, + { + "indexed": true, + "name": "_spender", + "type": "address" + }, + { + "indexed": false, + "name": "_value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + } + ] +} diff --git a/app/gas-relayer/abi/IdentityFactory.json b/app/gas-relayer/abi/IdentityFactory.json index 57d7454..05b7673 100644 --- a/app/gas-relayer/abi/IdentityFactory.json +++ b/app/gas-relayer/abi/IdentityFactory.json @@ -1 +1,220 @@ -[{"constant":true,"inputs":[],"name":"latestKernel","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}] \ No newline at end of file +{ + "contract_name": "IdentityFactory", + "code": "608060405234801561001057600080fd5b50604051613d60380380613d608339810160405280510161002f610297565b604051809103906000f08015801561004b573d6000803e3d6000fd5b5060008054600160a060020a03191633600160a060020a031617905561007981640100000000610080810204565b50506102a7565b600454600090600160a060020a038381169116141561009e57600080fd5b6100b082640100000000610202810204565b60028054600160a060020a038086166000818152600160208181526040808420879055805160808101825243815242818401818152828401888152606084018d8152968b018c559a909652905160049889027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81019190915594517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf86015597517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad08501805491909716600160a060020a03199182161790965591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad190930192909255600395909555835490921681179092558251918252810183905281519293507f1f6d323e0f0d100bbeff07e00af23eca57fcb99f3efdef25cba223d7a34d0f31929081900390910190a15050565b60006060823b82811161021457600080fd5b60408051603f8301601f19168101909152818152915080600060208401863c816040518082805190602001908083835b602083106102635780518252601f199092019160209182019101610244565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120979650505050505050565b604051612fd780610d8983390190565b610ad3806102b66000396000f30060806040526004361061008d5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb823811461009257806359d21ad9146100b55780635b2ab06c146100e657806381ea440814610107578063b88da7591461013a578063be537a7914610180578063cc81203c146101b5578063f77c4791146101d6575b600080fd5b34801561009e57600080fd5b506100b3600160a060020a03600435166101eb565b005b3480156100c157600080fd5b506100ca610235565b60408051600160a060020a039092168252519081900360200190f35b3480156100f257600080fd5b506100ca600160a060020a0360043516610245565b34801561011357600080fd5b50610128600160a060020a036004351661035d565b60408051918252519081900360200190f35b34801561014657600080fd5b506101526004356103f2565b604080519485526020850193909352600160a060020a03909116838301526060830152519081900360800190f35b34801561018c57600080fd5b506101a1600160a060020a0360043516610498565b604080519115158252519081900360200190f35b3480156101c157600080fd5b506100b3600160a060020a03600435166104b4565b3480156101e257600080fd5b506100ca6104db565b60005433600160a060020a0390811691161461020657600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600061024033610245565b905090565b6004546000908190600160a060020a031661025e610670565b600160a060020a03909116815260405190819003602001906000f08015801561028b573d6000803e3d6000fd5b50905080600160a060020a031663230818b2846040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b15801561030257600080fd5b505af1158015610316573d6000803e3d6000fd5b505060408051600160a060020a038516815290517fac993fde3b9423ff59e4a23cded8e89074c9c8740920d1d870f586ba7c5c8cf09350908190036020019150a192915050565b60006060823b82811161036f57600080fd5b60408051603f8301601f19168101909152818152915080600060208401863c816040518082805190602001908083835b602083106103be5780518252601f19909201916020918201910161039f565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120979650505050505050565b60008060008060028581548110151561040757fe5b90600052602060002090600402016000015460028681548110151561042857fe5b90600052602060002090600402016001015460028781548110151561044957fe5b6000918252602090912060026004909202018101548154600160a060020a0390911691908990811061047757fe5b90600052602060002090600402016003015493509350935093509193509193565b600160a060020a03166000908152600160205260408120541190565b60005433600160a060020a039081169116146104cf57600080fd5b6104d8816104ea565b50565b600054600160a060020a031681565b600454600090600160a060020a038381169116141561050857600080fd5b6105118261035d565b60028054600160a060020a038086166000818152600160208181526040808420879055805160808101825243815242818401818152828401888152606084018d8152968b018c559a909652905160049889027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81019190915594517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf86015597517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0850180549190971673ffffffffffffffffffffffffffffffffffffffff199182161790965591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad190930192909255600395909555835490921681179092558251918252810183905281519293507f1f6d323e0f0d100bbeff07e00af23eca57fcb99f3efdef25cba223d7a34d0f31929081900390910190a15050565b60405161042780610681833901905600608060405234801561001057600080fd5b50604051602080610427833981016040525160008054600160a060020a03909216600160a060020a03199092169190911790556103d5806100526000396000f30060806040526004361061006c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663579cf8a781146100c957806387f11a97146100ea578063a2e620451461010b578063d4aae0c414610143578063efcba0ee14610174575b34801561007857600080fd5b50610081610189565b600160a060020a031660003660405180838380828437820191505092505050600060405180830381855af491505015156100ba57600080fd5b3d604051816000823e8181f35b005b3480156100d557600080fd5b506100c7600160a060020a0360043516610198565b3480156100f657600080fd5b506100c7600160a060020a0360043516610283565b34801561011757600080fd5b5061012061032a565b60408051600160a060020a03909316835260208301919091528051918290030190f35b34801561014f57600080fd5b5061015861033f565b60408051600160a060020a039092168252519081900360200190f35b34801561018057600080fd5b506100c761034e565b600054600160a060020a031690565b6101a0610392565b30600160a060020a031633600160a060020a03161415156101c057600080fd5b5060408051808201909152600154600160a060020a039081168083526002546020840152908316146101f157600080fd5b6020810151421161020157600080fd5b805160008054600160a060020a0392831673ffffffffffffffffffffffffffffffffffffffff1991821681178084556001805490931690925560029290925560408051919093168152602081019190915281517f76f448bcf536e847a3d291a3d796bf16666666929cbba9d0c05f55cce22d3f2c929181900390910190a15050565b600030600160a060020a031633600160a060020a03161415156102a557600080fd5b50604080518082018252600160a060020a03831680825262278d00420160209283018190526001805473ffffffffffffffffffffffffffffffffffffffff19168317905560028190558351918252918101829052825191927f2047fd222390b778ab7c70c9e0dc552444839f68191ceef9323e784e09b75b1e92918290030190a15050565b600154600254600160a060020a039091169082565b600054600160a060020a031681565b30600160a060020a031633600160a060020a031614151561036e57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff191690556000600255565b6040805180820190915260008082526020820152905600a165627a7a7230582058e4d159ae1b9fef74e4d5589a0b205ff333ca02a6da1481467328929e56f1fd0029a165627a7a7230582086ee84fbf17e634ce8a5796041fc622e7fe2b06d64d0a623192d14759ff64abb0029608060408190526c01000000000000000000000000600160a060020a0333160281526014902062000039906401000000006200003f810204565b62000213565b600160005260046020527fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0554156200007657600080fd5b6001600052600960205260008051602062002fb783398151915254156200009c57600080fd5b620000b4816001600064010000000062000110810204565b620000cc816002600064010000000062000110810204565b506009602052600160008051602062002fb783398151915281905560026000527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c355565b60408051848152602080820185905282519182900383019091206000818152600390925291902054156200014357600080fd5b6001831480620001535750600283145b806200015f5750600383145b806200016b5750600483145b15156200017757600080fd5b604080516060810182528481526020808201858152828401888152600086815260038452858120945185559151600180860191909155905160029094019390935586815260048252838120805493840181558152818120830188905584815260079091528281209190915590518391859187917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a450505050565b612d9480620002236000396000f3006080604052600436106101275763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663032c1a8a811461012957806307aef43b1461019157806313fb4b8f146101ac5780631d381240146101e5578063230818b214610217578063262b54f5146102385780632c883f3c146102505780634eee424a1461026857806353d413c5146102805780635a3df7911461029b578063640c5173146102b6578063747442d3146102d457806383b5d133146102f15780639010f72614610312578063a2e620451461032a578063b1a34e0d14610362578063b61d27f61461045c578063c9100bcb146104c5578063d4aae0c414610648578063d84c7c9f14610679578063da2c9ae214610691578063e574809a146106bd575b005b34801561013557600080fd5b50610141600435610740565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561017d578181015183820152602001610165565b505050509050019250505060405180910390f35b34801561019d57600080fd5b506101276004356024356108ca565b3480156101b857600080fd5b506101c76004356024356109ca565b60408051938452602084019290925282820152519081900360600190f35b3480156101f157600080fd5b50610203600435602435604435610a01565b604080519115158252519081900360200190f35b34801561022357600080fd5b50610127600160a060020a0360043516610ad9565b34801561024457600080fd5b50610141600435610b06565b34801561025c57600080fd5b50610127600435610b69565b34801561027457600080fd5b50610203600435610c8a565b34801561028c57600080fd5b50610203600435602435610fc2565b3480156102a757600080fd5b50610203600435602435611097565b3480156102c257600080fd5b506102036004356024356044356110c3565b3480156102e057600080fd5b5061020360043560243515156111c7565b3480156102fd57600080fd5b50610127600160a060020a03600435166111f6565b34801561031e57600080fd5b506101416004356112fe565b34801561033657600080fd5b5061033f61135f565b60408051600160a060020a03909316835260208301919091528051918290030190f35b34801561036e57600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261044a948035946024803595600160a060020a0360443516953695608494930191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506113749650505050505050565b60408051918252519081900360200190f35b34801561046857600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261044a948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506115e99650505050505050565b3480156104d157600080fd5b506104dd6004356117a8565b6040518087815260200186815260200185600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561054657818101518382015260200161052e565b50505050905090810190601f1680156105735780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b838110156105a657818101518382015260200161058e565b50505050905090810190601f1680156105d35780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b838110156106065781810151838201526020016105ee565b50505050905090810190601f1680156106335780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b34801561065457600080fd5b5061065d6119e4565b60408051600160a060020a039092168252519081900360200190f35b34801561068557600080fd5b506101276004356119f3565b34801561069d57600080fd5b50610203600435602435151560443560ff6064351660843560a435611a77565b3480156106c957600080fd5b50604080516020600460443581810135601f810184900484028501840190955284845261044a948235600160a060020a03169460248035953695946064949201919081908401838280828437509497505084359550505060208301359260ff60408201351692506060810135915060800135611c44565b60408051600480825260a08201909252606091829160009183918391602082016080803883390190505093506000925061077b866001611097565b156107a4576001848460ff1681518110151561079357fe5b602090810290910101526001909201915b6107af866002611097565b156107d8576002848460ff168151811015156107c757fe5b602090810290910101526001909201915b6107e3866003611097565b1561080c576003848460ff168151811015156107fb57fe5b602090810290910101526001909201915b610817866004611097565b15610840576004848460ff1681518110151561082f57fe5b602090810290910101526001909201915b8260ff1660405190808252806020026020018201604052801561086d578160200160208202803883390190505b509150600090505b8260ff168160ff1610156108c157838160ff1681518110151561089457fe5b90602001906020020151828260ff168151811015156108af57fe5b60209081029091010152600101610875565b50949350505050565b30600160a060020a031633600160a060020a0316141561092257600081116108f157600080fd5b60008281526004602052604090205481111561090c57600080fd5b60008281526009602052604090208190556109c6565b60408051606060020a600160a060020a033316028152905190819003601401902061094e906001611097565b151561095957600080fd5b600160008190526009602052600080516020612d4983398151915254141561098857600081116108f157600080fd5b6109c430600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437506115e9945050505050565b505b5050565b6040805192835260208084019290925280519283900381019092206000908152600390915220805460018201546002909201549092565b600030600160a060020a031633600160a060020a03161415610a3057610a28848484611e9b565b506001610ad2565b60408051606060020a600160a060020a0333160281529051908190036014019020610a5c906001611097565b1515610a6757600080fd5b600160008190526009602052600080516020612d49833981519152541415610a9457610a28848484611e9b565b610ad030600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437506115e9945050505050565b505b9392505050565b60408051606060020a600160a060020a0384160281529051908190036014019020610b0390611f99565b50565b600081815260066020908152604091829020805483518184028101840190945280845260609392830182828015610b5d57602002820191906000526020600020905b81548152600190910190602001808311610b48575b50505050509050919050565b600c5460009081906060908290819081901515610b8557600080fd5b600c54600160005260046020908152600080516020612d29833981519152805460408051828502810185019091528181528b9a509398509091830182828015610bee57602002820191906000526020600020905b81548152600190910190602001808311610bd9575b50505050509350835192508560001415610c06578295505b600160008181526009602052878503909101600080516020612d498339815191525591505b85821015610c72578382815181101515610c4157fe5b602090810290910101519050848114610c6757610c5f81600161203e565b600019909201915b600190910190610c2b565b8260011415610c81576000600c555b50505050505050565b6000610c94612b83565b6000838152600560209081526040808320815160c0810183528154815260018083015482860152600280840154600160a060020a0316838601526003840180548651601f948216156101000260001901909116929092049283018790048702820187019095528181528695869593949360608601939091830182828015610d5c5780601f10610d3157610100808354040283529160200191610d5c565b820191906000526020600020905b815481529060010190602001808311610d3f57829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610df05780601f10610dc557610100808354040283529160200191610df0565b820191906000526020600020905b815481529060010190602001808311610dd357829003601f168201915b505050918352505060058201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610e845780601f10610e5957610100808354040283529160200191610e84565b820191906000526020600020905b815481529060010190602001808311610e6757829003601f168201915b50505050508152505093508360400151600160a060020a031633600160a060020a03161480610ec4575030600160a060020a031633600160a060020a0316145b1515610ecf57600080fd5b60008681526007602090815260408083208054908490558751845260069092529091208054919450925082906000198101908110610f0957fe5b90600052602060002001549050808284815481101515610f2557fe5b600091825260208083209091019290925582815260078252604080822086905588825260059092529081208181556001810182905560028101805473ffffffffffffffffffffffffffffffffffffffff1916905590610f876003830182612bc3565b610f95600483016000612bc3565b610fa3600583016000612bc3565b50508154610fb5836000198301612c07565b5060019695505050505050565b600030600160a060020a031633600160a060020a03161415610ff057610fe8838361203e565b506001611091565b60408051606060020a600160a060020a033316028152905190819003601401902061101c906001611097565b151561102757600080fd5b600160008190526009602052600080516020612d4983398151915254141561105357610fe8838361203e565b61108f30600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437506115e9945050505050565b505b92915050565b604080519283526020808401839052815193849003820190932060009081526003909352909120541490565b60008030600160a060020a031633600160a060020a0316141561110e57506000848152600360205260409020546110fb848285611e9b565b611105858261203e565b60019150610ad0565b60408051606060020a600160a060020a033316028152905190819003601401902061113a906001611097565b151561114557600080fd5b600160008190526009602052600080516020612d4983398151915254141561118257506000848152600360205260409020546110fb848285611e9b565b6111be30600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437506115e9945050505050565b50509392505050565b60408051606060020a600160a060020a0333160281529051908190036014019020600090610ad29084846121dd565b30600160a060020a031633600160a060020a0316141561125357600b54600160a060020a03161561122657600080fd5b600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038316179055610b03565b60408051606060020a600160a060020a033316028152905190819003601401902061127f906001611097565b151561128a57600080fd5b600160008190526009602052600080516020612d498339815191525414156112c257600b54600160a060020a03161561122657600080fd5b6109c630600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437506115e9945050505050565b600081815260046020908152604091829020805483518184028101840190945280845260609392830182828015610b5d576020028201919060005260206000209081548152600190910190602001808311610b485750505050509050919050565b600154600254600160a060020a039091169082565b60408051606060020a600160a060020a03808816919091028252601482018990529151908190036034019020903381163090911614156113eb5760008181526005602052604081205411156113d7576113d281888888888888612619565b6113e6565b6113e68188888888888861288c565b6115df565b60408051606060020a600160a060020a0333160281529051908190036014019020611417906003611097565b151561142257600080fd5b61145e30600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750612a0e945050505050565b5084600160a060020a03168782600019167f0bba1524c2d62fbb2754ba3749ad428ffa9c1a573c0b0e59b72d63ea56baf7818988888860405180858152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b838110156114df5781810151838201526020016114c7565b50505050905090810190601f16801561150c5780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b8381101561153f578181015183820152602001611527565b50505050905090810190601f16801561156c5780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b8381101561159f578181015183820152602001611587565b50505050905090810190601f1680156115cc5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a45b9695505050505050565b60008030600160a060020a031685600160a060020a03161461160c57600261160f565b60015b6000818152600960205260409020549091506001141561179057600a80546001810190915560408051606060020a600160a060020a03331602815290519081900360140190209092506116629082611097565b151561166d57600080fd5b84600160a060020a0316848460405180828051906020019080838360005b838110156116a357818101518382015260200161168b565b50505050905090810190601f1680156116d05780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af192505050508385600160a060020a0316837f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b8866040518080602001828103825283818151815260200191508051906020019080838360005b83811015611751578181015183820152602001611739565b50505050905090810190601f16801561177e5780820380516001836020036101000a031916815260200191505b509250505060405180910390a4610ad0565b61179b858585612a0e565b91506111be8260016111c7565b600080600060608060606117ba612b83565b600088815260056020908152604091829020825160c0810184528154815260018083015482850152600280840154600160a060020a0316838701526003840180548751601f9482161561010002600019019091169290920492830186900486028201860190965281815291949293606086019391908301828280156118805780601f1061185557610100808354040283529160200191611880565b820191906000526020600020905b81548152906001019060200180831161186357829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156119145780601f106118e957610100808354040283529160200191611914565b820191906000526020600020905b8154815290600101906020018083116118f757829003601f168201915b505050918352505060058201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156119a85780601f1061197d576101008083540402835291602001916119a8565b820191906000526020600020905b81548152906001019060200180831161198b57829003601f168201915b5050509190925250508151602083015160408401516060850151608086015160a090960151939e929d50909b5099509297509550909350505050565b600054600160a060020a031681565b600b54600160a060020a031615801590611a1b5750600b5433600160a060020a039081169116145b1515611a2657600080fd5b600c819055604080518281529051908190036020019020611a4a9060016000611e9b565b506001600052600080516020612d29833981519152546009602052600080516020612d4983398151915255565b604080517f617070726f76652875696e743235362c626f6f6c29000000000000000000000081528151908190036015018120606060020a600160a060020a0330160282527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166014820152601881018890527f010000000000000000000000000000000000000000000000000000000000000087151502603882015281519081900360390181207f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201819052825191829003603c018220600080845260208481018087529290925260ff88168486015260608401879052608084018690529351889388928892889260019260a0808301939192601f1983019290819003909101908b865af1158015611baf573d6000803e3d6000fd5b505060408051601f19810151606060020a600160a060020a03909116028152905190819003601401902086149050611be657600080fd5b6000858152600360205260409020541515611c0057600080fd5b89611c0c816001611097565b80611c1d5750611c1d816002611097565b1515611c2857600080fd5b611c338b8e8e6121dd565b9d9c50505050505050505050505050565b604080517f6578656375746528616464726573732c75696e743235362c62797465732900008152905190819003601e018120606060020a600160a060020a0330818116830285527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1984166014860152908c169091026018840152602c83018a905288516000938893918d918d918d918d91604c82019060208501908083835b60208310611cff5780518252601f199092019160209182019101611ce0565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019650505050505050604051809103902085858560018460405180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040518091039020848484604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015611df6573d6000803e3d6000fd5b505060408051601f19810151606060020a600160a060020a03909116028152905190819003601401902086149050611e2d57600080fd5b6000858152600360205260409020541515611e4757600080fd5b89611e53816001611097565b80611e645750611e64816002611097565b1515611e6f57600080fd5b611e7a8f8f8f612a0e565b9650611e888b8860016121dd565b5050505050505098975050505050505050565b6040805184815260208082018590528251918290038301909120600081815260039092529190205415611ecd57600080fd5b6001831480611edc5750600283145b80611ee75750600383145b80611ef25750600483145b1515611efd57600080fd5b604080516060810182528481526020808201858152828401888152600086815260038452858120945185559151600180860191909155905160029094019390935586815260048252838120805493840181558152818120830188905584815260079091528281209190915590518391859187917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a450505050565b60016000526004602052600080516020612d298339815191525415611fbd57600080fd5b60016000526009602052600080516020612d498339815191525415611fe157600080fd5b611fee8160016000611e9b565b611ffb8160026000611e9b565b5060096020526001600080516020612d4983398151915281905560026000527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c355565b6000612048612c2b565b6000806001851415612088576001600052600080516020612d49833981519152546004602052600080516020612d29833981519152541161208857600080fd5b6040805187815260208082018890528251918290038301822060008181526003835284812060608501865280548552600181015485850152600201548486015281815260078352848120548a8252600490935293909320805493975091955093509060001981019081106120f857fe5b9060005260206000200154905080600460008781526020019081526020016000208381548110151561212657fe5b60009182526020808320909101929092556040805184815280840189905281519081900382019020825260078352808220859055878252600490925220805490612174906000198301612c07565b506000848152600760209081526040808320839055600382528083208381556001810184905560020183905590850151855186830151925191939092917f585a4aef50f8267a92b32412b331b20f7f8b96f2245b253b9cc50dcc621d33979190a4505050505050565b60006121e7612c4b565b6000848152600860209081526040808320815160c081018352815460ff81161515825261010090819004600160a060020a03168286015260018084015483860152600280850180548751938116159094026000190190931604601f81018790048702820187019095528481528695929460608601939192918301828280156122b05780601f10612285576101008083540402835291602001916122b0565b820191906000526020600020905b81548152906001019060200180831161229357829003601f168201915b50505050508152602001600382015481526020016004820154815250509250826000015115156122df57600080fd5b30600160a060020a03168360200151600160a060020a031614612303576002612306565b60015b91506123128783611097565b151561231d57600080fd5b5060408051878152602080820184905282519182900383019091206000888152600883528381208282526005019092529190205460ff161515851515141561236457600080fd5b841561237a5760a0830180516001019052612387565b60a0830180516000190190525b604080518615158152905187917fb3932da477fe5d6c8ff2eafef050c0f3a1af18fc07121001482600f36f3715d8919081900360200190a260008281526009602052604090205460a0840151101561248657600086815260086020818152604080842085855260058101835281852080548b151560ff1991821617909155948b90529282528651835488840151600160a060020a03166101000274ffffffffffffffffffffffffffffffffffffffff001992151591909616171693909317825591850151600182015560608501518051869361246a926002850192910190612c8d565b506080820151600382015560a09091015160049091015561260f565b6000868152600860205260408120805474ffffffffffffffffffffffffffffffffffffffffff1916815560018101829055906124c56002830182612bc3565b6003820160009055600482016000905550508260200151600160a060020a03168360400151846060015160405180828051906020019080838360005b83811015612519578181015183820152602001612501565b50505050905090810190601f1680156125465780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af192505050935082604001518360200151600160a060020a0316877f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b886606001516040518080602001828103825283818151815260200191508051906020019080838360005b838110156125d45781810151838201526020016125bc565b50505050905090810190601f1680156126015780820380516001836020036101000a031916815260200191505b509250505060405180910390a45b5050509392505050565b83600160a060020a031633600160a060020a031614151561263957600080fd5b6040805160c0810182528781526020808201888152600160a060020a03888116848601908152606085018981526080860189905260a0860188905260008e8152600586529690962085518155925160018401555160028301805473ffffffffffffffffffffffffffffffffffffffff191691909216179055925180519293926126c89260038501920190612c8d565b50608082015180516126e4916004840191602090910190612c8d565b5060a08201518051612700916005840191602090910190612c8d565b5090505083600160a060020a03168688600019167f3bab293fc00db832d7619a9299914251b8747c036867ec056cbd506f60135b138887878760405180858152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561278457818101518382015260200161276c565b50505050905090810190601f1680156127b15780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b838110156127e45781810151838201526020016127cc565b50505050905090810190601f1680156128115780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b8381101561284457818101518382015260200161282c565b50505050905090810190601f1680156128715780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a450505050505050565b6040805160c0810182528781526020808201888152600160a060020a03888116848601908152606085018981526080860189905260a0860188905260008e8152600586529690962085518155925160018401555160028301805473ffffffffffffffffffffffffffffffffffffffff1916919092161790559251805192939261291b9260038501920190612c8d565b5060808201518051612937916004840191602090910190612c8d565b5060a08201518051612953916005840191602090910190612c8d565b505050600086815260066020818152604080842080548c86526007845282862081905593835260018401815584528184209092018a9055815188815260808183018181528851918301919091528751600160a060020a038a16958c958e957f46149b18aa084502c3f12bc75e19eda8bda8d102b82cce8474677a6d0d5f43c5958e958d958d958d9593949293850192606086019260a0870192918a01918190849084908381101561278457818101518382015260200161276c565b600a80546001808201928390556040805160c081018252828152600160a060020a0380891660208084019182528385018a8152606085018a81526080860199909952600060a0860181905288815260088352959095208451815493519094166101000274ffffffffffffffffffffffffffffffffffffffff001994151560ff19909416939093179390931691909117825592519381019390935593518051939493612abf9260028501920190612c8d565b506080820151816003015560a082015181600401559050508284600160a060020a0316827f8afcfabcb00e47a53a8fc3e9f23ff47ee1926194bb1350dd007c50b412a6cee8856040518080602001828103825283818151815260200191508051906020019080838360005b83811015612b42578181015183820152602001612b2a565b50505050905090810190601f168015612b6f5780820380516001836020036101000a031916815260200191505b509250505060405180910390a49392505050565b60c06040519081016040528060008152602001600081526020016000600160a060020a031681526020016060815260200160608152602001606081525090565b50805460018160011615610100020316600290046000825580601f10612be95750610b03565b601f016020900490600052602060002090810190610b039190612d0b565b8154818355818111156109c4576000838152602090206109c4918101908301612d0b565b604080516060810182526000808252602082018190529181019190915290565b60c0604051908101604052806000151581526020016000600160a060020a03168152602001600081526020016060815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612cce57805160ff1916838001178555612cfb565b82800160010185558215612cfb579182015b82811115612cfb578251825591602001919060010190612ce0565b50612d07929150612d0b565b5090565b612d2591905b80821115612d075760008155600101612d11565b905600abd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe0592e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36a165627a7a7230582012457d7d1ec5cbf7cf285469bd4315159a16f4346d51368a183dac7ae7bc6cdb002992e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36", + "runtime_bytecode": "60806040526004361061008d5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb823811461009257806359d21ad9146100b55780635b2ab06c146100e657806381ea440814610107578063b88da7591461013a578063be537a7914610180578063cc81203c146101b5578063f77c4791146101d6575b600080fd5b34801561009e57600080fd5b506100b3600160a060020a03600435166101eb565b005b3480156100c157600080fd5b506100ca610235565b60408051600160a060020a039092168252519081900360200190f35b3480156100f257600080fd5b506100ca600160a060020a0360043516610245565b34801561011357600080fd5b50610128600160a060020a036004351661035d565b60408051918252519081900360200190f35b34801561014657600080fd5b506101526004356103f2565b604080519485526020850193909352600160a060020a03909116838301526060830152519081900360800190f35b34801561018c57600080fd5b506101a1600160a060020a0360043516610498565b604080519115158252519081900360200190f35b3480156101c157600080fd5b506100b3600160a060020a03600435166104b4565b3480156101e257600080fd5b506100ca6104db565b60005433600160a060020a0390811691161461020657600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600061024033610245565b905090565b6004546000908190600160a060020a031661025e610670565b600160a060020a03909116815260405190819003602001906000f08015801561028b573d6000803e3d6000fd5b50905080600160a060020a031663230818b2846040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b15801561030257600080fd5b505af1158015610316573d6000803e3d6000fd5b505060408051600160a060020a038516815290517fac993fde3b9423ff59e4a23cded8e89074c9c8740920d1d870f586ba7c5c8cf09350908190036020019150a192915050565b60006060823b82811161036f57600080fd5b60408051603f8301601f19168101909152818152915080600060208401863c816040518082805190602001908083835b602083106103be5780518252601f19909201916020918201910161039f565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120979650505050505050565b60008060008060028581548110151561040757fe5b90600052602060002090600402016000015460028681548110151561042857fe5b90600052602060002090600402016001015460028781548110151561044957fe5b6000918252602090912060026004909202018101548154600160a060020a0390911691908990811061047757fe5b90600052602060002090600402016003015493509350935093509193509193565b600160a060020a03166000908152600160205260408120541190565b60005433600160a060020a039081169116146104cf57600080fd5b6104d8816104ea565b50565b600054600160a060020a031681565b600454600090600160a060020a038381169116141561050857600080fd5b6105118261035d565b60028054600160a060020a038086166000818152600160208181526040808420879055805160808101825243815242818401818152828401888152606084018d8152968b018c559a909652905160049889027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81019190915594517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf86015597517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0850180549190971673ffffffffffffffffffffffffffffffffffffffff199182161790965591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad190930192909255600395909555835490921681179092558251918252810183905281519293507f1f6d323e0f0d100bbeff07e00af23eca57fcb99f3efdef25cba223d7a34d0f31929081900390910190a15050565b60405161042780610681833901905600608060405234801561001057600080fd5b50604051602080610427833981016040525160008054600160a060020a03909216600160a060020a03199092169190911790556103d5806100526000396000f30060806040526004361061006c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663579cf8a781146100c957806387f11a97146100ea578063a2e620451461010b578063d4aae0c414610143578063efcba0ee14610174575b34801561007857600080fd5b50610081610189565b600160a060020a031660003660405180838380828437820191505092505050600060405180830381855af491505015156100ba57600080fd5b3d604051816000823e8181f35b005b3480156100d557600080fd5b506100c7600160a060020a0360043516610198565b3480156100f657600080fd5b506100c7600160a060020a0360043516610283565b34801561011757600080fd5b5061012061032a565b60408051600160a060020a03909316835260208301919091528051918290030190f35b34801561014f57600080fd5b5061015861033f565b60408051600160a060020a039092168252519081900360200190f35b34801561018057600080fd5b506100c761034e565b600054600160a060020a031690565b6101a0610392565b30600160a060020a031633600160a060020a03161415156101c057600080fd5b5060408051808201909152600154600160a060020a039081168083526002546020840152908316146101f157600080fd5b6020810151421161020157600080fd5b805160008054600160a060020a0392831673ffffffffffffffffffffffffffffffffffffffff1991821681178084556001805490931690925560029290925560408051919093168152602081019190915281517f76f448bcf536e847a3d291a3d796bf16666666929cbba9d0c05f55cce22d3f2c929181900390910190a15050565b600030600160a060020a031633600160a060020a03161415156102a557600080fd5b50604080518082018252600160a060020a03831680825262278d00420160209283018190526001805473ffffffffffffffffffffffffffffffffffffffff19168317905560028190558351918252918101829052825191927f2047fd222390b778ab7c70c9e0dc552444839f68191ceef9323e784e09b75b1e92918290030190a15050565b600154600254600160a060020a039091169082565b600054600160a060020a031681565b30600160a060020a031633600160a060020a031614151561036e57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff191690556000600255565b6040805180820190915260008082526020820152905600a165627a7a7230582058e4d159ae1b9fef74e4d5589a0b205ff333ca02a6da1481467328929e56f1fd0029a165627a7a7230582086ee84fbf17e634ce8a5796041fc622e7fe2b06d64d0a623192d14759ff64abb0029", + "real_runtime_bytecode": "60806040526004361061008d5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416633cebb823811461009257806359d21ad9146100b55780635b2ab06c146100e657806381ea440814610107578063b88da7591461013a578063be537a7914610180578063cc81203c146101b5578063f77c4791146101d6575b600080fd5b34801561009e57600080fd5b506100b3600160a060020a03600435166101eb565b005b3480156100c157600080fd5b506100ca610235565b60408051600160a060020a039092168252519081900360200190f35b3480156100f257600080fd5b506100ca600160a060020a0360043516610245565b34801561011357600080fd5b50610128600160a060020a036004351661035d565b60408051918252519081900360200190f35b34801561014657600080fd5b506101526004356103f2565b604080519485526020850193909352600160a060020a03909116838301526060830152519081900360800190f35b34801561018c57600080fd5b506101a1600160a060020a0360043516610498565b604080519115158252519081900360200190f35b3480156101c157600080fd5b506100b3600160a060020a03600435166104b4565b3480156101e257600080fd5b506100ca6104db565b60005433600160a060020a0390811691161461020657600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600061024033610245565b905090565b6004546000908190600160a060020a031661025e610670565b600160a060020a03909116815260405190819003602001906000f08015801561028b573d6000803e3d6000fd5b50905080600160a060020a031663230818b2846040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b15801561030257600080fd5b505af1158015610316573d6000803e3d6000fd5b505060408051600160a060020a038516815290517fac993fde3b9423ff59e4a23cded8e89074c9c8740920d1d870f586ba7c5c8cf09350908190036020019150a192915050565b60006060823b82811161036f57600080fd5b60408051603f8301601f19168101909152818152915080600060208401863c816040518082805190602001908083835b602083106103be5780518252601f19909201916020918201910161039f565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120979650505050505050565b60008060008060028581548110151561040757fe5b90600052602060002090600402016000015460028681548110151561042857fe5b90600052602060002090600402016001015460028781548110151561044957fe5b6000918252602090912060026004909202018101548154600160a060020a0390911691908990811061047757fe5b90600052602060002090600402016003015493509350935093509193509193565b600160a060020a03166000908152600160205260408120541190565b60005433600160a060020a039081169116146104cf57600080fd5b6104d8816104ea565b50565b600054600160a060020a031681565b600454600090600160a060020a038381169116141561050857600080fd5b6105118261035d565b60028054600160a060020a038086166000818152600160208181526040808420879055805160808101825243815242818401818152828401888152606084018d8152968b018c559a909652905160049889027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81019190915594517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf86015597517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad0850180549190971673ffffffffffffffffffffffffffffffffffffffff199182161790965591517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad190930192909255600395909555835490921681179092558251918252810183905281519293507f1f6d323e0f0d100bbeff07e00af23eca57fcb99f3efdef25cba223d7a34d0f31929081900390910190a15050565b60405161042780610681833901905600608060405234801561001057600080fd5b50604051602080610427833981016040525160008054600160a060020a03909216600160a060020a03199092169190911790556103d5806100526000396000f30060806040526004361061006c5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663579cf8a781146100c957806387f11a97146100ea578063a2e620451461010b578063d4aae0c414610143578063efcba0ee14610174575b34801561007857600080fd5b50610081610189565b600160a060020a031660003660405180838380828437820191505092505050600060405180830381855af491505015156100ba57600080fd5b3d604051816000823e8181f35b005b3480156100d557600080fd5b506100c7600160a060020a0360043516610198565b3480156100f657600080fd5b506100c7600160a060020a0360043516610283565b34801561011757600080fd5b5061012061032a565b60408051600160a060020a03909316835260208301919091528051918290030190f35b34801561014f57600080fd5b5061015861033f565b60408051600160a060020a039092168252519081900360200190f35b34801561018057600080fd5b506100c761034e565b600054600160a060020a031690565b6101a0610392565b30600160a060020a031633600160a060020a03161415156101c057600080fd5b5060408051808201909152600154600160a060020a039081168083526002546020840152908316146101f157600080fd5b6020810151421161020157600080fd5b805160008054600160a060020a0392831673ffffffffffffffffffffffffffffffffffffffff1991821681178084556001805490931690925560029290925560408051919093168152602081019190915281517f76f448bcf536e847a3d291a3d796bf16666666929cbba9d0c05f55cce22d3f2c929181900390910190a15050565b600030600160a060020a031633600160a060020a03161415156102a557600080fd5b50604080518082018252600160a060020a03831680825262278d00420160209283018190526001805473ffffffffffffffffffffffffffffffffffffffff19168317905560028190558351918252918101829052825191927f2047fd222390b778ab7c70c9e0dc552444839f68191ceef9323e784e09b75b1e92918290030190a15050565b600154600254600160a060020a039091169082565b600054600160a060020a031681565b30600160a060020a031633600160a060020a031614151561036e57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff191690556000600255565b6040805180820190915260008082526020820152905600a165627a7a7230582058e4d159ae1b9fef74e4d5589a0b205ff333ca02a6da1481467328929e56f1fd0029a165627a7a7230582086ee84fbf17e634ce8a5796041fc622e7fe2b06d64d0a623192d14759ff64abb0029", + "swarm_hash": "86ee84fbf17e634ce8a5796041fc622e7fe2b06d64d0a623192d14759ff64abb", + "gas_estimates": { + "creation": { + "codeDepositCost": "554200", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { + "changeController(address)": "20834", + "controller()": "691", + "createIdentity()": "infinite", + "createIdentity(address)": "infinite", + "getCodeHash(address)": "infinite", + "getVersion(uint256)": "2570", + "isKernel(address)": "725", + "setKernel(address)": "infinite" + } + }, + "function_hashes": { + "changeController(address)": "3cebb823", + "controller()": "f77c4791", + "createIdentity()": "59d21ad9", + "createIdentity(address)": "5b2ab06c", + "getCodeHash(address)": "81ea4408", + "getVersion(uint256)": "b88da759", + "isKernel(address)": "be537a79", + "setKernel(address)": "cc81203c" + }, + "abi": [ + { + "constant": false, + "inputs": [ + { + "name": "_newController", + "type": "address" + } + ], + "name": "changeController", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "createIdentity", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_idOwner", + "type": "address" + } + ], + "name": "createIdentity", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_addr", + "type": "address" + } + ], + "name": "getCodeHash", + "outputs": [ + { + "name": "codeHash", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "index", + "type": "uint256" + } + ], + "name": "getVersion", + "outputs": [ + { + "name": "blockNumber", + "type": "uint256" + }, + { + "name": "timestamp", + "type": "uint256" + }, + { + "name": "kernel", + "type": "address" + }, + { + "name": "codeHash", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_addr", + "type": "address" + } + ], + "name": "isKernel", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_kernel", + "type": "address" + } + ], + "name": "setKernel", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "controller", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "name": "_infohash", + "type": "bytes" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "instance", + "type": "address" + } + ], + "name": "IdentityCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "newKernel", + "type": "address" + }, + { + "indexed": false, + "name": "codeHash", + "type": "bytes32" + } + ], + "name": "NewKernel", + "type": "event" + } + ] +} diff --git a/app/gas-relayer/abi/IdentityGasRelay.json b/app/gas-relayer/abi/IdentityGasRelay.json index a83b817..2bf7b13 100644 --- a/app/gas-relayer/abi/IdentityGasRelay.json +++ b/app/gas-relayer/abi/IdentityGasRelay.json @@ -1 +1,1178 @@ -[{"constant":false,"inputs":[{"name":"_baseToken","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"},{"name":"_nonce","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_gasLimit","type":"uint256"},{"name":"_gasToken","type":"address"},{"name":"_messageSignatures","type":"bytes"}],"name":"approveAndCallGasRelayed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"},{"name":"_nonce","type":"uint256"},{"name":"_gasPrice","type":"uint256"},{"name":"_gasLimit","type":"uint256"},{"name":"_gasToken","type":"address"},{"name":"_messageSignatures","type":"bytes"}],"name":"callGasRelayed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[],"name":"Debug","type":"event"}] \ No newline at end of file +{ + "contract_name": "IdentityGasRelay", + "code": "608060408190526c01000000000000000000000000600160a060020a0333160281526014902062000039906401000000006200003f810204565b62000210565b600160008190526020527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f54156200007657600080fd5b6001600052600660205260008051602062003aa883398151915254156200009c57600080fd5b620000b4816001600064010000000062000110810204565b620000cc816002600064010000000062000110810204565b506006602052600160008051602062003aa883398151915281905560026000527f8819ef417987f8ae7a81f42cdfb18815282fe989326fbff903d13cf0e03ace2955565b604080518481526020808201859052825191829003830190912060008181529182905291902054156200014257600080fd5b6001831480620001525750600283145b806200015e5750600383145b806200016a5750600483145b15156200017657600080fd5b60408051606081018252848152602080820185815282840188815260008681528084528581209451855591516001808601919091559051600290940193909355868152828252838120805493840181558152818120830188905584815260049091528281209190915590518391859187917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a450505050565b61388880620002206000396000f30060806040526004361061015b5763ffffffff60e060020a600035041663032c1a8a811461015d57806307aef43b146101c557806313fb4b8f146101e05780631d38124014610219578063262b54f51461024b5780632c883f3c1461026357806335f894a41461027b5780634da3ee83146102ad5780634eee424a146102c257806353d413c5146102da57806359f4ac61146102f55780635a3df7911461034c57806363f44b5914610367578063640c5173146103d95780636e259594146103f7578063747442d31461043857806383b5d133146104555780639010f7261461047657806394fd645b1461048e578063b15aa5b7146104ee578063b1a34e0d14610506578063b61d27f6146105ee578063b817dcc214610657578063c9100bcb146106d4578063d84c7c9f14610857578063da2c9ae21461086f578063e27e2e5c1461089b578063e574809a146108d6578063fd0dded514610959575b005b34801561016957600080fd5b506101756004356109aa565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101b1578181015183820152602001610199565b505050509050019250505060405180910390f35b3480156101d157600080fd5b5061015b600435602435610b34565b3480156101ec57600080fd5b506101fb600435602435610c34565b60408051938452602084019290925282820152519081900360600190f35b34801561022557600080fd5b50610237600435602435604435610c72565b604080519115158252519081900360200190f35b34801561025757600080fd5b50610175600435610d4a565b34801561026f57600080fd5b5061015b600435610dad565b34801561028757600080fd5b50610290610ee0565b60408051600160e060020a03199092168252519081900360200190f35b3480156102b957600080fd5b50610290610f3b565b3480156102ce57600080fd5b50610237600435610fbb565b3480156102e657600080fd5b506102376004356024356112ef565b34801561030157600080fd5b5061015b60048035600160a060020a039081169160248035831692604435926064358084019390820135926084359260a4359260c4359260e4351691610104359182019101356113c4565b34801561035857600080fd5b506102376004356024356115cd565b34801561037357600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526103c795833595369560449491939091019190819084018382808284375094975050933594506115f89350505050565b60408051918252519081900360200190f35b3480156103e557600080fd5b506102376004356024356044356116a3565b34801561040357600080fd5b506103c7600160a060020a0360043581169060243581169060443590606435906084359060a4359060c4359060e435166117a7565b34801561044457600080fd5b50610237600435602435151561189a565b34801561046157600080fd5b5061015b600160a060020a03600435166118c9565b34801561048257600080fd5b506101756004356119d4565b34801561049a57600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610237948235946024803595369594606494920191908190840183828082843750949750611a359650505050505050565b3480156104fa57600080fd5b506103c7600435611ac0565b34801561051257600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526103c7948035946024803595600160a060020a0360443516953695608494930191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611afc9650505050505050565b3480156105fa57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526103c7948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750611d719650505050505050565b34801561066357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526106b29436949293602493928401919081908401838280828437509497505093359450611f309350505050565b6040805160ff9094168452602084019290925282820152519081900360600190f35b3480156106e057600080fd5b506106ec600435611f6a565b6040518087815260200186815260200185600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561075557818101518382015260200161073d565b50505050905090810190601f1680156107825780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b838110156107b557818101518382015260200161079d565b50505050905090810190601f1680156107e25780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b838110156108155781810151838201526020016107fd565b50505050905090810190601f1680156108425780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b34801561086357600080fd5b5061015b6004356121a6565b34801561087b57600080fd5b50610237600435602435151560443560ff6064351660843560a43561223c565b3480156108a757600080fd5b506103c7600160a060020a036004358116906024359060443590606435906084359060a4359060c435166123f4565b3480156108e257600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526103c7948235600160a060020a03169460248035953695946064949201919081908401838280828437509497505084359550505060208301359260ff604082013516925060608101359150608001356124b9565b34801561096557600080fd5b5061015b600160a060020a03600480358216916024803592604435808301939082013592606435926084359260a4359260c4359091169160e4359182019101356126fb565b60408051600480825260a0820190925260609182916000918391839160208201608080388339019050509350600092506109e58660016115cd565b15610a0e576001848460ff168151811015156109fd57fe5b602090810290910101526001909201915b610a198660026115cd565b15610a42576002848460ff16815181101515610a3157fe5b602090810290910101526001909201915b610a4d8660036115cd565b15610a76576003848460ff16815181101515610a6557fe5b602090810290910101526001909201915b610a818660046115cd565b15610aaa576004848460ff16815181101515610a9957fe5b602090810290910101526001909201915b8260ff16604051908082528060200260200182016040528015610ad7578160200160208202803883390190505b509150600090505b8260ff168160ff161015610b2b57838160ff16815181101515610afe57fe5b90602001906020020151828260ff16815181101515610b1957fe5b60209081029091010152600101610adf565b50949350505050565b30600160a060020a031633600160a060020a03161415610b8c5760008111610b5b57600080fd5b600082815260016020526040902054811115610b7657600080fd5b6000828152600660205260409020819055610c30565b60408051606060020a600160a060020a0333160281529051908190036014019020610bb89060016115cd565b1515610bc357600080fd5b60016000819052600660205260008051602061383d833981519152541415610bf25760008111610b5b57600080fd5b610c2e30600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b505b5050565b60408051838152602080820184905282519182900383019091206000908152908190522080546001820154600283015491929091905b509250925092565b600030600160a060020a031633600160a060020a03161415610ca157610c998484846128e4565b506001610d43565b60408051606060020a600160a060020a0333160281529051908190036014019020610ccd9060016115cd565b1515610cd857600080fd5b60016000819052600660205260008051602061383d833981519152541415610d0557610c998484846128e4565b610d4130600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b505b9392505050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610da157602002820191906000526020600020905b81548152600190910190602001808311610d8c575b50505050509050919050565b60095460009081906060908290819081901515610dc957600080fd5b6009546001600081905260209081527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f805460408051828502810185019091528181528b9a509398509091830182828015610e4457602002820191906000526020600020905b81548152600190910190602001808311610e2f575b50505050509350835192508560001415610e5c578295505b60016000818152600660205287850390910160008051602061383d8339815191525591505b85821015610ec8578382815181101515610e9757fe5b602090810290910101519050848114610ebd57610eb58160016129df565b600019909201915b600190910190610e81565b8260011415610ed75760006009555b50505050505050565b604080517f63616c6c47617352656c617928616464726573732c75696e743235362c62797481527f657333322c75696e743235362c75696e743235362c61646472657373290000006020820152905190819003603d01902081565b604080517f617070726f7665416e6443616c6c47617352656c617928616464726573732c6181527f6464726573732c75696e743235362c627974657333322c75696e743235362c7560208201527f696e74323536290000000000000000000000000000000000000000000000000081830152905190819003604701902081565b6000610fc5613697565b6000838152600260208181526040808420815160c081018352815481526001808301548286015282860154600160a060020a03168285015260038301805485516000196101009483161594909402939093011696909604601f8101869004860282018601909452838152869586959294606086019383018282801561108b5780601f106110605761010080835404028352916020019161108b565b820191906000526020600020905b81548152906001019060200180831161106e57829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815293820193929183018282801561111f5780601f106110f45761010080835404028352916020019161111f565b820191906000526020600020905b81548152906001019060200180831161110257829003601f168201915b505050918352505060058201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156111b35780601f10611188576101008083540402835291602001916111b3565b820191906000526020600020905b81548152906001019060200180831161119657829003601f168201915b50505050508152505093508360400151600160a060020a031633600160a060020a031614806111f3575030600160a060020a031633600160a060020a0316145b15156111fe57600080fd5b6000868152600460209081526040808320805490849055875184526003909252909120805491945092508290600019810190811061123857fe5b9060005260206000200154905080828481548110151561125457fe5b6000918252602080832090910192909255828152600482526040808220869055888252600292839052812081815560018101829055918201805473ffffffffffffffffffffffffffffffffffffffff191690556112b460038301826136d7565b6112c26004830160006136d7565b6112d06005830160006136d7565b505081546112e283600019830161371b565b5060019695505050505050565b600030600160a060020a031633600160a060020a0316141561131d5761131583836129df565b5060016113be565b60408051606060020a600160a060020a03331602815290519081900360140190206113499060016115cd565b151561135457600080fd5b60016000819052600660205260008051602061383d8339815191525414156113805761131583836129df565b6113bc30600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b505b92915050565b60008060005a9250868310156113d957600080fd5b60075489146113e757600080fd5b600160a060020a038e1615156113fc57600080fd5b30600160a060020a03168d600160a060020a03161415151561141d57600080fd5b61145161144c8f8f8f8f8f6040518083838082843782019150509250505060405180910390208e8e8e8e6117a7565b611ac0565b915061148f60028387878080601f01602080910402602001604051908101604052809392919081815260200183838082843750611a35945050505050565b506114cd828f8f8f8f8f8080601f01602080910402602001604051908101604052809392919081815260200183838082843750612b91945050505050565b60008811156115bd575a83036152080188029050600160a060020a038616151561152d57604051600160a060020a0333169082156108fc029083906000818181858888f19350505050158015611527573d6000803e3d6000fd5b506115bd565b85600160a060020a031663a9059cbb33836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561159057600080fd5b505af11580156115a4573d6000803e3d6000fd5b505050506040513d60208110156115ba57600080fd5b50505b5050505050505050505050505050565b6040805192835260208084018390528151938490038201909320600090815292839052909120541490565b6000806000806116088686611f30565b60408051600080825260208083018085528e905260ff8716838501526060830186905260808301859052925195985093965091945060019360a0808401949293601f19830193908390039091019190865af115801561166b573d6000803e3d6000fd5b505060408051601f19810151606060020a600160a060020a0390911602815290519081900360140190209450505b5050509392505050565b60008030600160a060020a031633600160a060020a031614156116ee57506000848152602081905260409020546116db8482856128e4565b6116e585826129df565b60019150610d41565b60408051606060020a600160a060020a033316028152905190819003601401902061171a9060016115cd565b151561172557600080fd5b60016000819052600660205260008051602061383d83398151915254141561176257506000848152602081905260409020546116db8482856128e4565b61179e30600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b50509392505050565b604080517f617070726f7665416e6443616c6c47617352656c617928616464726573732c6181527f6464726573732c75696e743235362c627974657333322c75696e743235362c7560208201527f696e743235362900000000000000000000000000000000000000000000000000818301528151908190036047018120606060020a600160a060020a0330811682028452600160e060020a031990921660148401529a81168b0260188301529889168a02602c820152808201979097526060870195909552608086019390935260a085019190915260c08401529290921690920260e0830152519081900360f401902090565b60408051606060020a600160a060020a0333160281529051908190036014019020600090610d43908484612cee565b30600160a060020a031633600160a060020a0316141561192657600854600160a060020a0316156118f957600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790556119d1565b60408051606060020a600160a060020a03331602815290519081900360140190206119529060016115cd565b151561195d57600080fd5b60016000819052600660205260008051602061383d83398151915254141561199557600854600160a060020a0316156118f957600080fd5b610c3030600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b50565b600081815260016020908152604091829020805483518184028101840190945280845260609392830182828015610da1576020028201919060005260206000209081548152600190910190602001808311610d8c5750505050509050919050565b600080600080600060488651811515611a4a57fe5b60008a81526006602052604090205491900494508414611a6957600080fd5b600092508291505b83821015611ab257611a848787846115f8565b9050828111611a9257600080fd5b611a9c81896115cd565b1515611aa757600080fd5b915060010181611a71565b506001979650505050505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c8101929092525190819003603c01902090565b60408051606060020a600160a060020a0380881691909102825260148201899052915190819003603401902090338116309091161415611b73576000818152600260205260408120541115611b5f57611b5a81888888888888613127565b611b6e565b611b6e8188888888888861339d565b611d67565b60408051606060020a600160a060020a0333160281529051908190036014019020611b9f9060036115cd565b1515611baa57600080fd5b611be630600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750613522945050505050565b5084600160a060020a03168782600019167f0bba1524c2d62fbb2754ba3749ad428ffa9c1a573c0b0e59b72d63ea56baf7818988888860405180858152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015611c67578181015183820152602001611c4f565b50505050905090810190601f168015611c945780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b83811015611cc7578181015183820152602001611caf565b50505050905090810190601f168015611cf45780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b83811015611d27578181015183820152602001611d0f565b50505050905090810190601f168015611d545780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a45b9695505050505050565b60008030600160a060020a031685600160a060020a031614611d94576002611d97565b60015b60008181526006602052604090205490915060011415611f1857600780546001810190915560408051606060020a600160a060020a0333160281529051908190036014019020909250611dea90826115cd565b1515611df557600080fd5b84600160a060020a0316848460405180828051906020019080838360005b83811015611e2b578181015183820152602001611e13565b50505050905090810190601f168015611e585780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af192505050508385600160a060020a0316837f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b8866040518080602001828103825283818151815260200191508051906020019080838360005b83811015611ed9578181015183820152602001611ec1565b50505050905090810190601f168015611f065780820380516001836020036101000a031916815260200191505b509250505060405180910390a4610d41565b611f23858585613522565b915061179e82600161189a565b6001810160208102830151604082028401516041830285015160ff1692601b841480611f5f57508360ff16601c145b1515610c6a57600080fd5b60008060006060806060611f7c613697565b600088815260026020818152604092839020835160c081018552815481526001808301548285015282850154600160a060020a0316828701526003830180548751601f93821615610100026000190190911696909604918201859004850286018501909652808552909491936060860193909291908301828280156120425780601f1061201757610100808354040283529160200191612042565b820191906000526020600020905b81548152906001019060200180831161202557829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156120d65780601f106120ab576101008083540402835291602001916120d6565b820191906000526020600020905b8154815290600101906020018083116120b957829003601f168201915b505050918352505060058201805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815293820193929183018282801561216a5780601f1061213f5761010080835404028352916020019161216a565b820191906000526020600020905b81548152906001019060200180831161214d57829003601f168201915b5050509190925250508151602083015160408401516060850151608086015160a090960151939e929d50909b5099509297509550909350505050565b600854600160a060020a0316158015906121ce575060085433600160a060020a039081169116145b15156121d957600080fd5b60098190556040805182815290519081900360200190206121fd90600160006128e4565b5060016000527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f54600660205260008051602061383d83398151915255565b604080517f617070726f76652875696e743235362c626f6f6c29000000000000000000000081528151908190036015018120606060020a600160a060020a033016028252600160e060020a0319166014820152601881018890527f010000000000000000000000000000000000000000000000000000000000000087151502603882015281519081900360390181207f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201819052825191829003603c018220600080845260208481018087529290925260ff88168486015260608401879052608084018690529351889388928892889260019260a0808301939192601f1983019290819003909101908b865af115801561235f573d6000803e3d6000fd5b505060408051601f19810151606060020a600160a060020a0390911602815290519081900360140190208614905061239657600080fd5b60008581526020819052604090205415156123b057600080fd5b896123bc8160016115cd565b806123cd57506123cd8160026115cd565b15156123d857600080fd5b6123e38b8e8e612cee565b9d9c50505050505050505050505050565b604080517f63616c6c47617352656c617928616464726573732c75696e743235362c62797481527f657333322c75696e743235362c75696e743235362c61646472657373290000006020820152815190819003603d018120606060020a600160a060020a0330811682028452600160e060020a031990921660148401529981168a026018830152602c820198909852604c810196909652606c860194909452608c85019290925260ac8401529290921690920260cc830152519081900360e001902090565b604080517f6578656375746528616464726573732c75696e743235362c62797465732900008152905190819003601e018120606060020a600160a060020a033081811683028552600160e060020a031984166014860152908c169091026018840152602c83018a905288516000938893918d918d918d918d91604c82019060208501908083835b6020831061255f5780518252601f199092019160209182019101612540565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019650505050505050604051809103902085858560018460405180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040518091039020848484604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015612656573d6000803e3d6000fd5b505060408051601f19810151606060020a600160a060020a0390911602815290519081900360140190208614905061268d57600080fd5b60008581526020819052604090205415156126a757600080fd5b896126b38160016115cd565b806126c457506126c48160026115cd565b15156126cf57600080fd5b6126da8f8f8f613522565b96506126e88b886001612cee565b5050505050505098975050505050505050565b6000806000805a93508784101561271157600080fd5b6007548a1461271f57600080fd5b61274d61144c8f8f8f8f6040518083838082843782019150509250505060405180910390208e8e8e8e6123f4565b92506127ac30600160a060020a03168f600160a060020a031614612772576002612775565b60015b8488888080601f01602080910402602001604051908101604052809392919081815260200183838082843750611a35945050505050565b50600780546001019055604051600160a060020a038f16908e908e908e908083838082843782019150509250505060006040518083038185875af160408051888152821515602082015281519297507f2df1d5d73ef27c124b4935d37c7e27eb114ef2afd112b09b65a29bf1dd19399d95508290030192509050a160008911156115bd575a84036152080189029050600160a060020a038716151561288157604051600160a060020a0333169082156108fc029083906000818181858888f19350505050158015611527573d6000803e3d6000fd5b86600160a060020a031663a9059cbb33836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561159057600080fd5b6040805184815260208082018590528251918290038301909120600081815291829052919020541561291557600080fd5b60018314806129245750600283145b8061292f5750600383145b8061293a5750600483145b151561294557600080fd5b60408051606081018252848152602080820185815282840188815260008681528084528581209451855591516001808601919091559051600290940193909355868152828252838120805493840181558152818120830188905584815260049091528281209190915590518391859187917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a450505050565b60006129e961373f565b6000806001851415612a3e576001600081905260008051602061383d833981519152546020919091527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f5411612a3e57600080fd5b60408051878152602080820188905282519182900383018220600081815280835284812060608501865280548552600180820154868601526002909101548587015282825260048452858220548b835293529390932080549397509195509350906000198101908110612aad57fe5b90600052602060002001549050806001600087815260200190815260200160002083815481101515612adb57fe5b60009182526020808320909101929092556040805184815280840189905281519081900382019020825260048352808220859055878252600190925220805490612b2990600019830161371b565b5060008481526004602090815260408083208390558282528083208381556001810184905560020183905590850151855186830151925191939092917f585a4aef50f8267a92b32412b331b20f7f8b96f2245b253b9cc50dcc621d33979190a4505050505050565b600780546001019055604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301526024820185905291519186169163095ea7b3916044808201926020929091908290030181600087803b158015612c0657600080fd5b505af1158015612c1a573d6000803e3d6000fd5b505050506040513d6020811015612c3057600080fd5b505060405181517f2df1d5d73ef27c124b4935d37c7e27eb114ef2afd112b09b65a29bf1dd19399d918791600160a060020a0387169185918190602084019080838360005b83811015612c8d578181015183820152602001612c75565b50505050905090810190601f168015612cba5780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af16040805194855290151560208501528051938490030192915050a15050505050565b6000612cf861375f565b6000848152600560209081526040808320815160c081018352815460ff81161515825261010090819004600160a060020a03168286015260018084015483860152600280850180548751938116159094026000190190931604601f8101879004870282018701909552848152869592946060860193919291830182828015612dc15780601f10612d9657610100808354040283529160200191612dc1565b820191906000526020600020905b815481529060010190602001808311612da457829003601f168201915b5050505050815260200160038201548152602001600482015481525050925082600001511515612df057600080fd5b30600160a060020a03168360200151600160a060020a031614612e14576002612e17565b60015b9150612e2387836115cd565b1515612e2e57600080fd5b50604080518781526020808201849052825191829003830190912060008881526005808452848220838352019092529190205460ff1615158515151415612e7457600080fd5b8415612e8a5760a0830180516001019052612e97565b60a0830180516000190190525b604080518615158152905187917fb3932da477fe5d6c8ff2eafef050c0f3a1af18fc07121001482600f36f3715d8919081900360200190a260008281526006602052604090205460a08401511015612f95576000868152600560208181526040808420858552808401835281852080548b151560ff1991821617909155948b90529282528651835488840151600160a060020a03166101000274ffffffffffffffffffffffffffffffffffffffff0019921515919096161716939093178255918501516001820155606085015180518693612f799260028501929101906137a1565b506080820151600382015560a090910151600490910155611699565b6000868152600560205260408120805474ffffffffffffffffffffffffffffffffffffffffff191681556001810182905590612fd460028301826136d7565b6003820160009055600482016000905550508260200151600160a060020a03168360400151846060015160405180828051906020019080838360005b83811015613028578181015183820152602001613010565b50505050905090810190601f1680156130555780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af192505050935082604001518360200151600160a060020a0316877f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b886606001516040518080602001828103825283818151815260200191508051906020019080838360005b838110156130e35781810151838201526020016130cb565b50505050905090810190601f1680156131105780820380516001836020036101000a031916815260200191505b509250505060405180910390a45050509392505050565b83600160a060020a031633600160a060020a031614151561314757600080fd5b6040805160c0810182528781526020808201888152600160a060020a03888116848601908152606085018981526080860189905260a0860188905260008e8152600280875297902086518155935160018501559051958301805473ffffffffffffffffffffffffffffffffffffffff191696909216959095179055925180519293926131d992600385019201906137a1565b50608082015180516131f59160048401916020909101906137a1565b5060a082015180516132119160058401916020909101906137a1565b5090505083600160a060020a03168688600019167f3bab293fc00db832d7619a9299914251b8747c036867ec056cbd506f60135b138887878760405180858152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561329557818101518382015260200161327d565b50505050905090810190601f1680156132c25780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b838110156132f55781810151838201526020016132dd565b50505050905090810190601f1680156133225780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b8381101561335557818101518382015260200161333d565b50505050905090810190601f1680156133825780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a450505050505050565b6040805160c0810182528781526020808201888152600160a060020a03888116848601908152606085018981526080860189905260a0860188905260008e8152600280875297902086518155935160018501559051958301805473ffffffffffffffffffffffffffffffffffffffff1916969092169590951790559251805192939261342f92600385019201906137a1565b506080820151805161344b9160048401916020909101906137a1565b5060a082015180516134679160058401916020909101906137a1565b505050600086815260036020818152604080842080548c86526004845282862081905593835260018401815584528184209092018a9055815188815260808183018181528851918301919091528751600160a060020a038a16958c958e957f46149b18aa084502c3f12bc75e19eda8bda8d102b82cce8474677a6d0d5f43c5958e958d958d958d9593949293850192606086019260a0870192918a01918190849084908381101561329557818101518382015260200161327d565b600780546001808201928390556040805160c081018252828152600160a060020a0380891660208084019182528385018a8152606085018a81526080860199909952600060a0860181905288815260058352959095208451815493519094166101000274ffffffffffffffffffffffffffffffffffffffff001994151560ff199094169390931793909316919091178255925193810193909355935180519394936135d392600285019201906137a1565b506080820151816003015560a082015181600401559050508284600160a060020a0316827f8afcfabcb00e47a53a8fc3e9f23ff47ee1926194bb1350dd007c50b412a6cee8856040518080602001828103825283818151815260200191508051906020019080838360005b8381101561365657818101518382015260200161363e565b50505050905090810190601f1680156136835780820380516001836020036101000a031916815260200191505b509250505060405180910390a49392505050565b60c06040519081016040528060008152602001600081526020016000600160a060020a031681526020016060815260200160608152602001606081525090565b50805460018160011615610100020316600290046000825580601f106136fd57506119d1565b601f0160209004906000526020600020908101906119d1919061381f565b815481835581811115610c2e57600083815260209020610c2e91810190830161381f565b604080516060810182526000808252602082018190529181019190915290565b60c0604051908101604052806000151581526020016000600160a060020a03168152602001600081526020016060815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106137e257805160ff191683800117855561380f565b8280016001018555821561380f579182015b8281111561380f5782518255916020019190600101906137f4565b5061381b92915061381f565b5090565b61383991905b8082111561381b5760008155600101613825565b9056003e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a31a165627a7a723058206df4aa17cb4b289bbfac52d3655c910fff95d77dd8649fdf8004dbfeb1bde40200293e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a31", + "runtime_bytecode": "60806040526004361061015b5763ffffffff60e060020a600035041663032c1a8a811461015d57806307aef43b146101c557806313fb4b8f146101e05780631d38124014610219578063262b54f51461024b5780632c883f3c1461026357806335f894a41461027b5780634da3ee83146102ad5780634eee424a146102c257806353d413c5146102da57806359f4ac61146102f55780635a3df7911461034c57806363f44b5914610367578063640c5173146103d95780636e259594146103f7578063747442d31461043857806383b5d133146104555780639010f7261461047657806394fd645b1461048e578063b15aa5b7146104ee578063b1a34e0d14610506578063b61d27f6146105ee578063b817dcc214610657578063c9100bcb146106d4578063d84c7c9f14610857578063da2c9ae21461086f578063e27e2e5c1461089b578063e574809a146108d6578063fd0dded514610959575b005b34801561016957600080fd5b506101756004356109aa565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101b1578181015183820152602001610199565b505050509050019250505060405180910390f35b3480156101d157600080fd5b5061015b600435602435610b34565b3480156101ec57600080fd5b506101fb600435602435610c34565b60408051938452602084019290925282820152519081900360600190f35b34801561022557600080fd5b50610237600435602435604435610c72565b604080519115158252519081900360200190f35b34801561025757600080fd5b50610175600435610d4a565b34801561026f57600080fd5b5061015b600435610dad565b34801561028757600080fd5b50610290610ee0565b60408051600160e060020a03199092168252519081900360200190f35b3480156102b957600080fd5b50610290610f3b565b3480156102ce57600080fd5b50610237600435610fbb565b3480156102e657600080fd5b506102376004356024356112ef565b34801561030157600080fd5b5061015b60048035600160a060020a039081169160248035831692604435926064358084019390820135926084359260a4359260c4359260e4351691610104359182019101356113c4565b34801561035857600080fd5b506102376004356024356115cd565b34801561037357600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526103c795833595369560449491939091019190819084018382808284375094975050933594506115f89350505050565b60408051918252519081900360200190f35b3480156103e557600080fd5b506102376004356024356044356116a3565b34801561040357600080fd5b506103c7600160a060020a0360043581169060243581169060443590606435906084359060a4359060c4359060e435166117a7565b34801561044457600080fd5b50610237600435602435151561189a565b34801561046157600080fd5b5061015b600160a060020a03600435166118c9565b34801561048257600080fd5b506101756004356119d4565b34801561049a57600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610237948235946024803595369594606494920191908190840183828082843750949750611a359650505050505050565b3480156104fa57600080fd5b506103c7600435611ac0565b34801561051257600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526103c7948035946024803595600160a060020a0360443516953695608494930191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611afc9650505050505050565b3480156105fa57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526103c7948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750611d719650505050505050565b34801561066357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526106b29436949293602493928401919081908401838280828437509497505093359450611f309350505050565b6040805160ff9094168452602084019290925282820152519081900360600190f35b3480156106e057600080fd5b506106ec600435611f6a565b6040518087815260200186815260200185600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561075557818101518382015260200161073d565b50505050905090810190601f1680156107825780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b838110156107b557818101518382015260200161079d565b50505050905090810190601f1680156107e25780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b838110156108155781810151838201526020016107fd565b50505050905090810190601f1680156108425780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b34801561086357600080fd5b5061015b6004356121a6565b34801561087b57600080fd5b50610237600435602435151560443560ff6064351660843560a43561223c565b3480156108a757600080fd5b506103c7600160a060020a036004358116906024359060443590606435906084359060a4359060c435166123f4565b3480156108e257600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526103c7948235600160a060020a03169460248035953695946064949201919081908401838280828437509497505084359550505060208301359260ff604082013516925060608101359150608001356124b9565b34801561096557600080fd5b5061015b600160a060020a03600480358216916024803592604435808301939082013592606435926084359260a4359260c4359091169160e4359182019101356126fb565b60408051600480825260a0820190925260609182916000918391839160208201608080388339019050509350600092506109e58660016115cd565b15610a0e576001848460ff168151811015156109fd57fe5b602090810290910101526001909201915b610a198660026115cd565b15610a42576002848460ff16815181101515610a3157fe5b602090810290910101526001909201915b610a4d8660036115cd565b15610a76576003848460ff16815181101515610a6557fe5b602090810290910101526001909201915b610a818660046115cd565b15610aaa576004848460ff16815181101515610a9957fe5b602090810290910101526001909201915b8260ff16604051908082528060200260200182016040528015610ad7578160200160208202803883390190505b509150600090505b8260ff168160ff161015610b2b57838160ff16815181101515610afe57fe5b90602001906020020151828260ff16815181101515610b1957fe5b60209081029091010152600101610adf565b50949350505050565b30600160a060020a031633600160a060020a03161415610b8c5760008111610b5b57600080fd5b600082815260016020526040902054811115610b7657600080fd5b6000828152600660205260409020819055610c30565b60408051606060020a600160a060020a0333160281529051908190036014019020610bb89060016115cd565b1515610bc357600080fd5b60016000819052600660205260008051602061383d833981519152541415610bf25760008111610b5b57600080fd5b610c2e30600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b505b5050565b60408051838152602080820184905282519182900383019091206000908152908190522080546001820154600283015491929091905b509250925092565b600030600160a060020a031633600160a060020a03161415610ca157610c998484846128e4565b506001610d43565b60408051606060020a600160a060020a0333160281529051908190036014019020610ccd9060016115cd565b1515610cd857600080fd5b60016000819052600660205260008051602061383d833981519152541415610d0557610c998484846128e4565b610d4130600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b505b9392505050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610da157602002820191906000526020600020905b81548152600190910190602001808311610d8c575b50505050509050919050565b60095460009081906060908290819081901515610dc957600080fd5b6009546001600081905260209081527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f805460408051828502810185019091528181528b9a509398509091830182828015610e4457602002820191906000526020600020905b81548152600190910190602001808311610e2f575b50505050509350835192508560001415610e5c578295505b60016000818152600660205287850390910160008051602061383d8339815191525591505b85821015610ec8578382815181101515610e9757fe5b602090810290910101519050848114610ebd57610eb58160016129df565b600019909201915b600190910190610e81565b8260011415610ed75760006009555b50505050505050565b604080517f63616c6c47617352656c617928616464726573732c75696e743235362c62797481527f657333322c75696e743235362c75696e743235362c61646472657373290000006020820152905190819003603d01902081565b604080517f617070726f7665416e6443616c6c47617352656c617928616464726573732c6181527f6464726573732c75696e743235362c627974657333322c75696e743235362c7560208201527f696e74323536290000000000000000000000000000000000000000000000000081830152905190819003604701902081565b6000610fc5613697565b6000838152600260208181526040808420815160c081018352815481526001808301548286015282860154600160a060020a03168285015260038301805485516000196101009483161594909402939093011696909604601f8101869004860282018601909452838152869586959294606086019383018282801561108b5780601f106110605761010080835404028352916020019161108b565b820191906000526020600020905b81548152906001019060200180831161106e57829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815293820193929183018282801561111f5780601f106110f45761010080835404028352916020019161111f565b820191906000526020600020905b81548152906001019060200180831161110257829003601f168201915b505050918352505060058201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156111b35780601f10611188576101008083540402835291602001916111b3565b820191906000526020600020905b81548152906001019060200180831161119657829003601f168201915b50505050508152505093508360400151600160a060020a031633600160a060020a031614806111f3575030600160a060020a031633600160a060020a0316145b15156111fe57600080fd5b6000868152600460209081526040808320805490849055875184526003909252909120805491945092508290600019810190811061123857fe5b9060005260206000200154905080828481548110151561125457fe5b6000918252602080832090910192909255828152600482526040808220869055888252600292839052812081815560018101829055918201805473ffffffffffffffffffffffffffffffffffffffff191690556112b460038301826136d7565b6112c26004830160006136d7565b6112d06005830160006136d7565b505081546112e283600019830161371b565b5060019695505050505050565b600030600160a060020a031633600160a060020a0316141561131d5761131583836129df565b5060016113be565b60408051606060020a600160a060020a03331602815290519081900360140190206113499060016115cd565b151561135457600080fd5b60016000819052600660205260008051602061383d8339815191525414156113805761131583836129df565b6113bc30600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b505b92915050565b60008060005a9250868310156113d957600080fd5b60075489146113e757600080fd5b600160a060020a038e1615156113fc57600080fd5b30600160a060020a03168d600160a060020a03161415151561141d57600080fd5b61145161144c8f8f8f8f8f6040518083838082843782019150509250505060405180910390208e8e8e8e6117a7565b611ac0565b915061148f60028387878080601f01602080910402602001604051908101604052809392919081815260200183838082843750611a35945050505050565b506114cd828f8f8f8f8f8080601f01602080910402602001604051908101604052809392919081815260200183838082843750612b91945050505050565b60008811156115bd575a83036152080188029050600160a060020a038616151561152d57604051600160a060020a0333169082156108fc029083906000818181858888f19350505050158015611527573d6000803e3d6000fd5b506115bd565b85600160a060020a031663a9059cbb33836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561159057600080fd5b505af11580156115a4573d6000803e3d6000fd5b505050506040513d60208110156115ba57600080fd5b50505b5050505050505050505050505050565b6040805192835260208084018390528151938490038201909320600090815292839052909120541490565b6000806000806116088686611f30565b60408051600080825260208083018085528e905260ff8716838501526060830186905260808301859052925195985093965091945060019360a0808401949293601f19830193908390039091019190865af115801561166b573d6000803e3d6000fd5b505060408051601f19810151606060020a600160a060020a0390911602815290519081900360140190209450505b5050509392505050565b60008030600160a060020a031633600160a060020a031614156116ee57506000848152602081905260409020546116db8482856128e4565b6116e585826129df565b60019150610d41565b60408051606060020a600160a060020a033316028152905190819003601401902061171a9060016115cd565b151561172557600080fd5b60016000819052600660205260008051602061383d83398151915254141561176257506000848152602081905260409020546116db8482856128e4565b61179e30600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b50509392505050565b604080517f617070726f7665416e6443616c6c47617352656c617928616464726573732c6181527f6464726573732c75696e743235362c627974657333322c75696e743235362c7560208201527f696e743235362900000000000000000000000000000000000000000000000000818301528151908190036047018120606060020a600160a060020a0330811682028452600160e060020a031990921660148401529a81168b0260188301529889168a02602c820152808201979097526060870195909552608086019390935260a085019190915260c08401529290921690920260e0830152519081900360f401902090565b60408051606060020a600160a060020a0333160281529051908190036014019020600090610d43908484612cee565b30600160a060020a031633600160a060020a0316141561192657600854600160a060020a0316156118f957600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790556119d1565b60408051606060020a600160a060020a03331602815290519081900360140190206119529060016115cd565b151561195d57600080fd5b60016000819052600660205260008051602061383d83398151915254141561199557600854600160a060020a0316156118f957600080fd5b610c3030600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b50565b600081815260016020908152604091829020805483518184028101840190945280845260609392830182828015610da1576020028201919060005260206000209081548152600190910190602001808311610d8c5750505050509050919050565b600080600080600060488651811515611a4a57fe5b60008a81526006602052604090205491900494508414611a6957600080fd5b600092508291505b83821015611ab257611a848787846115f8565b9050828111611a9257600080fd5b611a9c81896115cd565b1515611aa757600080fd5b915060010181611a71565b506001979650505050505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c8101929092525190819003603c01902090565b60408051606060020a600160a060020a0380881691909102825260148201899052915190819003603401902090338116309091161415611b73576000818152600260205260408120541115611b5f57611b5a81888888888888613127565b611b6e565b611b6e8188888888888861339d565b611d67565b60408051606060020a600160a060020a0333160281529051908190036014019020611b9f9060036115cd565b1515611baa57600080fd5b611be630600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750613522945050505050565b5084600160a060020a03168782600019167f0bba1524c2d62fbb2754ba3749ad428ffa9c1a573c0b0e59b72d63ea56baf7818988888860405180858152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015611c67578181015183820152602001611c4f565b50505050905090810190601f168015611c945780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b83811015611cc7578181015183820152602001611caf565b50505050905090810190601f168015611cf45780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b83811015611d27578181015183820152602001611d0f565b50505050905090810190601f168015611d545780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a45b9695505050505050565b60008030600160a060020a031685600160a060020a031614611d94576002611d97565b60015b60008181526006602052604090205490915060011415611f1857600780546001810190915560408051606060020a600160a060020a0333160281529051908190036014019020909250611dea90826115cd565b1515611df557600080fd5b84600160a060020a0316848460405180828051906020019080838360005b83811015611e2b578181015183820152602001611e13565b50505050905090810190601f168015611e585780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af192505050508385600160a060020a0316837f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b8866040518080602001828103825283818151815260200191508051906020019080838360005b83811015611ed9578181015183820152602001611ec1565b50505050905090810190601f168015611f065780820380516001836020036101000a031916815260200191505b509250505060405180910390a4610d41565b611f23858585613522565b915061179e82600161189a565b6001810160208102830151604082028401516041830285015160ff1692601b841480611f5f57508360ff16601c145b1515610c6a57600080fd5b60008060006060806060611f7c613697565b600088815260026020818152604092839020835160c081018552815481526001808301548285015282850154600160a060020a0316828701526003830180548751601f93821615610100026000190190911696909604918201859004850286018501909652808552909491936060860193909291908301828280156120425780601f1061201757610100808354040283529160200191612042565b820191906000526020600020905b81548152906001019060200180831161202557829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156120d65780601f106120ab576101008083540402835291602001916120d6565b820191906000526020600020905b8154815290600101906020018083116120b957829003601f168201915b505050918352505060058201805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815293820193929183018282801561216a5780601f1061213f5761010080835404028352916020019161216a565b820191906000526020600020905b81548152906001019060200180831161214d57829003601f168201915b5050509190925250508151602083015160408401516060850151608086015160a090960151939e929d50909b5099509297509550909350505050565b600854600160a060020a0316158015906121ce575060085433600160a060020a039081169116145b15156121d957600080fd5b60098190556040805182815290519081900360200190206121fd90600160006128e4565b5060016000527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f54600660205260008051602061383d83398151915255565b604080517f617070726f76652875696e743235362c626f6f6c29000000000000000000000081528151908190036015018120606060020a600160a060020a033016028252600160e060020a0319166014820152601881018890527f010000000000000000000000000000000000000000000000000000000000000087151502603882015281519081900360390181207f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201819052825191829003603c018220600080845260208481018087529290925260ff88168486015260608401879052608084018690529351889388928892889260019260a0808301939192601f1983019290819003909101908b865af115801561235f573d6000803e3d6000fd5b505060408051601f19810151606060020a600160a060020a0390911602815290519081900360140190208614905061239657600080fd5b60008581526020819052604090205415156123b057600080fd5b896123bc8160016115cd565b806123cd57506123cd8160026115cd565b15156123d857600080fd5b6123e38b8e8e612cee565b9d9c50505050505050505050505050565b604080517f63616c6c47617352656c617928616464726573732c75696e743235362c62797481527f657333322c75696e743235362c75696e743235362c61646472657373290000006020820152815190819003603d018120606060020a600160a060020a0330811682028452600160e060020a031990921660148401529981168a026018830152602c820198909852604c810196909652606c860194909452608c85019290925260ac8401529290921690920260cc830152519081900360e001902090565b604080517f6578656375746528616464726573732c75696e743235362c62797465732900008152905190819003601e018120606060020a600160a060020a033081811683028552600160e060020a031984166014860152908c169091026018840152602c83018a905288516000938893918d918d918d918d91604c82019060208501908083835b6020831061255f5780518252601f199092019160209182019101612540565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019650505050505050604051809103902085858560018460405180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040518091039020848484604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015612656573d6000803e3d6000fd5b505060408051601f19810151606060020a600160a060020a0390911602815290519081900360140190208614905061268d57600080fd5b60008581526020819052604090205415156126a757600080fd5b896126b38160016115cd565b806126c457506126c48160026115cd565b15156126cf57600080fd5b6126da8f8f8f613522565b96506126e88b886001612cee565b5050505050505098975050505050505050565b6000806000805a93508784101561271157600080fd5b6007548a1461271f57600080fd5b61274d61144c8f8f8f8f6040518083838082843782019150509250505060405180910390208e8e8e8e6123f4565b92506127ac30600160a060020a03168f600160a060020a031614612772576002612775565b60015b8488888080601f01602080910402602001604051908101604052809392919081815260200183838082843750611a35945050505050565b50600780546001019055604051600160a060020a038f16908e908e908e908083838082843782019150509250505060006040518083038185875af160408051888152821515602082015281519297507f2df1d5d73ef27c124b4935d37c7e27eb114ef2afd112b09b65a29bf1dd19399d95508290030192509050a160008911156115bd575a84036152080189029050600160a060020a038716151561288157604051600160a060020a0333169082156108fc029083906000818181858888f19350505050158015611527573d6000803e3d6000fd5b86600160a060020a031663a9059cbb33836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561159057600080fd5b6040805184815260208082018590528251918290038301909120600081815291829052919020541561291557600080fd5b60018314806129245750600283145b8061292f5750600383145b8061293a5750600483145b151561294557600080fd5b60408051606081018252848152602080820185815282840188815260008681528084528581209451855591516001808601919091559051600290940193909355868152828252838120805493840181558152818120830188905584815260049091528281209190915590518391859187917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a450505050565b60006129e961373f565b6000806001851415612a3e576001600081905260008051602061383d833981519152546020919091527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f5411612a3e57600080fd5b60408051878152602080820188905282519182900383018220600081815280835284812060608501865280548552600180820154868601526002909101548587015282825260048452858220548b835293529390932080549397509195509350906000198101908110612aad57fe5b90600052602060002001549050806001600087815260200190815260200160002083815481101515612adb57fe5b60009182526020808320909101929092556040805184815280840189905281519081900382019020825260048352808220859055878252600190925220805490612b2990600019830161371b565b5060008481526004602090815260408083208390558282528083208381556001810184905560020183905590850151855186830151925191939092917f585a4aef50f8267a92b32412b331b20f7f8b96f2245b253b9cc50dcc621d33979190a4505050505050565b600780546001019055604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301526024820185905291519186169163095ea7b3916044808201926020929091908290030181600087803b158015612c0657600080fd5b505af1158015612c1a573d6000803e3d6000fd5b505050506040513d6020811015612c3057600080fd5b505060405181517f2df1d5d73ef27c124b4935d37c7e27eb114ef2afd112b09b65a29bf1dd19399d918791600160a060020a0387169185918190602084019080838360005b83811015612c8d578181015183820152602001612c75565b50505050905090810190601f168015612cba5780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af16040805194855290151560208501528051938490030192915050a15050505050565b6000612cf861375f565b6000848152600560209081526040808320815160c081018352815460ff81161515825261010090819004600160a060020a03168286015260018084015483860152600280850180548751938116159094026000190190931604601f8101879004870282018701909552848152869592946060860193919291830182828015612dc15780601f10612d9657610100808354040283529160200191612dc1565b820191906000526020600020905b815481529060010190602001808311612da457829003601f168201915b5050505050815260200160038201548152602001600482015481525050925082600001511515612df057600080fd5b30600160a060020a03168360200151600160a060020a031614612e14576002612e17565b60015b9150612e2387836115cd565b1515612e2e57600080fd5b50604080518781526020808201849052825191829003830190912060008881526005808452848220838352019092529190205460ff1615158515151415612e7457600080fd5b8415612e8a5760a0830180516001019052612e97565b60a0830180516000190190525b604080518615158152905187917fb3932da477fe5d6c8ff2eafef050c0f3a1af18fc07121001482600f36f3715d8919081900360200190a260008281526006602052604090205460a08401511015612f95576000868152600560208181526040808420858552808401835281852080548b151560ff1991821617909155948b90529282528651835488840151600160a060020a03166101000274ffffffffffffffffffffffffffffffffffffffff0019921515919096161716939093178255918501516001820155606085015180518693612f799260028501929101906137a1565b506080820151600382015560a090910151600490910155611699565b6000868152600560205260408120805474ffffffffffffffffffffffffffffffffffffffffff191681556001810182905590612fd460028301826136d7565b6003820160009055600482016000905550508260200151600160a060020a03168360400151846060015160405180828051906020019080838360005b83811015613028578181015183820152602001613010565b50505050905090810190601f1680156130555780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af192505050935082604001518360200151600160a060020a0316877f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b886606001516040518080602001828103825283818151815260200191508051906020019080838360005b838110156130e35781810151838201526020016130cb565b50505050905090810190601f1680156131105780820380516001836020036101000a031916815260200191505b509250505060405180910390a45050509392505050565b83600160a060020a031633600160a060020a031614151561314757600080fd5b6040805160c0810182528781526020808201888152600160a060020a03888116848601908152606085018981526080860189905260a0860188905260008e8152600280875297902086518155935160018501559051958301805473ffffffffffffffffffffffffffffffffffffffff191696909216959095179055925180519293926131d992600385019201906137a1565b50608082015180516131f59160048401916020909101906137a1565b5060a082015180516132119160058401916020909101906137a1565b5090505083600160a060020a03168688600019167f3bab293fc00db832d7619a9299914251b8747c036867ec056cbd506f60135b138887878760405180858152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561329557818101518382015260200161327d565b50505050905090810190601f1680156132c25780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b838110156132f55781810151838201526020016132dd565b50505050905090810190601f1680156133225780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b8381101561335557818101518382015260200161333d565b50505050905090810190601f1680156133825780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a450505050505050565b6040805160c0810182528781526020808201888152600160a060020a03888116848601908152606085018981526080860189905260a0860188905260008e8152600280875297902086518155935160018501559051958301805473ffffffffffffffffffffffffffffffffffffffff1916969092169590951790559251805192939261342f92600385019201906137a1565b506080820151805161344b9160048401916020909101906137a1565b5060a082015180516134679160058401916020909101906137a1565b505050600086815260036020818152604080842080548c86526004845282862081905593835260018401815584528184209092018a9055815188815260808183018181528851918301919091528751600160a060020a038a16958c958e957f46149b18aa084502c3f12bc75e19eda8bda8d102b82cce8474677a6d0d5f43c5958e958d958d958d9593949293850192606086019260a0870192918a01918190849084908381101561329557818101518382015260200161327d565b600780546001808201928390556040805160c081018252828152600160a060020a0380891660208084019182528385018a8152606085018a81526080860199909952600060a0860181905288815260058352959095208451815493519094166101000274ffffffffffffffffffffffffffffffffffffffff001994151560ff199094169390931793909316919091178255925193810193909355935180519394936135d392600285019201906137a1565b506080820151816003015560a082015181600401559050508284600160a060020a0316827f8afcfabcb00e47a53a8fc3e9f23ff47ee1926194bb1350dd007c50b412a6cee8856040518080602001828103825283818151815260200191508051906020019080838360005b8381101561365657818101518382015260200161363e565b50505050905090810190601f1680156136835780820380516001836020036101000a031916815260200191505b509250505060405180910390a49392505050565b60c06040519081016040528060008152602001600081526020016000600160a060020a031681526020016060815260200160608152602001606081525090565b50805460018160011615610100020316600290046000825580601f106136fd57506119d1565b601f0160209004906000526020600020908101906119d1919061381f565b815481835581811115610c2e57600083815260209020610c2e91810190830161381f565b604080516060810182526000808252602082018190529181019190915290565b60c0604051908101604052806000151581526020016000600160a060020a03168152602001600081526020016060815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106137e257805160ff191683800117855561380f565b8280016001018555821561380f579182015b8281111561380f5782518255916020019190600101906137f4565b5061381b92915061381f565b5090565b61383991905b8082111561381b5760008155600101613825565b9056003e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a31a165627a7a723058206df4aa17cb4b289bbfac52d3655c910fff95d77dd8649fdf8004dbfeb1bde4020029", + "real_runtime_bytecode": "60806040526004361061015b5763ffffffff60e060020a600035041663032c1a8a811461015d57806307aef43b146101c557806313fb4b8f146101e05780631d38124014610219578063262b54f51461024b5780632c883f3c1461026357806335f894a41461027b5780634da3ee83146102ad5780634eee424a146102c257806353d413c5146102da57806359f4ac61146102f55780635a3df7911461034c57806363f44b5914610367578063640c5173146103d95780636e259594146103f7578063747442d31461043857806383b5d133146104555780639010f7261461047657806394fd645b1461048e578063b15aa5b7146104ee578063b1a34e0d14610506578063b61d27f6146105ee578063b817dcc214610657578063c9100bcb146106d4578063d84c7c9f14610857578063da2c9ae21461086f578063e27e2e5c1461089b578063e574809a146108d6578063fd0dded514610959575b005b34801561016957600080fd5b506101756004356109aa565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156101b1578181015183820152602001610199565b505050509050019250505060405180910390f35b3480156101d157600080fd5b5061015b600435602435610b34565b3480156101ec57600080fd5b506101fb600435602435610c34565b60408051938452602084019290925282820152519081900360600190f35b34801561022557600080fd5b50610237600435602435604435610c72565b604080519115158252519081900360200190f35b34801561025757600080fd5b50610175600435610d4a565b34801561026f57600080fd5b5061015b600435610dad565b34801561028757600080fd5b50610290610ee0565b60408051600160e060020a03199092168252519081900360200190f35b3480156102b957600080fd5b50610290610f3b565b3480156102ce57600080fd5b50610237600435610fbb565b3480156102e657600080fd5b506102376004356024356112ef565b34801561030157600080fd5b5061015b60048035600160a060020a039081169160248035831692604435926064358084019390820135926084359260a4359260c4359260e4351691610104359182019101356113c4565b34801561035857600080fd5b506102376004356024356115cd565b34801561037357600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526103c795833595369560449491939091019190819084018382808284375094975050933594506115f89350505050565b60408051918252519081900360200190f35b3480156103e557600080fd5b506102376004356024356044356116a3565b34801561040357600080fd5b506103c7600160a060020a0360043581169060243581169060443590606435906084359060a4359060c4359060e435166117a7565b34801561044457600080fd5b50610237600435602435151561189a565b34801561046157600080fd5b5061015b600160a060020a03600435166118c9565b34801561048257600080fd5b506101756004356119d4565b34801561049a57600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610237948235946024803595369594606494920191908190840183828082843750949750611a359650505050505050565b3480156104fa57600080fd5b506103c7600435611ac0565b34801561051257600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526103c7948035946024803595600160a060020a0360443516953695608494930191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750611afc9650505050505050565b3480156105fa57600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526103c7948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750611d719650505050505050565b34801561066357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526106b29436949293602493928401919081908401838280828437509497505093359450611f309350505050565b6040805160ff9094168452602084019290925282820152519081900360600190f35b3480156106e057600080fd5b506106ec600435611f6a565b6040518087815260200186815260200185600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561075557818101518382015260200161073d565b50505050905090810190601f1680156107825780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b838110156107b557818101518382015260200161079d565b50505050905090810190601f1680156107e25780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b838110156108155781810151838201526020016107fd565b50505050905090810190601f1680156108425780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b34801561086357600080fd5b5061015b6004356121a6565b34801561087b57600080fd5b50610237600435602435151560443560ff6064351660843560a43561223c565b3480156108a757600080fd5b506103c7600160a060020a036004358116906024359060443590606435906084359060a4359060c435166123f4565b3480156108e257600080fd5b50604080516020600460443581810135601f81018490048402850184019095528484526103c7948235600160a060020a03169460248035953695946064949201919081908401838280828437509497505084359550505060208301359260ff604082013516925060608101359150608001356124b9565b34801561096557600080fd5b5061015b600160a060020a03600480358216916024803592604435808301939082013592606435926084359260a4359260c4359091169160e4359182019101356126fb565b60408051600480825260a0820190925260609182916000918391839160208201608080388339019050509350600092506109e58660016115cd565b15610a0e576001848460ff168151811015156109fd57fe5b602090810290910101526001909201915b610a198660026115cd565b15610a42576002848460ff16815181101515610a3157fe5b602090810290910101526001909201915b610a4d8660036115cd565b15610a76576003848460ff16815181101515610a6557fe5b602090810290910101526001909201915b610a818660046115cd565b15610aaa576004848460ff16815181101515610a9957fe5b602090810290910101526001909201915b8260ff16604051908082528060200260200182016040528015610ad7578160200160208202803883390190505b509150600090505b8260ff168160ff161015610b2b57838160ff16815181101515610afe57fe5b90602001906020020151828260ff16815181101515610b1957fe5b60209081029091010152600101610adf565b50949350505050565b30600160a060020a031633600160a060020a03161415610b8c5760008111610b5b57600080fd5b600082815260016020526040902054811115610b7657600080fd5b6000828152600660205260409020819055610c30565b60408051606060020a600160a060020a0333160281529051908190036014019020610bb89060016115cd565b1515610bc357600080fd5b60016000819052600660205260008051602061383d833981519152541415610bf25760008111610b5b57600080fd5b610c2e30600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b505b5050565b60408051838152602080820184905282519182900383019091206000908152908190522080546001820154600283015491929091905b509250925092565b600030600160a060020a031633600160a060020a03161415610ca157610c998484846128e4565b506001610d43565b60408051606060020a600160a060020a0333160281529051908190036014019020610ccd9060016115cd565b1515610cd857600080fd5b60016000819052600660205260008051602061383d833981519152541415610d0557610c998484846128e4565b610d4130600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b505b9392505050565b600081815260036020908152604091829020805483518184028101840190945280845260609392830182828015610da157602002820191906000526020600020905b81548152600190910190602001808311610d8c575b50505050509050919050565b60095460009081906060908290819081901515610dc957600080fd5b6009546001600081905260209081527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f805460408051828502810185019091528181528b9a509398509091830182828015610e4457602002820191906000526020600020905b81548152600190910190602001808311610e2f575b50505050509350835192508560001415610e5c578295505b60016000818152600660205287850390910160008051602061383d8339815191525591505b85821015610ec8578382815181101515610e9757fe5b602090810290910101519050848114610ebd57610eb58160016129df565b600019909201915b600190910190610e81565b8260011415610ed75760006009555b50505050505050565b604080517f63616c6c47617352656c617928616464726573732c75696e743235362c62797481527f657333322c75696e743235362c75696e743235362c61646472657373290000006020820152905190819003603d01902081565b604080517f617070726f7665416e6443616c6c47617352656c617928616464726573732c6181527f6464726573732c75696e743235362c627974657333322c75696e743235362c7560208201527f696e74323536290000000000000000000000000000000000000000000000000081830152905190819003604701902081565b6000610fc5613697565b6000838152600260208181526040808420815160c081018352815481526001808301548286015282860154600160a060020a03168285015260038301805485516000196101009483161594909402939093011696909604601f8101869004860282018601909452838152869586959294606086019383018282801561108b5780601f106110605761010080835404028352916020019161108b565b820191906000526020600020905b81548152906001019060200180831161106e57829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815293820193929183018282801561111f5780601f106110f45761010080835404028352916020019161111f565b820191906000526020600020905b81548152906001019060200180831161110257829003601f168201915b505050918352505060058201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156111b35780601f10611188576101008083540402835291602001916111b3565b820191906000526020600020905b81548152906001019060200180831161119657829003601f168201915b50505050508152505093508360400151600160a060020a031633600160a060020a031614806111f3575030600160a060020a031633600160a060020a0316145b15156111fe57600080fd5b6000868152600460209081526040808320805490849055875184526003909252909120805491945092508290600019810190811061123857fe5b9060005260206000200154905080828481548110151561125457fe5b6000918252602080832090910192909255828152600482526040808220869055888252600292839052812081815560018101829055918201805473ffffffffffffffffffffffffffffffffffffffff191690556112b460038301826136d7565b6112c26004830160006136d7565b6112d06005830160006136d7565b505081546112e283600019830161371b565b5060019695505050505050565b600030600160a060020a031633600160a060020a0316141561131d5761131583836129df565b5060016113be565b60408051606060020a600160a060020a03331602815290519081900360140190206113499060016115cd565b151561135457600080fd5b60016000819052600660205260008051602061383d8339815191525414156113805761131583836129df565b6113bc30600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b505b92915050565b60008060005a9250868310156113d957600080fd5b60075489146113e757600080fd5b600160a060020a038e1615156113fc57600080fd5b30600160a060020a03168d600160a060020a03161415151561141d57600080fd5b61145161144c8f8f8f8f8f6040518083838082843782019150509250505060405180910390208e8e8e8e6117a7565b611ac0565b915061148f60028387878080601f01602080910402602001604051908101604052809392919081815260200183838082843750611a35945050505050565b506114cd828f8f8f8f8f8080601f01602080910402602001604051908101604052809392919081815260200183838082843750612b91945050505050565b60008811156115bd575a83036152080188029050600160a060020a038616151561152d57604051600160a060020a0333169082156108fc029083906000818181858888f19350505050158015611527573d6000803e3d6000fd5b506115bd565b85600160a060020a031663a9059cbb33836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561159057600080fd5b505af11580156115a4573d6000803e3d6000fd5b505050506040513d60208110156115ba57600080fd5b50505b5050505050505050505050505050565b6040805192835260208084018390528151938490038201909320600090815292839052909120541490565b6000806000806116088686611f30565b60408051600080825260208083018085528e905260ff8716838501526060830186905260808301859052925195985093965091945060019360a0808401949293601f19830193908390039091019190865af115801561166b573d6000803e3d6000fd5b505060408051601f19810151606060020a600160a060020a0390911602815290519081900360140190209450505b5050509392505050565b60008030600160a060020a031633600160a060020a031614156116ee57506000848152602081905260409020546116db8482856128e4565b6116e585826129df565b60019150610d41565b60408051606060020a600160a060020a033316028152905190819003601401902061171a9060016115cd565b151561172557600080fd5b60016000819052600660205260008051602061383d83398151915254141561176257506000848152602081905260409020546116db8482856128e4565b61179e30600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b50509392505050565b604080517f617070726f7665416e6443616c6c47617352656c617928616464726573732c6181527f6464726573732c75696e743235362c627974657333322c75696e743235362c7560208201527f696e743235362900000000000000000000000000000000000000000000000000818301528151908190036047018120606060020a600160a060020a0330811682028452600160e060020a031990921660148401529a81168b0260188301529889168a02602c820152808201979097526060870195909552608086019390935260a085019190915260c08401529290921690920260e0830152519081900360f401902090565b60408051606060020a600160a060020a0333160281529051908190036014019020600090610d43908484612cee565b30600160a060020a031633600160a060020a0316141561192657600854600160a060020a0316156118f957600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790556119d1565b60408051606060020a600160a060020a03331602815290519081900360140190206119529060016115cd565b151561195d57600080fd5b60016000819052600660205260008051602061383d83398151915254141561199557600854600160a060020a0316156118f957600080fd5b610c3030600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750611d71945050505050565b50565b600081815260016020908152604091829020805483518184028101840190945280845260609392830182828015610da1576020028201919060005260206000209081548152600190910190602001808311610d8c5750505050509050919050565b600080600080600060488651811515611a4a57fe5b60008a81526006602052604090205491900494508414611a6957600080fd5b600092508291505b83821015611ab257611a848787846115f8565b9050828111611a9257600080fd5b611a9c81896115cd565b1515611aa757600080fd5b915060010181611a71565b506001979650505050505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c8101929092525190819003603c01902090565b60408051606060020a600160a060020a0380881691909102825260148201899052915190819003603401902090338116309091161415611b73576000818152600260205260408120541115611b5f57611b5a81888888888888613127565b611b6e565b611b6e8188888888888861339d565b611d67565b60408051606060020a600160a060020a0333160281529051908190036014019020611b9f9060036115cd565b1515611baa57600080fd5b611be630600080368080601f01602080910402602001604051908101604052809392919081815260200183838082843750613522945050505050565b5084600160a060020a03168782600019167f0bba1524c2d62fbb2754ba3749ad428ffa9c1a573c0b0e59b72d63ea56baf7818988888860405180858152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015611c67578181015183820152602001611c4f565b50505050905090810190601f168015611c945780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b83811015611cc7578181015183820152602001611caf565b50505050905090810190601f168015611cf45780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b83811015611d27578181015183820152602001611d0f565b50505050905090810190601f168015611d545780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a45b9695505050505050565b60008030600160a060020a031685600160a060020a031614611d94576002611d97565b60015b60008181526006602052604090205490915060011415611f1857600780546001810190915560408051606060020a600160a060020a0333160281529051908190036014019020909250611dea90826115cd565b1515611df557600080fd5b84600160a060020a0316848460405180828051906020019080838360005b83811015611e2b578181015183820152602001611e13565b50505050905090810190601f168015611e585780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af192505050508385600160a060020a0316837f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b8866040518080602001828103825283818151815260200191508051906020019080838360005b83811015611ed9578181015183820152602001611ec1565b50505050905090810190601f168015611f065780820380516001836020036101000a031916815260200191505b509250505060405180910390a4610d41565b611f23858585613522565b915061179e82600161189a565b6001810160208102830151604082028401516041830285015160ff1692601b841480611f5f57508360ff16601c145b1515610c6a57600080fd5b60008060006060806060611f7c613697565b600088815260026020818152604092839020835160c081018552815481526001808301548285015282850154600160a060020a0316828701526003830180548751601f93821615610100026000190190911696909604918201859004850286018501909652808552909491936060860193909291908301828280156120425780601f1061201757610100808354040283529160200191612042565b820191906000526020600020905b81548152906001019060200180831161202557829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156120d65780601f106120ab576101008083540402835291602001916120d6565b820191906000526020600020905b8154815290600101906020018083116120b957829003601f168201915b505050918352505060058201805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815293820193929183018282801561216a5780601f1061213f5761010080835404028352916020019161216a565b820191906000526020600020905b81548152906001019060200180831161214d57829003601f168201915b5050509190925250508151602083015160408401516060850151608086015160a090960151939e929d50909b5099509297509550909350505050565b600854600160a060020a0316158015906121ce575060085433600160a060020a039081169116145b15156121d957600080fd5b60098190556040805182815290519081900360200190206121fd90600160006128e4565b5060016000527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f54600660205260008051602061383d83398151915255565b604080517f617070726f76652875696e743235362c626f6f6c29000000000000000000000081528151908190036015018120606060020a600160a060020a033016028252600160e060020a0319166014820152601881018890527f010000000000000000000000000000000000000000000000000000000000000087151502603882015281519081900360390181207f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201819052825191829003603c018220600080845260208481018087529290925260ff88168486015260608401879052608084018690529351889388928892889260019260a0808301939192601f1983019290819003909101908b865af115801561235f573d6000803e3d6000fd5b505060408051601f19810151606060020a600160a060020a0390911602815290519081900360140190208614905061239657600080fd5b60008581526020819052604090205415156123b057600080fd5b896123bc8160016115cd565b806123cd57506123cd8160026115cd565b15156123d857600080fd5b6123e38b8e8e612cee565b9d9c50505050505050505050505050565b604080517f63616c6c47617352656c617928616464726573732c75696e743235362c62797481527f657333322c75696e743235362c75696e743235362c61646472657373290000006020820152815190819003603d018120606060020a600160a060020a0330811682028452600160e060020a031990921660148401529981168a026018830152602c820198909852604c810196909652606c860194909452608c85019290925260ac8401529290921690920260cc830152519081900360e001902090565b604080517f6578656375746528616464726573732c75696e743235362c62797465732900008152905190819003601e018120606060020a600160a060020a033081811683028552600160e060020a031984166014860152908c169091026018840152602c83018a905288516000938893918d918d918d918d91604c82019060208501908083835b6020831061255f5780518252601f199092019160209182019101612540565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019650505050505050604051809103902085858560018460405180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040518091039020848484604051600081526020016040526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000865af1158015612656573d6000803e3d6000fd5b505060408051601f19810151606060020a600160a060020a0390911602815290519081900360140190208614905061268d57600080fd5b60008581526020819052604090205415156126a757600080fd5b896126b38160016115cd565b806126c457506126c48160026115cd565b15156126cf57600080fd5b6126da8f8f8f613522565b96506126e88b886001612cee565b5050505050505098975050505050505050565b6000806000805a93508784101561271157600080fd5b6007548a1461271f57600080fd5b61274d61144c8f8f8f8f6040518083838082843782019150509250505060405180910390208e8e8e8e6123f4565b92506127ac30600160a060020a03168f600160a060020a031614612772576002612775565b60015b8488888080601f01602080910402602001604051908101604052809392919081815260200183838082843750611a35945050505050565b50600780546001019055604051600160a060020a038f16908e908e908e908083838082843782019150509250505060006040518083038185875af160408051888152821515602082015281519297507f2df1d5d73ef27c124b4935d37c7e27eb114ef2afd112b09b65a29bf1dd19399d95508290030192509050a160008911156115bd575a84036152080189029050600160a060020a038716151561288157604051600160a060020a0333169082156108fc029083906000818181858888f19350505050158015611527573d6000803e3d6000fd5b86600160a060020a031663a9059cbb33836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561159057600080fd5b6040805184815260208082018590528251918290038301909120600081815291829052919020541561291557600080fd5b60018314806129245750600283145b8061292f5750600383145b8061293a5750600483145b151561294557600080fd5b60408051606081018252848152602080820185815282840188815260008681528084528581209451855591516001808601919091559051600290940193909355868152828252838120805493840181558152818120830188905584815260049091528281209190915590518391859187917f480000bb1edad8ca1470381cc334b1917fbd51c6531f3a623ea8e0ec7e38a6e991a450505050565b60006129e961373f565b6000806001851415612a3e576001600081905260008051602061383d833981519152546020919091527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f5411612a3e57600080fd5b60408051878152602080820188905282519182900383018220600081815280835284812060608501865280548552600180820154868601526002909101548587015282825260048452858220548b835293529390932080549397509195509350906000198101908110612aad57fe5b90600052602060002001549050806001600087815260200190815260200160002083815481101515612adb57fe5b60009182526020808320909101929092556040805184815280840189905281519081900382019020825260048352808220859055878252600190925220805490612b2990600019830161371b565b5060008481526004602090815260408083208390558282528083208381556001810184905560020183905590850151855186830151925191939092917f585a4aef50f8267a92b32412b331b20f7f8b96f2245b253b9cc50dcc621d33979190a4505050505050565b600780546001019055604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301526024820185905291519186169163095ea7b3916044808201926020929091908290030181600087803b158015612c0657600080fd5b505af1158015612c1a573d6000803e3d6000fd5b505050506040513d6020811015612c3057600080fd5b505060405181517f2df1d5d73ef27c124b4935d37c7e27eb114ef2afd112b09b65a29bf1dd19399d918791600160a060020a0387169185918190602084019080838360005b83811015612c8d578181015183820152602001612c75565b50505050905090810190601f168015612cba5780820380516001836020036101000a031916815260200191505b509150506000604051808303816000865af16040805194855290151560208501528051938490030192915050a15050505050565b6000612cf861375f565b6000848152600560209081526040808320815160c081018352815460ff81161515825261010090819004600160a060020a03168286015260018084015483860152600280850180548751938116159094026000190190931604601f8101879004870282018701909552848152869592946060860193919291830182828015612dc15780601f10612d9657610100808354040283529160200191612dc1565b820191906000526020600020905b815481529060010190602001808311612da457829003601f168201915b5050505050815260200160038201548152602001600482015481525050925082600001511515612df057600080fd5b30600160a060020a03168360200151600160a060020a031614612e14576002612e17565b60015b9150612e2387836115cd565b1515612e2e57600080fd5b50604080518781526020808201849052825191829003830190912060008881526005808452848220838352019092529190205460ff1615158515151415612e7457600080fd5b8415612e8a5760a0830180516001019052612e97565b60a0830180516000190190525b604080518615158152905187917fb3932da477fe5d6c8ff2eafef050c0f3a1af18fc07121001482600f36f3715d8919081900360200190a260008281526006602052604090205460a08401511015612f95576000868152600560208181526040808420858552808401835281852080548b151560ff1991821617909155948b90529282528651835488840151600160a060020a03166101000274ffffffffffffffffffffffffffffffffffffffff0019921515919096161716939093178255918501516001820155606085015180518693612f799260028501929101906137a1565b506080820151600382015560a090910151600490910155611699565b6000868152600560205260408120805474ffffffffffffffffffffffffffffffffffffffffff191681556001810182905590612fd460028301826136d7565b6003820160009055600482016000905550508260200151600160a060020a03168360400151846060015160405180828051906020019080838360005b83811015613028578181015183820152602001613010565b50505050905090810190601f1680156130555780820380516001836020036101000a031916815260200191505b5091505060006040518083038185875af192505050935082604001518360200151600160a060020a0316877f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b886606001516040518080602001828103825283818151815260200191508051906020019080838360005b838110156130e35781810151838201526020016130cb565b50505050905090810190601f1680156131105780820380516001836020036101000a031916815260200191505b509250505060405180910390a45050509392505050565b83600160a060020a031633600160a060020a031614151561314757600080fd5b6040805160c0810182528781526020808201888152600160a060020a03888116848601908152606085018981526080860189905260a0860188905260008e8152600280875297902086518155935160018501559051958301805473ffffffffffffffffffffffffffffffffffffffff191696909216959095179055925180519293926131d992600385019201906137a1565b50608082015180516131f59160048401916020909101906137a1565b5060a082015180516132119160058401916020909101906137a1565b5090505083600160a060020a03168688600019167f3bab293fc00db832d7619a9299914251b8747c036867ec056cbd506f60135b138887878760405180858152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561329557818101518382015260200161327d565b50505050905090810190601f1680156132c25780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b838110156132f55781810151838201526020016132dd565b50505050905090810190601f1680156133225780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b8381101561335557818101518382015260200161333d565b50505050905090810190601f1680156133825780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a450505050505050565b6040805160c0810182528781526020808201888152600160a060020a03888116848601908152606085018981526080860189905260a0860188905260008e8152600280875297902086518155935160018501559051958301805473ffffffffffffffffffffffffffffffffffffffff1916969092169590951790559251805192939261342f92600385019201906137a1565b506080820151805161344b9160048401916020909101906137a1565b5060a082015180516134679160058401916020909101906137a1565b505050600086815260036020818152604080842080548c86526004845282862081905593835260018401815584528184209092018a9055815188815260808183018181528851918301919091528751600160a060020a038a16958c958e957f46149b18aa084502c3f12bc75e19eda8bda8d102b82cce8474677a6d0d5f43c5958e958d958d958d9593949293850192606086019260a0870192918a01918190849084908381101561329557818101518382015260200161327d565b600780546001808201928390556040805160c081018252828152600160a060020a0380891660208084019182528385018a8152606085018a81526080860199909952600060a0860181905288815260058352959095208451815493519094166101000274ffffffffffffffffffffffffffffffffffffffff001994151560ff199094169390931793909316919091178255925193810193909355935180519394936135d392600285019201906137a1565b506080820151816003015560a082015181600401559050508284600160a060020a0316827f8afcfabcb00e47a53a8fc3e9f23ff47ee1926194bb1350dd007c50b412a6cee8856040518080602001828103825283818151815260200191508051906020019080838360005b8381101561365657818101518382015260200161363e565b50505050905090810190601f1680156136835780820380516001836020036101000a031916815260200191505b509250505060405180910390a49392505050565b60c06040519081016040528060008152602001600081526020016000600160a060020a031681526020016060815260200160608152602001606081525090565b50805460018160011615610100020316600290046000825580601f106136fd57506119d1565b601f0160209004906000526020600020908101906119d1919061381f565b815481835581811115610c2e57600083815260209020610c2e91810190830161381f565b604080516060810182526000808252602082018190529181019190915290565b60c0604051908101604052806000151581526020016000600160a060020a03168152602001600081526020016060815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106137e257805160ff191683800117855561380f565b8280016001018555821561380f579182015b8281111561380f5782518255916020019190600101906137f4565b5061381b92915061381f565b5090565b61383991905b8082111561381b5760008155600101613825565b9056003e5fec24aa4dc4e5aee2e025e51e1392c72a2500577559fae9665c6d52bd6a31a165627a7a723058206df4aa17cb4b289bbfac52d3655c910fff95d77dd8649fdf8004dbfeb1bde4020029", + "swarm_hash": "6df4aa17cb4b289bbfac52d3655c910fff95d77dd8649fdf8004dbfeb1bde402", + "gas_estimates": { + "creation": { + "codeDepositCost": "2894400", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { + "": "761", + "APPROVEANDCALL_PREFIX()": "608", + "CALL_PREFIX()": "562", + "addClaim(uint256,uint256,address,bytes,bytes,string)": "infinite", + "addKey(bytes32,uint256,uint256)": "infinite", + "approve(uint256,bool)": "infinite", + "approveAndCallGasRelayHash(address,address,uint256,bytes32,uint256,uint256,uint256,address)": "1399", + "approveAndCallGasRelayed(address,address,uint256,bytes,uint256,uint256,uint256,address,bytes)": "infinite", + "approveECDSA(uint256,bool,bytes32,uint8,bytes32,bytes32)": "infinite", + "callGasRelayHash(address,uint256,bytes32,uint256,uint256,uint256,address)": "1592", + "callGasRelayed(address,uint256,bytes,uint256,uint256,uint256,address,bytes)": "infinite", + "execute(address,uint256,bytes)": "infinite", + "executeECDSA(address,uint256,bytes,uint256,bytes32,uint8,bytes32,bytes32)": "infinite", + "getClaim(bytes32)": "infinite", + "getClaimIdsByType(uint256)": "infinite", + "getKey(bytes32,uint256)": "1165", + "getKeyPurpose(bytes32)": "infinite", + "getKeysByPurpose(uint256)": "infinite", + "getSignHash(bytes32)": "776", + "isKeyPurpose(bytes32,uint256)": "893", + "managerReset(bytes32)": "149758", + "processManagerReset(uint256)": "infinite", + "recoverKey(bytes32,bytes,uint256)": "infinite", + "removeClaim(bytes32)": "infinite", + "removeKey(bytes32,uint256)": "infinite", + "replaceKey(bytes32,bytes32,uint256)": "infinite", + "setMinimumApprovalsByKeyType(uint256,uint256)": "infinite", + "setupRecovery(address)": "infinite", + "signatureSplit(bytes,uint256)": "infinite", + "verifySignatures(uint256,bytes32,bytes)": "infinite" + }, + "internal": { + "approveAndCall(bytes32,address,address,uint256,bytes memory)": "infinite" + } + }, + "function_hashes": { + "APPROVEANDCALL_PREFIX()": "4da3ee83", + "CALL_PREFIX()": "35f894a4", + "addClaim(uint256,uint256,address,bytes,bytes,string)": "b1a34e0d", + "addKey(bytes32,uint256,uint256)": "1d381240", + "approve(uint256,bool)": "747442d3", + "approveAndCallGasRelayHash(address,address,uint256,bytes32,uint256,uint256,uint256,address)": "6e259594", + "approveAndCallGasRelayed(address,address,uint256,bytes,uint256,uint256,uint256,address,bytes)": "59f4ac61", + "approveECDSA(uint256,bool,bytes32,uint8,bytes32,bytes32)": "da2c9ae2", + "callGasRelayHash(address,uint256,bytes32,uint256,uint256,uint256,address)": "e27e2e5c", + "callGasRelayed(address,uint256,bytes,uint256,uint256,uint256,address,bytes)": "fd0dded5", + "execute(address,uint256,bytes)": "b61d27f6", + "executeECDSA(address,uint256,bytes,uint256,bytes32,uint8,bytes32,bytes32)": "e574809a", + "getClaim(bytes32)": "c9100bcb", + "getClaimIdsByType(uint256)": "262b54f5", + "getKey(bytes32,uint256)": "13fb4b8f", + "getKeyPurpose(bytes32)": "032c1a8a", + "getKeysByPurpose(uint256)": "9010f726", + "getSignHash(bytes32)": "b15aa5b7", + "isKeyPurpose(bytes32,uint256)": "5a3df791", + "managerReset(bytes32)": "d84c7c9f", + "processManagerReset(uint256)": "2c883f3c", + "recoverKey(bytes32,bytes,uint256)": "63f44b59", + "removeClaim(bytes32)": "4eee424a", + "removeKey(bytes32,uint256)": "53d413c5", + "replaceKey(bytes32,bytes32,uint256)": "640c5173", + "setMinimumApprovalsByKeyType(uint256,uint256)": "07aef43b", + "setupRecovery(address)": "83b5d133", + "signatureSplit(bytes,uint256)": "b817dcc2", + "verifySignatures(uint256,bytes32,bytes)": "94fd645b" + }, + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + } + ], + "name": "getKeyPurpose", + "outputs": [ + { + "name": "purpose", + "type": "uint256[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_purpose", + "type": "uint256" + }, + { + "name": "_minimumApprovals", + "type": "uint256" + } + ], + "name": "setMinimumApprovalsByKeyType", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_purpose", + "type": "uint256" + } + ], + "name": "getKey", + "outputs": [ + { + "name": "purpose", + "type": "uint256" + }, + { + "name": "keyType", + "type": "uint256" + }, + { + "name": "key", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_purpose", + "type": "uint256" + }, + { + "name": "_type", + "type": "uint256" + } + ], + "name": "addKey", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_claimType", + "type": "uint256" + } + ], + "name": "getClaimIdsByType", + "outputs": [ + { + "name": "claimIds", + "type": "bytes32[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_limit", + "type": "uint256" + } + ], + "name": "processManagerReset", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "CALL_PREFIX", + "outputs": [ + { + "name": "", + "type": "bytes4" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "APPROVEANDCALL_PREFIX", + "outputs": [ + { + "name": "", + "type": "bytes4" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_claimId", + "type": "bytes32" + } + ], + "name": "removeClaim", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_purpose", + "type": "uint256" + } + ], + "name": "removeKey", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_baseToken", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + }, + { + "name": "_data", + "type": "bytes" + }, + { + "name": "_nonce", + "type": "uint256" + }, + { + "name": "_gasPrice", + "type": "uint256" + }, + { + "name": "_gasLimit", + "type": "uint256" + }, + { + "name": "_gasToken", + "type": "address" + }, + { + "name": "_messageSignatures", + "type": "bytes" + } + ], + "name": "approveAndCallGasRelayed", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_purpose", + "type": "uint256" + } + ], + "name": "isKeyPurpose", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_signHash", + "type": "bytes32" + }, + { + "name": "_messageSignature", + "type": "bytes" + }, + { + "name": "_pos", + "type": "uint256" + } + ], + "name": "recoverKey", + "outputs": [ + { + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_oldKey", + "type": "bytes32" + }, + { + "name": "_newKey", + "type": "bytes32" + }, + { + "name": "_newType", + "type": "uint256" + } + ], + "name": "replaceKey", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_baseToken", + "type": "address" + }, + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + }, + { + "name": "_dataHash", + "type": "bytes32" + }, + { + "name": "_nonce", + "type": "uint256" + }, + { + "name": "_gasPrice", + "type": "uint256" + }, + { + "name": "_gasLimit", + "type": "uint256" + }, + { + "name": "_gasToken", + "type": "address" + } + ], + "name": "approveAndCallGasRelayHash", + "outputs": [ + { + "name": "_callGasRelayHash", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_id", + "type": "uint256" + }, + { + "name": "_approval", + "type": "bool" + } + ], + "name": "approve", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_recoveryContract", + "type": "address" + } + ], + "name": "setupRecovery", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_purpose", + "type": "uint256" + } + ], + "name": "getKeysByPurpose", + "outputs": [ + { + "name": "", + "type": "bytes32[]" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_requiredKey", + "type": "uint256" + }, + { + "name": "_signHash", + "type": "bytes32" + }, + { + "name": "_messageSignatures", + "type": "bytes" + } + ], + "name": "verifySignatures", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_hash", + "type": "bytes32" + } + ], + "name": "getSignHash", + "outputs": [ + { + "name": "signHash", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_claimType", + "type": "uint256" + }, + { + "name": "_scheme", + "type": "uint256" + }, + { + "name": "_issuer", + "type": "address" + }, + { + "name": "_signature", + "type": "bytes" + }, + { + "name": "_data", + "type": "bytes" + }, + { + "name": "_uri", + "type": "string" + } + ], + "name": "addClaim", + "outputs": [ + { + "name": "claimHash", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + }, + { + "name": "_data", + "type": "bytes" + } + ], + "name": "execute", + "outputs": [ + { + "name": "executionId", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_signatures", + "type": "bytes" + }, + { + "name": "_pos", + "type": "uint256" + } + ], + "name": "signatureSplit", + "outputs": [ + { + "name": "v", + "type": "uint8" + }, + { + "name": "r", + "type": "bytes32" + }, + { + "name": "s", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_claimId", + "type": "bytes32" + } + ], + "name": "getClaim", + "outputs": [ + { + "name": "claimType", + "type": "uint256" + }, + { + "name": "scheme", + "type": "uint256" + }, + { + "name": "issuer", + "type": "address" + }, + { + "name": "signature", + "type": "bytes" + }, + { + "name": "data", + "type": "bytes" + }, + { + "name": "uri", + "type": "string" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_newKey", + "type": "bytes32" + } + ], + "name": "managerReset", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_id", + "type": "uint256" + }, + { + "name": "_approval", + "type": "bool" + }, + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_v", + "type": "uint8" + }, + { + "name": "_r", + "type": "bytes32" + }, + { + "name": "_s", + "type": "bytes32" + } + ], + "name": "approveECDSA", + "outputs": [ + { + "name": "success", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + }, + { + "name": "_dataHash", + "type": "bytes32" + }, + { + "name": "_nonce", + "type": "uint256" + }, + { + "name": "_gasPrice", + "type": "uint256" + }, + { + "name": "_gasLimit", + "type": "uint256" + }, + { + "name": "_gasToken", + "type": "address" + } + ], + "name": "callGasRelayHash", + "outputs": [ + { + "name": "_callGasRelayHash", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + }, + { + "name": "_data", + "type": "bytes" + }, + { + "name": "_nonce", + "type": "uint256" + }, + { + "name": "_key", + "type": "bytes32" + }, + { + "name": "_v", + "type": "uint8" + }, + { + "name": "_r", + "type": "bytes32" + }, + { + "name": "_s", + "type": "bytes32" + } + ], + "name": "executeECDSA", + "outputs": [ + { + "name": "executionId", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_value", + "type": "uint256" + }, + { + "name": "_data", + "type": "bytes" + }, + { + "name": "_nonce", + "type": "uint256" + }, + { + "name": "_gasPrice", + "type": "uint256" + }, + { + "name": "_gasLimit", + "type": "uint256" + }, + { + "name": "_gasToken", + "type": "address" + }, + { + "name": "_messageSignatures", + "type": "bytes" + } + ], + "name": "callGasRelayed", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "name": "signHash", + "type": "bytes32" + }, + { + "indexed": false, + "name": "success", + "type": "bool" + } + ], + "name": "ExecutedGasRelayed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "claimRequestId", + "type": "bytes32" + }, + { + "indexed": true, + "name": "claimType", + "type": "uint256" + }, + { + "indexed": false, + "name": "scheme", + "type": "uint256" + }, + { + "indexed": true, + "name": "issuer", + "type": "address" + }, + { + "indexed": false, + "name": "signature", + "type": "bytes" + }, + { + "indexed": false, + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "name": "uri", + "type": "string" + } + ], + "name": "ClaimRequested", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": true, + "name": "claimType", + "type": "uint256" + }, + { + "indexed": false, + "name": "scheme", + "type": "uint256" + }, + { + "indexed": true, + "name": "issuer", + "type": "address" + }, + { + "indexed": false, + "name": "signature", + "type": "bytes" + }, + { + "indexed": false, + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "name": "uri", + "type": "string" + } + ], + "name": "ClaimAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": true, + "name": "claimType", + "type": "uint256" + }, + { + "indexed": false, + "name": "scheme", + "type": "uint256" + }, + { + "indexed": true, + "name": "issuer", + "type": "address" + }, + { + "indexed": false, + "name": "signature", + "type": "bytes" + }, + { + "indexed": false, + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "name": "uri", + "type": "string" + } + ], + "name": "ClaimRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "claimId", + "type": "bytes32" + }, + { + "indexed": true, + "name": "claimType", + "type": "uint256" + }, + { + "indexed": false, + "name": "scheme", + "type": "uint256" + }, + { + "indexed": true, + "name": "issuer", + "type": "address" + }, + { + "indexed": false, + "name": "signature", + "type": "bytes" + }, + { + "indexed": false, + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "name": "uri", + "type": "string" + } + ], + "name": "ClaimChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "name": "purpose", + "type": "uint256" + }, + { + "indexed": true, + "name": "keyType", + "type": "uint256" + } + ], + "name": "KeyAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "key", + "type": "bytes32" + }, + { + "indexed": true, + "name": "purpose", + "type": "uint256" + }, + { + "indexed": true, + "name": "keyType", + "type": "uint256" + } + ], + "name": "KeyRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "executionId", + "type": "uint256" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": true, + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "name": "data", + "type": "bytes" + } + ], + "name": "ExecutionRequested", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "executionId", + "type": "uint256" + }, + { + "indexed": true, + "name": "to", + "type": "address" + }, + { + "indexed": true, + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "name": "data", + "type": "bytes" + } + ], + "name": "Executed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "executionId", + "type": "uint256" + }, + { + "indexed": false, + "name": "approved", + "type": "bool" + } + ], + "name": "Approved", + "type": "event" + } + ] +} diff --git a/app/gas-relayer/abi/SNTController.json b/app/gas-relayer/abi/SNTController.json index 0979937..aba29cf 100644 --- a/app/gas-relayer/abi/SNTController.json +++ b/app/gas-relayer/abi/SNTController.json @@ -1 +1,602 @@ -[{"constant":false,"inputs":[{"name":"a","type":"address"},{"name":"b","type":"bytes"},{"name":"c","type":"uint256"},{"name":"d","type":"uint256"},{"name":"e","type":"uint256"},{"name":"f","type":"bytes"}],"name":"executeGasRelayed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"address"},{"name":"b","type":"uint256"},{"name":"c","type":"uint256"},{"name":"d","type":"uint256"},{"name":"f","type":"bytes"}],"name":"transferSNT","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[],"name":"Debug","type":"event"}] \ No newline at end of file +{ + "contract_name": "SNTController", + "code": "608060405234801561001057600080fd5b506040516040806112a183398101604052805160209091015160008054600160a060020a03938416338516600160a060020a031992831617821617909155600280549390921692169190911790556112348061006d6000396000f30060806040526004361061010e5763ffffffff60e060020a6000350416630363e73d8114610113578063060eb520146101485780630c1f1f251461017957806331c128b1146101b55780633cebb823146102295780634a3931491461024c5780635a976cea14610276578063754e6ab0146102bd57806379ba509714610302578063856f5fbb146103175780638da5cb5b1461032c578063907920c714610341578063916b651114610362578063a6f9dae11461039b578063b15aa5b7146103bc578063c655d7aa146103d4578063d4ee1d9014610432578063da682aeb1461024c578063df8de3e714610447578063efcd1cd914610468578063f45066cc146104e3578063f48c305414610509575b600080fd5b34801561011f57600080fd5b50610134600160a060020a036004351661051d565b604080519115158252519081900360200190f35b34801561015457600080fd5b5061015d610532565b60408051600160a060020a039092168252519081900360200190f35b34801561018557600080fd5b506101a3600160a060020a0360043516602435604435606435610541565b60408051918252519081900360200190f35b3480156101c157600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101a3958335600160a060020a0316953695604494919390910191908190840183828082843750949750508435955050506020830135926040013591506106099050565b34801561023557600080fd5b5061024a600160a060020a0360043516610746565b005b34801561025857600080fd5b50610134600160a060020a0360043581169060243516604435610817565b34801561028257600080fd5b5061028b610820565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199092168252519081900360200190f35b3480156102c957600080fd5b5061024a60048035600160a060020a0316906024803580820192908101359160443591606435916084359160a43591820191013561087b565b34801561030e57600080fd5b5061024a610a82565b34801561032357600080fd5b5061028b610acb565b34801561033857600080fd5b5061015d610b26565b34801561034d57600080fd5b506101a3600160a060020a0360043516610b35565b34801561036e57600080fd5b5061024a60048035600160a060020a03169060248035916044359160643591608435918201910135610b47565b3480156103a757600080fd5b5061024a600160a060020a0360043516610d2e565b3480156103c857600080fd5b506101a3600435610d78565b3480156103e057600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261015d958335953695604494919390910191908190840183828082843750949750610db49650505050505050565b34801561043e57600080fd5b5061015d610e3b565b34801561045357600080fd5b5061024a600160a060020a0360043516610e4a565b34801561047457600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526104c194369492936024939284019190819084018382808284375094975061114f9650505050505050565b6040805160ff9094168452602084019290925282820152519081900360600190f35b3480156104ef57600080fd5b5061024a600160a060020a03600435166024351515611187565b610134600160a060020a0360043516611202565b60046020526000908152604090205460ff1681565b600254600160a060020a031681565b604080517f7472616e73666572534e5428616464726573732c75696e743235362c75696e7481527f3235362c75696e743235362900000000000000000000000000000000000000006020820152815190819003602c90810182206c01000000000000000000000000600160a060020a03308116820285527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1990921660148501529716909602601882015294850193909352604c840191909152606c8301525190819003608c01902090565b60003060405180807f6578656375746547617352656c6179656428616464726573732c62797465732c81526020017f75696e743235362c75696e743235362c75696e743235362900000000000000008152506038019050604051809103902087876040518082805190602001908083835b602083106106995780518252601f19909201916020918201910161067a565b5181516000196020949094036101000a93909301928316921916919091179052604080519390910183900383206c01000000000000000000000000600160a060020a03998a16810285527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199098166014850152959097169095026018820152602c8101939093525050604c81019690965250606c85019390935250608c830152519081900360ac01902092915050565b60005433600160a060020a0390811691161461076157600080fd5b600254604080517f3cebb823000000000000000000000000000000000000000000000000000000008152600160a060020a03848116600483015291519190921691633cebb82391602480830192600092919082900301818387803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b5050604051600160a060020a03841692507f027c3e080ed9215f564a9455a666f7e459b3edc0bb6e02a1bf842fde4d0ccfc19150600090a250565b60019392505050565b604080517f7472616e73666572534e5428616464726573732c75696e743235362c75696e7481527f3235362c75696e743235362900000000000000000000000000000000000000006020820152905190819003602c01902081565b6000806000805a93508684101561089157600080fd5b6108d86108d38d8d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508c8c8c610609565b610d78565b92506109148387878080601f01602080910402602001604051908101604052809392919081815260200183838082843750610db4945050505050565b600160a060020a038116600090815260036020526040902054909250891461093b57600080fd5b600160a060020a03808316600090815260036020526040908190208054600101905551908d16908c908c90808383808284378201915050925050506000604051808303816000865af16040805187815282151560208201528151929550600160a060020a03871694507fc1f408600ef5cfb30112e2dab8eb9aae3e7f0a99ead8a5ed9c0ffeaea7d9ed2e93508290030190a2600254600160a060020a03166323b872dd83338b5a6040805160e060020a63ffffffff8816028152600160a060020a039586166004820152939094166024840152890361520801026044820152905160648083019260209291908290030181600087803b158015610a3d57600080fd5b505af1158015610a51573d6000803e3d6000fd5b505050506040513d6020811015610a6757600080fd5b50511515610a7457600080fd5b505050505050505050505050565b60015433600160a060020a0390811691161415610ac9576001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b604080517f6578656375746547617352656c6179656428616464726573732c62797465732c81527f75696e743235362c75696e743235362c75696e743235362900000000000000006020820152905190819003603801902081565b600054600160a060020a031681565b60036020526000908152604090205481565b60008060005a9250610b5e6108d38a8a8a8a610541565b9150610b9a8286868080601f01602080910402602001604051908101604052809392919081815260200183838082843750610db4945050505050565b600160a060020a0381166000908152600360205260409020549091508714610bc157600080fd5b600160a060020a0380821660008181526003602090815260408083208054600101905560025481517f23b872dd00000000000000000000000000000000000000000000000000000000815260048101959095528e86166024860152604485018e905290519416936323b872dd93606480820194918390030190829087803b158015610c4b57600080fd5b505af1158015610c5f573d6000803e3d6000fd5b505050506040513d6020811015610c7557600080fd5b505115610d2357600254600160a060020a03166323b872dd8233895a6040805160e060020a63ffffffff8816028152600160a060020a039586166004820152939094166024840152880361520801026044820152905160648083019260209291908290030181600087803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b505050506040513d6020811015610d1657600080fd5b50511515610d2357600080fd5b505050505050505050565b60005433600160a060020a03908116911614610d4957600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604080517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c8101929092525190819003603c01902090565b600080600080610dc38561114f565b60408051600080825260208083018085528d905260ff8716838501526060830186905260808301859052925195985093965091945060019360a0808401949293601f19830193908390039091019190865af1158015610e26573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b600154600160a060020a031681565b60008054819033600160a060020a03908116911614610e6857600080fd5b600254604080517ff77c47910000000000000000000000000000000000000000000000000000000081529051600160a060020a0330811693169163f77c47919160048083019260209291908290030181600087803b158015610ec957600080fd5b505af1158015610edd573d6000803e3d6000fd5b505050506040513d6020811015610ef357600080fd5b5051600160a060020a03161415610f8457600254604080517fdf8de3e7000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301529151919092169163df8de3e791602480830192600092919082900301818387803b158015610f6b57600080fd5b505af1158015610f7f573d6000803e3d6000fd5b505050505b600160a060020a0383161515610fd95760008054604051600160a060020a0391821692309092163180156108fc0292909190818181858888f19350505050158015610fd3573d6000803e3d6000fd5b5061114a565b82915081600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561103757600080fd5b505af115801561104b573d6000803e3d6000fd5b505050506040513d602081101561106157600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b1580156110d757600080fd5b505af11580156110eb573d6000803e3d6000fd5b505050506040513d602081101561110157600080fd5b5050600054604080518381529051600160a060020a03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a35b505050565b60208101516040820151604183015160ff169190601b83148061117557508260ff16601c145b151561118057600080fd5b9193909250565b60005433600160a060020a039081169116146111a257600080fd5b600160a060020a038216600081815260046020908152604091829020805460ff1916851515908117909155825190815291517f0aaf7ec976fca847be70b03c506bfbf13dfa5742df9ef93a62e29c90d6a82d2a9281900390910190a25050565b506000905600a165627a7a7230582092ed34e59cb2eb2ca45306e8611782081534da2068d5db48970ad41dd5c3538c0029", + "runtime_bytecode": "60806040526004361061010e5763ffffffff60e060020a6000350416630363e73d8114610113578063060eb520146101485780630c1f1f251461017957806331c128b1146101b55780633cebb823146102295780634a3931491461024c5780635a976cea14610276578063754e6ab0146102bd57806379ba509714610302578063856f5fbb146103175780638da5cb5b1461032c578063907920c714610341578063916b651114610362578063a6f9dae11461039b578063b15aa5b7146103bc578063c655d7aa146103d4578063d4ee1d9014610432578063da682aeb1461024c578063df8de3e714610447578063efcd1cd914610468578063f45066cc146104e3578063f48c305414610509575b600080fd5b34801561011f57600080fd5b50610134600160a060020a036004351661051d565b604080519115158252519081900360200190f35b34801561015457600080fd5b5061015d610532565b60408051600160a060020a039092168252519081900360200190f35b34801561018557600080fd5b506101a3600160a060020a0360043516602435604435606435610541565b60408051918252519081900360200190f35b3480156101c157600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101a3958335600160a060020a0316953695604494919390910191908190840183828082843750949750508435955050506020830135926040013591506106099050565b34801561023557600080fd5b5061024a600160a060020a0360043516610746565b005b34801561025857600080fd5b50610134600160a060020a0360043581169060243516604435610817565b34801561028257600080fd5b5061028b610820565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199092168252519081900360200190f35b3480156102c957600080fd5b5061024a60048035600160a060020a0316906024803580820192908101359160443591606435916084359160a43591820191013561087b565b34801561030e57600080fd5b5061024a610a82565b34801561032357600080fd5b5061028b610acb565b34801561033857600080fd5b5061015d610b26565b34801561034d57600080fd5b506101a3600160a060020a0360043516610b35565b34801561036e57600080fd5b5061024a60048035600160a060020a03169060248035916044359160643591608435918201910135610b47565b3480156103a757600080fd5b5061024a600160a060020a0360043516610d2e565b3480156103c857600080fd5b506101a3600435610d78565b3480156103e057600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261015d958335953695604494919390910191908190840183828082843750949750610db49650505050505050565b34801561043e57600080fd5b5061015d610e3b565b34801561045357600080fd5b5061024a600160a060020a0360043516610e4a565b34801561047457600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526104c194369492936024939284019190819084018382808284375094975061114f9650505050505050565b6040805160ff9094168452602084019290925282820152519081900360600190f35b3480156104ef57600080fd5b5061024a600160a060020a03600435166024351515611187565b610134600160a060020a0360043516611202565b60046020526000908152604090205460ff1681565b600254600160a060020a031681565b604080517f7472616e73666572534e5428616464726573732c75696e743235362c75696e7481527f3235362c75696e743235362900000000000000000000000000000000000000006020820152815190819003602c90810182206c01000000000000000000000000600160a060020a03308116820285527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1990921660148501529716909602601882015294850193909352604c840191909152606c8301525190819003608c01902090565b60003060405180807f6578656375746547617352656c6179656428616464726573732c62797465732c81526020017f75696e743235362c75696e743235362c75696e743235362900000000000000008152506038019050604051809103902087876040518082805190602001908083835b602083106106995780518252601f19909201916020918201910161067a565b5181516000196020949094036101000a93909301928316921916919091179052604080519390910183900383206c01000000000000000000000000600160a060020a03998a16810285527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199098166014850152959097169095026018820152602c8101939093525050604c81019690965250606c85019390935250608c830152519081900360ac01902092915050565b60005433600160a060020a0390811691161461076157600080fd5b600254604080517f3cebb823000000000000000000000000000000000000000000000000000000008152600160a060020a03848116600483015291519190921691633cebb82391602480830192600092919082900301818387803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b5050604051600160a060020a03841692507f027c3e080ed9215f564a9455a666f7e459b3edc0bb6e02a1bf842fde4d0ccfc19150600090a250565b60019392505050565b604080517f7472616e73666572534e5428616464726573732c75696e743235362c75696e7481527f3235362c75696e743235362900000000000000000000000000000000000000006020820152905190819003602c01902081565b6000806000805a93508684101561089157600080fd5b6108d86108d38d8d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508c8c8c610609565b610d78565b92506109148387878080601f01602080910402602001604051908101604052809392919081815260200183838082843750610db4945050505050565b600160a060020a038116600090815260036020526040902054909250891461093b57600080fd5b600160a060020a03808316600090815260036020526040908190208054600101905551908d16908c908c90808383808284378201915050925050506000604051808303816000865af16040805187815282151560208201528151929550600160a060020a03871694507fc1f408600ef5cfb30112e2dab8eb9aae3e7f0a99ead8a5ed9c0ffeaea7d9ed2e93508290030190a2600254600160a060020a03166323b872dd83338b5a6040805160e060020a63ffffffff8816028152600160a060020a039586166004820152939094166024840152890361520801026044820152905160648083019260209291908290030181600087803b158015610a3d57600080fd5b505af1158015610a51573d6000803e3d6000fd5b505050506040513d6020811015610a6757600080fd5b50511515610a7457600080fd5b505050505050505050505050565b60015433600160a060020a0390811691161415610ac9576001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b604080517f6578656375746547617352656c6179656428616464726573732c62797465732c81527f75696e743235362c75696e743235362c75696e743235362900000000000000006020820152905190819003603801902081565b600054600160a060020a031681565b60036020526000908152604090205481565b60008060005a9250610b5e6108d38a8a8a8a610541565b9150610b9a8286868080601f01602080910402602001604051908101604052809392919081815260200183838082843750610db4945050505050565b600160a060020a0381166000908152600360205260409020549091508714610bc157600080fd5b600160a060020a0380821660008181526003602090815260408083208054600101905560025481517f23b872dd00000000000000000000000000000000000000000000000000000000815260048101959095528e86166024860152604485018e905290519416936323b872dd93606480820194918390030190829087803b158015610c4b57600080fd5b505af1158015610c5f573d6000803e3d6000fd5b505050506040513d6020811015610c7557600080fd5b505115610d2357600254600160a060020a03166323b872dd8233895a6040805160e060020a63ffffffff8816028152600160a060020a039586166004820152939094166024840152880361520801026044820152905160648083019260209291908290030181600087803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b505050506040513d6020811015610d1657600080fd5b50511515610d2357600080fd5b505050505050505050565b60005433600160a060020a03908116911614610d4957600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604080517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c8101929092525190819003603c01902090565b600080600080610dc38561114f565b60408051600080825260208083018085528d905260ff8716838501526060830186905260808301859052925195985093965091945060019360a0808401949293601f19830193908390039091019190865af1158015610e26573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b600154600160a060020a031681565b60008054819033600160a060020a03908116911614610e6857600080fd5b600254604080517ff77c47910000000000000000000000000000000000000000000000000000000081529051600160a060020a0330811693169163f77c47919160048083019260209291908290030181600087803b158015610ec957600080fd5b505af1158015610edd573d6000803e3d6000fd5b505050506040513d6020811015610ef357600080fd5b5051600160a060020a03161415610f8457600254604080517fdf8de3e7000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301529151919092169163df8de3e791602480830192600092919082900301818387803b158015610f6b57600080fd5b505af1158015610f7f573d6000803e3d6000fd5b505050505b600160a060020a0383161515610fd95760008054604051600160a060020a0391821692309092163180156108fc0292909190818181858888f19350505050158015610fd3573d6000803e3d6000fd5b5061114a565b82915081600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561103757600080fd5b505af115801561104b573d6000803e3d6000fd5b505050506040513d602081101561106157600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b1580156110d757600080fd5b505af11580156110eb573d6000803e3d6000fd5b505050506040513d602081101561110157600080fd5b5050600054604080518381529051600160a060020a03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a35b505050565b60208101516040820151604183015160ff169190601b83148061117557508260ff16601c145b151561118057600080fd5b9193909250565b60005433600160a060020a039081169116146111a257600080fd5b600160a060020a038216600081815260046020908152604091829020805460ff1916851515908117909155825190815291517f0aaf7ec976fca847be70b03c506bfbf13dfa5742df9ef93a62e29c90d6a82d2a9281900390910190a25050565b506000905600a165627a7a7230582092ed34e59cb2eb2ca45306e8611782081534da2068d5db48970ad41dd5c3538c0029", + "real_runtime_bytecode": "60806040526004361061010e5763ffffffff60e060020a6000350416630363e73d8114610113578063060eb520146101485780630c1f1f251461017957806331c128b1146101b55780633cebb823146102295780634a3931491461024c5780635a976cea14610276578063754e6ab0146102bd57806379ba509714610302578063856f5fbb146103175780638da5cb5b1461032c578063907920c714610341578063916b651114610362578063a6f9dae11461039b578063b15aa5b7146103bc578063c655d7aa146103d4578063d4ee1d9014610432578063da682aeb1461024c578063df8de3e714610447578063efcd1cd914610468578063f45066cc146104e3578063f48c305414610509575b600080fd5b34801561011f57600080fd5b50610134600160a060020a036004351661051d565b604080519115158252519081900360200190f35b34801561015457600080fd5b5061015d610532565b60408051600160a060020a039092168252519081900360200190f35b34801561018557600080fd5b506101a3600160a060020a0360043516602435604435606435610541565b60408051918252519081900360200190f35b3480156101c157600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526101a3958335600160a060020a0316953695604494919390910191908190840183828082843750949750508435955050506020830135926040013591506106099050565b34801561023557600080fd5b5061024a600160a060020a0360043516610746565b005b34801561025857600080fd5b50610134600160a060020a0360043581169060243516604435610817565b34801561028257600080fd5b5061028b610820565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199092168252519081900360200190f35b3480156102c957600080fd5b5061024a60048035600160a060020a0316906024803580820192908101359160443591606435916084359160a43591820191013561087b565b34801561030e57600080fd5b5061024a610a82565b34801561032357600080fd5b5061028b610acb565b34801561033857600080fd5b5061015d610b26565b34801561034d57600080fd5b506101a3600160a060020a0360043516610b35565b34801561036e57600080fd5b5061024a60048035600160a060020a03169060248035916044359160643591608435918201910135610b47565b3480156103a757600080fd5b5061024a600160a060020a0360043516610d2e565b3480156103c857600080fd5b506101a3600435610d78565b3480156103e057600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261015d958335953695604494919390910191908190840183828082843750949750610db49650505050505050565b34801561043e57600080fd5b5061015d610e3b565b34801561045357600080fd5b5061024a600160a060020a0360043516610e4a565b34801561047457600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526104c194369492936024939284019190819084018382808284375094975061114f9650505050505050565b6040805160ff9094168452602084019290925282820152519081900360600190f35b3480156104ef57600080fd5b5061024a600160a060020a03600435166024351515611187565b610134600160a060020a0360043516611202565b60046020526000908152604090205460ff1681565b600254600160a060020a031681565b604080517f7472616e73666572534e5428616464726573732c75696e743235362c75696e7481527f3235362c75696e743235362900000000000000000000000000000000000000006020820152815190819003602c90810182206c01000000000000000000000000600160a060020a03308116820285527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1990921660148501529716909602601882015294850193909352604c840191909152606c8301525190819003608c01902090565b60003060405180807f6578656375746547617352656c6179656428616464726573732c62797465732c81526020017f75696e743235362c75696e743235362c75696e743235362900000000000000008152506038019050604051809103902087876040518082805190602001908083835b602083106106995780518252601f19909201916020918201910161067a565b5181516000196020949094036101000a93909301928316921916919091179052604080519390910183900383206c01000000000000000000000000600160a060020a03998a16810285527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199098166014850152959097169095026018820152602c8101939093525050604c81019690965250606c85019390935250608c830152519081900360ac01902092915050565b60005433600160a060020a0390811691161461076157600080fd5b600254604080517f3cebb823000000000000000000000000000000000000000000000000000000008152600160a060020a03848116600483015291519190921691633cebb82391602480830192600092919082900301818387803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b5050604051600160a060020a03841692507f027c3e080ed9215f564a9455a666f7e459b3edc0bb6e02a1bf842fde4d0ccfc19150600090a250565b60019392505050565b604080517f7472616e73666572534e5428616464726573732c75696e743235362c75696e7481527f3235362c75696e743235362900000000000000000000000000000000000000006020820152905190819003602c01902081565b6000806000805a93508684101561089157600080fd5b6108d86108d38d8d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508c8c8c610609565b610d78565b92506109148387878080601f01602080910402602001604051908101604052809392919081815260200183838082843750610db4945050505050565b600160a060020a038116600090815260036020526040902054909250891461093b57600080fd5b600160a060020a03808316600090815260036020526040908190208054600101905551908d16908c908c90808383808284378201915050925050506000604051808303816000865af16040805187815282151560208201528151929550600160a060020a03871694507fc1f408600ef5cfb30112e2dab8eb9aae3e7f0a99ead8a5ed9c0ffeaea7d9ed2e93508290030190a2600254600160a060020a03166323b872dd83338b5a6040805160e060020a63ffffffff8816028152600160a060020a039586166004820152939094166024840152890361520801026044820152905160648083019260209291908290030181600087803b158015610a3d57600080fd5b505af1158015610a51573d6000803e3d6000fd5b505050506040513d6020811015610a6757600080fd5b50511515610a7457600080fd5b505050505050505050505050565b60015433600160a060020a0390811691161415610ac9576001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b604080517f6578656375746547617352656c6179656428616464726573732c62797465732c81527f75696e743235362c75696e743235362c75696e743235362900000000000000006020820152905190819003603801902081565b600054600160a060020a031681565b60036020526000908152604090205481565b60008060005a9250610b5e6108d38a8a8a8a610541565b9150610b9a8286868080601f01602080910402602001604051908101604052809392919081815260200183838082843750610db4945050505050565b600160a060020a0381166000908152600360205260409020549091508714610bc157600080fd5b600160a060020a0380821660008181526003602090815260408083208054600101905560025481517f23b872dd00000000000000000000000000000000000000000000000000000000815260048101959095528e86166024860152604485018e905290519416936323b872dd93606480820194918390030190829087803b158015610c4b57600080fd5b505af1158015610c5f573d6000803e3d6000fd5b505050506040513d6020811015610c7557600080fd5b505115610d2357600254600160a060020a03166323b872dd8233895a6040805160e060020a63ffffffff8816028152600160a060020a039586166004820152939094166024840152880361520801026044820152905160648083019260209291908290030181600087803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b505050506040513d6020811015610d1657600080fd5b50511515610d2357600080fd5b505050505050505050565b60005433600160a060020a03908116911614610d4957600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604080517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c8101929092525190819003603c01902090565b600080600080610dc38561114f565b60408051600080825260208083018085528d905260ff8716838501526060830186905260808301859052925195985093965091945060019360a0808401949293601f19830193908390039091019190865af1158015610e26573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b600154600160a060020a031681565b60008054819033600160a060020a03908116911614610e6857600080fd5b600254604080517ff77c47910000000000000000000000000000000000000000000000000000000081529051600160a060020a0330811693169163f77c47919160048083019260209291908290030181600087803b158015610ec957600080fd5b505af1158015610edd573d6000803e3d6000fd5b505050506040513d6020811015610ef357600080fd5b5051600160a060020a03161415610f8457600254604080517fdf8de3e7000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301529151919092169163df8de3e791602480830192600092919082900301818387803b158015610f6b57600080fd5b505af1158015610f7f573d6000803e3d6000fd5b505050505b600160a060020a0383161515610fd95760008054604051600160a060020a0391821692309092163180156108fc0292909190818181858888f19350505050158015610fd3573d6000803e3d6000fd5b5061114a565b82915081600160a060020a03166370a08231306040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561103757600080fd5b505af115801561104b573d6000803e3d6000fd5b505050506040513d602081101561106157600080fd5b505160008054604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201526024810185905290519394509085169263a9059cbb92604480840193602093929083900390910190829087803b1580156110d757600080fd5b505af11580156110eb573d6000803e3d6000fd5b505050506040513d602081101561110157600080fd5b5050600054604080518381529051600160a060020a03928316928616917ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c919081900360200190a35b505050565b60208101516040820151604183015160ff169190601b83148061117557508260ff16601c145b151561118057600080fd5b9193909250565b60005433600160a060020a039081169116146111a257600080fd5b600160a060020a038216600081815260046020908152604091829020805460ff1916851515908117909155825190815291517f0aaf7ec976fca847be70b03c506bfbf13dfa5742df9ef93a62e29c90d6a82d2a9281900390910190a25050565b506000905600a165627a7a7230582092ed34e59cb2eb2ca45306e8611782081534da2068d5db48970ad41dd5c3538c0029", + "swarm_hash": "92ed34e59cb2eb2ca45306e8611782081534da2068d5db48970ad41dd5c3538c", + "gas_estimates": { + "creation": { + "codeDepositCost": "932000", + "executionCost": "41664", + "totalCost": "973664" + }, + "external": { + "EXECUTE_PREFIX()": "559", + "TRANSFER_PREFIX()": "493", + "acceptOwnership()": "21195", + "allowPublicExecution(address)": "606", + "changeController(address)": "infinite", + "changeOwner(address)": "21183", + "claimTokens(address)": "infinite", + "enablePublicExecution(address,bool)": "22869", + "executeGasRelayed(address,bytes,uint256,uint256,uint256,bytes)": "infinite", + "getExecuteGasRelayedHash(address,bytes,uint256,uint256,uint256)": "infinite", + "getSignHash(bytes32)": "666", + "getTransferSNTHash(address,uint256,uint256,uint256)": "798", + "newOwner()": "952", + "onApprove(address,address,uint256)": "738", + "onTransfer(address,address,uint256)": "474", + "owner()": "820", + "proxyPayment(address)": "774", + "recoverAddress(bytes32,bytes)": "infinite", + "signNonce(address)": "836", + "signatureSplit(bytes)": "infinite", + "snt()": "622", + "transferSNT(address,uint256,uint256,uint256,bytes)": "infinite" + } + }, + "function_hashes": { + "EXECUTE_PREFIX()": "856f5fbb", + "TRANSFER_PREFIX()": "5a976cea", + "acceptOwnership()": "79ba5097", + "allowPublicExecution(address)": "0363e73d", + "changeController(address)": "3cebb823", + "changeOwner(address)": "a6f9dae1", + "claimTokens(address)": "df8de3e7", + "enablePublicExecution(address,bool)": "f45066cc", + "executeGasRelayed(address,bytes,uint256,uint256,uint256,bytes)": "754e6ab0", + "getExecuteGasRelayedHash(address,bytes,uint256,uint256,uint256)": "31c128b1", + "getSignHash(bytes32)": "b15aa5b7", + "getTransferSNTHash(address,uint256,uint256,uint256)": "0c1f1f25", + "newOwner()": "d4ee1d90", + "onApprove(address,address,uint256)": "da682aeb", + "onTransfer(address,address,uint256)": "4a393149", + "owner()": "8da5cb5b", + "proxyPayment(address)": "f48c3054", + "recoverAddress(bytes32,bytes)": "c655d7aa", + "signNonce(address)": "907920c7", + "signatureSplit(bytes)": "efcd1cd9", + "snt()": "060eb520", + "transferSNT(address,uint256,uint256,uint256,bytes)": "916b6511" + }, + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "allowPublicExecution", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "snt", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_amount", + "type": "uint256" + }, + { + "name": "_nonce", + "type": "uint256" + }, + { + "name": "_gasPrice", + "type": "uint256" + } + ], + "name": "getTransferSNTHash", + "outputs": [ + { + "name": "txHash", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_allowedContract", + "type": "address" + }, + { + "name": "_data", + "type": "bytes" + }, + { + "name": "_nonce", + "type": "uint256" + }, + { + "name": "_gasPrice", + "type": "uint256" + }, + { + "name": "_gasMinimal", + "type": "uint256" + } + ], + "name": "getExecuteGasRelayedHash", + "outputs": [ + { + "name": "execHash", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_newController", + "type": "address" + } + ], + "name": "changeController", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "", + "type": "address" + }, + { + "name": "", + "type": "address" + }, + { + "name": "", + "type": "uint256" + } + ], + "name": "onTransfer", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "TRANSFER_PREFIX", + "outputs": [ + { + "name": "", + "type": "bytes4" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_allowedContract", + "type": "address" + }, + { + "name": "_data", + "type": "bytes" + }, + { + "name": "_nonce", + "type": "uint256" + }, + { + "name": "_gasPrice", + "type": "uint256" + }, + { + "name": "_gasMinimal", + "type": "uint256" + }, + { + "name": "_signature", + "type": "bytes" + } + ], + "name": "executeGasRelayed", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "EXECUTE_PREFIX", + "outputs": [ + { + "name": "", + "type": "bytes4" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "owner", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "signNonce", + "outputs": [ + { + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_to", + "type": "address" + }, + { + "name": "_amount", + "type": "uint256" + }, + { + "name": "_nonce", + "type": "uint256" + }, + { + "name": "_gasPrice", + "type": "uint256" + }, + { + "name": "_signature", + "type": "bytes" + } + ], + "name": "transferSNT", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_newOwner", + "type": "address" + } + ], + "name": "changeOwner", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_hash", + "type": "bytes32" + } + ], + "name": "getSignHash", + "outputs": [ + { + "name": "signHash", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_signHash", + "type": "bytes32" + }, + { + "name": "_messageSignature", + "type": "bytes" + } + ], + "name": "recoverAddress", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "newOwner", + "outputs": [ + { + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "", + "type": "address" + }, + { + "name": "", + "type": "address" + }, + { + "name": "", + "type": "uint256" + } + ], + "name": "onApprove", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_token", + "type": "address" + } + ], + "name": "claimTokens", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "_signature", + "type": "bytes" + } + ], + "name": "signatureSplit", + "outputs": [ + { + "name": "v", + "type": "uint8" + }, + { + "name": "r", + "type": "bytes32" + }, + { + "name": "s", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "pure", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "_contract", + "type": "address" + }, + { + "name": "_enable", + "type": "bool" + } + ], + "name": "enablePublicExecution", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "", + "type": "address" + } + ], + "name": "proxyPayment", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "name": "_owner", + "type": "address" + }, + { + "name": "_snt", + "type": "address" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "contractAddress", + "type": "address" + }, + { + "indexed": false, + "name": "enabled", + "type": "bool" + } + ], + "name": "PublicExecutionEnabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "msgSigner", + "type": "address" + }, + { + "indexed": false, + "name": "signedHash", + "type": "bytes32" + }, + { + "indexed": false, + "name": "executed", + "type": "bool" + } + ], + "name": "GasRelayedExecution", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "_token", + "type": "address" + }, + { + "indexed": true, + "name": "_controller", + "type": "address" + }, + { + "indexed": false, + "name": "_amount", + "type": "uint256" + } + ], + "name": "ClaimedTokens", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "name": "_newController", + "type": "address" + } + ], + "name": "ControllerChanged", + "type": "event" + } + ] + } + \ No newline at end of file diff --git a/app/gas-relayer/config/config.json b/app/gas-relayer/config/config.json index e6fc8bb..0070659 100644 --- a/app/gas-relayer/config/config.json +++ b/app/gas-relayer/config/config.json @@ -30,9 +30,10 @@ "contracts":{ "IdentityGasRelay": { + "abiFile": "../abi/IdentityGasRelay.json", "isIdentity": true, "factoryAddress": "0x18f71378f4735b35e01eb71afcc66df090eccea7", - "abiFile": "../abi/IdentityGasRelay.json", + "kernelVerification": "isKernel(address _addr)", "allowedFunctions": [ { "function": "approveAndCallGasRelayed(address,address,uint256,bytes,uint256,uint256,uint256,address,bytes)", @@ -58,9 +59,9 @@ ] }, "SNTController": { + "abiFile": "../abi/SNTController.json", "isIdentity": false, "address": "0x96f0811c6484c59c2674da1f64e725c01d82c1b5", - "abiFile": "../abi/SNTController.json", "allowedFunctions": [ { "function":"transferSNT(address,uint256,uint256,uint256,bytes)", diff --git a/app/gas-relayer/package.json b/app/gas-relayer/package.json index b7d36b9..3199796 100644 --- a/app/gas-relayer/package.json +++ b/app/gas-relayer/package.json @@ -2,9 +2,10 @@ "name": "gas-relayer", "version": "0.0.1", "description": "Gas relayer to avoid having to hold ether to perform transactions when you already have a token", - "main": "index.js", + "main": "src/service.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node src/service.js" }, "author": "", "license": "ISC", diff --git a/app/gas-relayer/src/contract-settings.js b/app/gas-relayer/src/contract-settings.js index a8e49a2..ba617a0 100644 --- a/app/gas-relayer/src/contract-settings.js +++ b/app/gas-relayer/src/contract-settings.js @@ -11,8 +11,6 @@ class ContractSettings { this.events = eventEmitter; this.pendingToLoad = 0; - - this.events.on('setup:bytecode-address', this._obtainContractBytecode.bind(this)) } process(){ @@ -41,21 +39,11 @@ class ContractSettings { } } - _determineBytecodeAddress(topicName, i){ - let contractAddress = this.contracts[topicName].address; - if(this.contracts[topicName].isIdentity){ - this.pendingToLoad++; - const lastKernelSignature = "0x4ac99424"; // REFACTOR - this.web3.eth.call({to: this.contracts[topicName].factoryAddress, data: lastKernelSignature}) - .then(kernel => { - contractAddress = '0x' + kernel.slice(26); - this.events.emit('setup:bytecode-address', topicName, contractAddress); - }) - } - } + _obtainContractBytecode(topicName){ + if(this.contracts[topicName].isIdentity) return; - _obtainContractBytecode(topicName, contractAddress){ - this.web3.eth.getCode(contractAddress) + this.pendingToLoad++; + this.web3.eth.getCode(this.contracts[topicName].address) .then(code => { this.contracts[topicName].code = md5(code); this.pendingToLoad--; @@ -90,7 +78,7 @@ class ContractSettings { _processContracts(){ for(let contractName in this.contracts){ // Obtaining the abis - this.contracts[contractName].abi = require(this.contracts[contractName].abiFile); + this.contracts[contractName].abi = require(this.contracts[contractName].abiFile).abi; const topicName = this.getTopicName(contractName); @@ -100,7 +88,7 @@ class ContractSettings { this.contracts[topicName].name = contractName; delete this.contracts[contractName]; - this._determineBytecodeAddress(topicName); + this._obtainContractBytecode(topicName); this._extractFunctions(topicName); } diff --git a/app/gas-relayer/src/message-processor.js b/app/gas-relayer/src/message-processor.js index 765100e..4f30e69 100644 --- a/app/gas-relayer/src/message-processor.js +++ b/app/gas-relayer/src/message-processor.js @@ -1,5 +1,5 @@ const md5 = require('md5'); -const erc20ABI = require('../abi/ERC20.json'); +const erc20ABI = require('../abi/ERC20Token.json'); const ganache = require("ganache-cli"); class MessageProcessor { @@ -26,7 +26,7 @@ class MessageProcessor { } } - + async _validateInput(message, input){ const contract = this.settings.getContractByTopic(message.topic); @@ -56,6 +56,15 @@ class MessageProcessor { } + async _validateInstance(message, input){ + const contract = this.settings.getContractByTopic(message.topic); + const kernelVerifSignature = this.web3.utils.sha3(contract.kernelVerification).slice(0, 10) + return await this.web3.eth.call({ + to: contract.factoryAddress, + data: kernelVerifSignature + "000000000000000000000000" + input.address}); + } + + _extractInput(message){ return { address: message.payload.slice(0, 42), @@ -73,6 +82,7 @@ class MessageProcessor { } } + _getFactor(input, contract, gasToken){ if(contract.allowedFunctions[input.functionName].isToken){ return this.web3.utils.toBN(this.settings.getToken(gasToken).pricePlugin.getFactor()); @@ -87,14 +97,14 @@ class MessageProcessor { if(token.symbol == "ETH") return new this.web3.utils.BN(await this.web3.eth.getBalance(input.address)); else { - const Token = new this.web3.eth.Contract(erc20ABI); + const Token = new this.web3.eth.Contract(erc20ABI.abi); Token.options.address = params('gasToken'); return new this.web3.utils.BN(await Token.methods.balanceOf(input.address).call()); } } - _estimateGas(input){ + async _estimateGas(input){ const web3Sim = new Web3(ganache.provider({fork: `${this.config.node.protocol}://${this.config.node.host}:${this.config.node.port}`})); const simAccounts = await web3Sim.eth.getAccounts(); let simulatedReceipt = await web3Sim.eth.sendTransaction({ @@ -121,6 +131,9 @@ class MessageProcessor { if(!this._validateInput(message, input)) return; // TODO Log + if(contract.isIdentity) + if(!this._validateInstance(message, input)) return; + const params = this._obtainParametersFunc(contract, input); const token = this.settings.getToken(params('gasToken')); diff --git a/app/gas-relayer/test/sendmsg.js b/app/gas-relayer/test/sendmsg.js index 6eaf439..cc1a332 100644 --- a/app/gas-relayer/test/sendmsg.js +++ b/app/gas-relayer/test/sendmsg.js @@ -40,7 +40,7 @@ $(function(){ $('button').on('click', async function(e){ e.preventDefault(); - $('p.result').text(''); + $('p.result, #messageArea').text(''); let sKey = add0x($("#sKey")); let msgTopic = add0x($('#topic')); diff --git a/config/contracts.json b/config/contracts.json index 3ebb190..4d9f084 100644 --- a/config/contracts.json +++ b/config/contracts.json @@ -15,6 +15,24 @@ ], "gas": "auto", "contracts": { + "Identity": {"deploy": false}, + "IdentityFactory": {"deploy": false}, + "SafeMath": {"deploy": false}, + "DelayedUpdatableInstance": {"deploy": false}, + "DelayedUpdatableInstanceStorage": {"deploy": false}, + "Factory": {"deploy": false}, + "Instance": {"deploy": false}, + "InstanceStorage": {"deploy": false}, + "MiniMeToken": {"deploy": false}, + "MiniMeTokenFactory": {"deploy": false}, + "UpdatableInstance": {"deploy": false}, + "Controlled": {"deploy": false}, + "Owned": {"deploy": false}, + "IdentityGasRelay": {"deploy": false}, + "IdentityKernel": {"deploy": false}, + "SNTController": {"deploy": false}, + "UpdatedIdentityKernel": {"deploy": false}, + "TestContract": {"deploy": false} } } } diff --git a/contracts/deploy/Factory.sol b/contracts/deploy/Factory.sol index 4ba811f..b85a80e 100644 --- a/contracts/deploy/Factory.sol +++ b/contracts/deploy/Factory.sol @@ -50,6 +50,10 @@ contract Factory is Controlled { ); } + function isKernel(address _addr) public returns (bool){ + return versionMap[_addr] > 0; + } + function getCodeHash(address _addr) public view diff --git a/contracts/identity/IdentityKernel.sol b/contracts/identity/IdentityKernel.sol index d40056f..245e9e2 100644 --- a/contracts/identity/IdentityKernel.sol +++ b/contracts/identity/IdentityKernel.sol @@ -6,6 +6,6 @@ import "./Identity.sol"; contract IdentityKernel is DelayedUpdatableInstanceStorage, Identity { function initIdentity(address _caller) external { - _constructIdentity(_caller); + _constructIdentity(keccak256(_caller)); } }