UNPKG

@lukso/lsp-smart-contracts

Version:

The reference smart contract implementation for the LUKSO LSP standards

648 lines 63.7 kB
{ "_format": "hh-sol-artifact-1", "contractName": "LSP9VaultInit", "sourceName": "@lukso/lsp9-contracts/contracts/LSP9VaultInit.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ERC725X_ContractDeploymentFailed", "type": "error" }, { "inputs": [], "name": "ERC725X_CreateOperationsRequireEmptyRecipientAddress", "type": "error" }, { "inputs": [], "name": "ERC725X_ExecuteParametersEmptyArray", "type": "error" }, { "inputs": [], "name": "ERC725X_ExecuteParametersLengthMismatch", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "ERC725X_InsufficientBalance", "type": "error" }, { "inputs": [], "name": "ERC725X_MsgValueDisallowedInStaticCall", "type": "error" }, { "inputs": [], "name": "ERC725X_NoContractBytecodeProvided", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "operationTypeProvided", "type": "uint256" } ], "name": "ERC725X_UnknownOperationType", "type": "error" }, { "inputs": [], "name": "ERC725Y_DataKeysValuesLengthMismatch", "type": "error" }, { "inputs": [], "name": "ERC725Y_MsgValueDisallowed", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" } ], "name": "LSP14CallerNotPendingOwner", "type": "error" }, { "inputs": [], "name": "LSP14CannotTransferOwnershipToSelf", "type": "error" }, { "inputs": [], "name": "LSP14MustAcceptOwnershipInSeparateTransaction", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "renounceOwnershipStart", "type": "uint256" }, { "internalType": "uint256", "name": "renounceOwnershipEnd", "type": "uint256" } ], "name": "LSP14NotInRenounceOwnershipInterval", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "dataKey", "type": "bytes32" } ], "name": "LSP1DelegateNotAllowedToSetDataKey", "type": "error" }, { "inputs": [ { "internalType": "bytes4", "name": "functionSelector", "type": "bytes4" } ], "name": "NoExtensionFoundForFunctionSelector", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "callerAddress", "type": "address" } ], "name": "OwnableCallerNotTheOwner", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "operationType", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "contractAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": true, "internalType": "bytes32", "name": "salt", "type": "bytes32" } ], "name": "ContractCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "dataKey", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "dataValue", "type": "bytes" } ], "name": "DataChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "operationType", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": true, "internalType": "bytes4", "name": "selector", "type": "bytes4" } ], "name": "Executed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [], "name": "OwnershipRenounced", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [], "name": "RenounceOwnershipStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": true, "internalType": "bytes32", "name": "typeId", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "receivedData", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "returnedValue", "type": "bytes" } ], "name": "UniversalReceiver", "type": "event" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [], "name": "RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "batchCalls", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "operationType", "type": "uint256" }, { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "execute", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "operationsType", "type": "uint256[]" }, { "internalType": "address[]", "name": "targets", "type": "address[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes[]", "name": "datas", "type": "bytes[]" } ], "name": "executeBatch", "outputs": [ { "internalType": "bytes[]", "name": "", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "dataKey", "type": "bytes32" } ], "name": "getData", "outputs": [ { "internalType": "bytes", "name": "dataValue", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "dataKeys", "type": "bytes32[]" } ], "name": "getDataBatch", "outputs": [ { "internalType": "bytes[]", "name": "dataValues", "type": "bytes[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "dataKey", "type": "bytes32" }, { "internalType": "bytes", "name": "dataValue", "type": "bytes" } ], "name": "setData", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "dataKeys", "type": "bytes32[]" }, { "internalType": "bytes[]", "name": "dataValues", "type": "bytes[]" } ], "name": "setDataBatch", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "typeId", "type": "bytes32" }, { "internalType": "bytes", "name": "receivedData", "type": "bytes" } ], "name": "universalReceiver", "outputs": [ { "internalType": "bytes", "name": "returnedValues", "type": "bytes" } ], "stateMutability": "payable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ], "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61303680620000f36000396000f3fe60806040526004361061012d5760003560e01c80637f23690c116100a5578063dedff9c611610074578063ead3fbdf11610059578063ead3fbdf1461021e578063f2fde38b146103e2578063ffa1ad741461040257610178565b8063dedff9c6146103a4578063e30c3978146103c457610178565b80637f23690c146103335780638da5cb5b14610346578063979024211461037e578063c4d66de81461039157610178565b806354f6127f116100fc5780636bb56a14116100e15780636bb56a14146102f6578063715018a61461030957806379ba50971461031e57610178565b806354f6127f146102b65780636963d438146102d657610178565b806301bfba611461021e57806301ffc9a714610246578063318584521461027657806344c028fe1461029657610178565b36610178573415610176576101747f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc60001b6040518060200160405280600081525061044b565b505b005b600036606060048210156102065734156101f1576101ef7f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc60001b84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061044b92505050565b505b50604080516020810190915260008152610213565b6102108383610742565b90505b915050805190602001f35b34801561022a57600080fd5b5061023360c881565b6040519081526020015b60405180910390f35b34801561025257600080fd5b50610266610261366004612674565b61091e565b604051901515815260200161023d565b610289610284366004612889565b6109ba565b60405161023d91906129e1565b6102a96102a4366004612a43565b610a64565b60405161023d9190612a98565b3480156102c257600080fd5b506102a96102d1366004612aab565b610b03565b3480156102e257600080fd5b506102896102f1366004612ac4565b610b0e565b6102a9610304366004612b39565b61044b565b34801561031557600080fd5b50610176610c71565b34801561032a57600080fd5b50610176610d13565b610176610341366004612b39565b610e11565b34801561035257600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b03909116815260200161023d565b61017661038c366004612b80565b610ee2565b61017661039f366004612bda565b61109e565b3480156103b057600080fd5b506102896103bf366004612bf5565b6111c0565b3480156103d057600080fd5b506003546001600160a01b0316610366565b3480156103ee57600080fd5b506101766103fd366004612bda565b61126b565b34801561040e57600080fd5b506102a96040518060400160405280600681526020017f302e31352e30000000000000000000000000000000000000000000000000000081525081565b6060341580159061047c57507f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc8314155b156104e7576104e57f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc60001b6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061044b92505050565b505b60006105127f0cfc51aec37c55a4d0b1a65c6255c4bf2fbdf6277f3cc0730c45b828b6db8b4761133c565b9050606060148251106105d557600061052a83612c2a565b60601c905061054081635122dded60e11b6113de565b156105d357600480546001600160a01b0319166001600160a01b0383169081178255604051635122dded60e11b8152909163a245bbda9161058991339134918c918c9101612c66565b6000604051808303816000875af11580156105a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105d09190810190612c94565b91505b505b60006105ee690cfc51aec37c55a4d0b160b01b87611467565b905060006105fb8261133c565b9050606060148251106106be57600061061383612c2a565b60601c905061062981635122dded60e11b6113de565b156106bc57600480546001600160a01b0319166001600160a01b0383169081178255604051635122dded60e11b8152909163a245bbda9161067291339134918f918f9101612c66565b6000604051808303816000875af1158015610691573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106b99190810190612c94565b91505b505b600480546001600160a01b03191690556040516106e19085908390602001612d02565b60405160208183030381529060405295508734336001600160a01b03167f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c28a8a60405161072f929190612d02565b60405180910390a4505050505092915050565b606060008061075c6000356001600160e01b0319166114d0565b915091503460001415801561076f575080155b156107d9576107d77f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc60001b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061044b92505050565b505b6000356001600160e01b0319161580156107fa57506001600160a01b038216155b15610818576040518060200160405280600081525092505050610918565b6001600160a01b03821661086b576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024015b60405180910390fd5b600080836001600160a01b031683610884576000610886565b345b8888333460405160200161089d9493929190612d27565b60408051601f19818403018152908290526108b791612d57565b60006040518083038185875af1925050503d80600081146108f4576040519150601f19603f3d011682016040523d82523d6000602084013e6108f9565b606091505b5091509150811561090f57935061091892505050565b80518060208301fd5b92915050565b60006001600160e01b031982167f28af17e600000000000000000000000000000000000000000000000000000000148061096857506001600160e01b03198216631aed5a8560e21b145b8061099c57506001600160e01b031982167f94be599900000000000000000000000000000000000000000000000000000000145b806109ab57506109ab826115b4565b806109185750610918826115f2565b60606109c4611630565b3415610a4d576040516001600160e01b03196000351660208201527f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc90349033907f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c29060240160408051601f1981840301815290829052610a4491612d73565b60405180910390a45b610a598585858561167f565b90505b949350505050565b6060610a6e611630565b3415610af7576040516001600160e01b03196000351660208201527f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc90349033907f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c29060240160408051601f1981840301815290829052610aee91612d73565b60405180910390a45b610a598585858561180f565b60606109188261133c565b60608167ffffffffffffffff811115610b2957610b2961269e565b604051908082528060200260200182016040528015610b5c57816020015b6060815260200190600190039081610b475790505b50905060005b82811015610c6a5760008030868685818110610b8057610b80612d9d565b9050602002810190610b929190612db3565b604051610ba0929190612e01565b600060405180830381855af49150503d8060008114610bdb576040519150601f19603f3d011682016040523d82523d6000602084013e610be0565b606091505b509150915081610c4257805115610bfa5780518082602001fd5b60405162461bcd60e51b815260206004820152601960248201527f4c5350393a20626174636843616c6c73207265766572746564000000000000006044820152606401610862565b80848481518110610c5557610c55612d9d565b60209081029190910101525050600101610b62565b5092915050565b610c79611630565b6000546201000090046001600160a01b0316610c9361191b565b6000546201000090046001600160a01b0316610d1057604080516001600160a01b0383166020820152600091810191909152610d10907f0c622e58e6b7089ae35f1af1c86d997be92fcdd8c9509652022d41aa65169471906060015b60408051601f198184030181529190526001600160a01b0384169190611a27565b50565b600354600160a01b900460ff1615610d57576040517f5758dd0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546201000090046001600160a01b0316610d71611abb565b604080516001600160a01b03831660208201523391810191909152610dba907f0c622e58e6b7089ae35f1af1c86d997be92fcdd8c9509652022d41aa6516947190606001610cef565b604080516001600160a01b0383166020820152338183018190528251808303840181526060909201909252610d1091907f79855c97dbc259ce395421d933d7bc0699b0f1561f988f09a9e8633fd542fe5c90611a27565b3415610e305760405163f36ba73760e01b815260040160405180910390fd5b6000610e3a611b21565b90508015610ed3576001600160a01b03198316690cfc51aec37c55a4d0b160b01b1480610e9157507fffffffffffff00000000000000000000000000000000000000000000000000008316654b80742de2bf60d01b145b80610eb257506001600160a01b03198316696773c5a04a6d4300884b60b11b145b15610ed35760405163199611f160e01b815260048101849052602401610862565b610edd8383611bd3565b505050565b6000610eec611b21565b90508151835114610f29576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3415610f485760405163f36ba73760e01b815260040160405180910390fd5b60005b8351811015611098578115611054578351690cfc51aec37c55a4d0b160b01b90859083908110610f7d57610f7d612d9d565b60200260200101516001600160a01b0319161480610fdc57508351654b80742de2bf60d01b90859083908110610fb557610fb5612d9d565b602002602001015179ffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061101957508351696773c5a04a6d4300884b60b11b9085908390811061100557611005612d9d565b60200260200101516001600160a01b031916145b156110545783818151811061103057611030612d9d565b602002602001015160405163199611f160e01b815260040161086291815260200190565b61109084828151811061106957611069612d9d565b602002602001015184838151811061108357611083612d9d565b6020026020010151611bd3565b600101610f4b565b50505050565b600054610100900460ff16158080156110be5750600054600160ff909116105b806110d85750303b1580156110d8575060005460ff166001145b61114a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610862565b6000805460ff19166001179055801561116d576000805461ff0019166101001790555b61117682611c28565b80156111bc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6060815167ffffffffffffffff8111156111dc576111dc61269e565b60405190808252806020026020018201604052801561120f57816020015b60608152602001906001900390816111fa5790505b50905060005b82518110156112655761124083828151811061123357611233612d9d565b602002602001015161133c565b82828151811061125257611252612d9d565b6020908102919091010152600101611215565b50919050565b611273611630565b6003805460ff60a01b1916600160a01b17905561128f81611dda565b600080546040516001600160a01b03620100009092048216929184169183917f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227009190a3604080516001600160a01b0383811660208301528416818301819052825180830384018152606090920190925261132b91907faefd43f45fed1bcd8992f23c803b6f4ec45cf6b62b0d404d565f290a471e763f90611a27565b50506003805460ff60a01b19169055565b600081815260016020526040902080546060919061135990612e11565b80601f016020809104026020016040519081016040528092919081815260200182805461138590612e11565b80156113d25780601f106113a7576101008083540402835291602001916113d2565b820191906000526020600020905b8154815290600101906020018083116113b557829003601f168201915b50505050509050919050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015611450575060208210155b801561145c5750600081115b979650505050505050565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c83015291829101604051602081830303815290604052905080610a5c90612e45565b600080806114f5696773c5a04a6d4300884b60b11b6001600160e01b03198616611467565b905060006115028261133c565b905060148151101561151b575060009485945092505050565b805160150361159c578060148151811061153757611537612d9d565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f01000000000000000000000000000000000000000000000000000000000000000361159c5761158d81612c2a565b60601c95600195509350505050565b6115a581612c2a565b60601c95600095509350505050565b60006001600160e01b031982167fa918fa6b000000000000000000000000000000000000000000000000000000001480610918575061091882611e43565b6000806116056301ffc9a760e01b6114d0565b5090506001600160a01b03811661161f5750600092915050565b61162981846113de565b9392505050565b6000546001600160a01b036201000090910416331461167d576040517fbf1169c5000000000000000000000000000000000000000000000000000000008152336004820152602401610862565b565b6060835185511415806116a05750825184511415806116a057508151835114155b156116d7576040517f3ff55f4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451600003611712576040517fe9ad2b5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000855167ffffffffffffffff81111561172e5761172e61269e565b60405190808252806020026020018201604052801561176157816020015b606081526020019060019003908161174c5790505b50905060005b8651811015611805576117e087828151811061178557611785612d9d565b602002602001015187838151811061179f5761179f612d9d565b60200260200101518784815181106117b9576117b9612d9d565b60200260200101518785815181106117d3576117d3612d9d565b602002602001015161180f565b8282815181106117f2576117f2612d9d565b6020908102919091010152600101611767565b5095945050505050565b60608461182857611821848484611e81565b9050610a5c565b60018503611862576001600160a01b0384161561185857604051631820c12560e11b815260040160405180910390fd5b6118218383611fb2565b6002850361189c576001600160a01b0384161561189257604051631820c12560e11b815260040160405180910390fd5b61182183836120cc565b600385036118e65782156118dc576040517f72f2bc6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61182184836121b6565b6040517f7583b3bc00000000000000000000000000000000000000000000000000000000815260048101869052602401610862565b600254439060009061192f9060c890612e7f565b9050600061193e60c883612e7f565b90508083118061194e5750600254155b15611996576002839055600380546001600160a01b03191690556040517f81b7f830f1f0084db6497c486cbe6974c86488dcc4e3738eab94ab6d6b1653e790600090a1505050565b818310156119da576040517f1b0809420000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610862565b6119e460006122ba565b60006002819055600380546001600160a01b03191690556040517fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce9190a1505050565b611a416001600160a01b038416631aed5a8560e21b6113de565b15610edd57604051631aed5a8560e21b81526001600160a01b03841690636bb56a1490611a749085908590600401612e92565b6000604051808303816000875af1158015611a93573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110989190810190612c94565b6003546001600160a01b03163314611b01576040517f451e4528000000000000000000000000000000000000000000000000000000008152336004820152602401610862565b611b0a336122ba565b600380546001600160a01b03191690556000600255565b600080546201000090046001600160a01b03166001600160a01b0316336001600160a01b031614611bd0576004546001600160a01b03163314611bcc5760405162461bcd60e51b815260206004820152603b60248201527f4f6e6c79204f776e6572206f72207265656e746572656420556e69766572736160448201527f6c2052656365697665722044656c656761746520616c6c6f77656400000000006064820152608401610862565b5060015b90565b6000828152600160205260409020611beb8282612ef9565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b282604051611c1c9190612a98565b60405180910390a25050565b600054610100900460ff16611ca55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610862565b3415611d2a577f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc60001b34336001600160a01b03167f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c2604051611d21906040808252600090820181905260606020830181905282015260800190565b60405180910390a45b611d33816122ba565b611d957feafec4d89fa9619884b600007c0334a14085fefa8b51ae5a40895018882bdb9060001b6040518060400160405280600481526020017f7c0334a100000000000000000000000000000000000000000000000000000000815250611bd3565b604080516020810190915260008152610d10906001600160a01b038316907f79855c97dbc259ce395421d933d7bc0699b0f1561f988f09a9e8633fd542fe5c90611a27565b306001600160a01b03821603611e1c576040517fe052a6f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b03929092169190911790556000600255565b60006001600160e01b031982167f629aa694000000000000000000000000000000000000000000000000000000001480610918575061091882612351565b606082471015611ead576040516301bf351f60e31b815247600482015260248101849052604401610862565b611eb682612fb9565b6001600160e01b031916846001600160a01b031660007f4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e86604051611efd91815260200190565b60405180910390a4600080856001600160a01b03168585604051611f219190612d57565b60006040518083038185875af1925050503d8060008114611f5e576040519150601f19603f3d011682016040523d82523d6000602084013e611f63565b606091505b5091509150611fa882826040518060400160405280601681526020017f455243373235583a20556e6b6e6f776e204572726f720000000000000000000081525061239f565b9695505050505050565b606082471015611fde576040516301bf351f60e31b815247600482015260248101849052604401610862565b81516000036120005760405163b81cd8d960e01b815260040160405180910390fd5b600082516020840185f090506001600160a01b03811661204c576040517f0b07489b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000801b816001600160a01b031660017fa1fb700aaee2ae4a2ff6f91ce7eba292f89c2f5488b8ec4c5c5c8150692595c38760405161208d91815260200190565b60405180910390a46040516bffffffffffffffffffffffff19606083901b16602082015260340160405160208183030381529060405291505092915050565b606081516000036120f05760405163b81cd8d960e01b815260040160405180910390fd5b600061210983602085516121049190612fed565b6123b8565b90506000612126846000602087516121219190612fed565b61241e565b90506000612135868484612546565b905082816001600160a01b031660027fa1fb700aaee2ae4a2ff6f91ce7eba292f89c2f5488b8ec4c5c5c8150692595c38960405161217591815260200190565b60405180910390a46040516bffffffffffffffffffffffff19606083901b166020820152603401604051602081830303815290604052935050505092915050565b60606121c182612fb9565b6001600160e01b031916836001600160a01b031660037f4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e600060405161220991815260200190565b60405180910390a4600080846001600160a01b03168460405161222c9190612d57565b600060405180830381855afa9150503d8060008114612267576040519150601f19603f3d011682016040523d82523d6000602084013e61226c565b606091505b50915091506122b182826040518060400160405280601681526020017f455243373235583a20556e6b6e6f776e204572726f720000000000000000000081525061239f565b95945050505050565b6000546001600160a01b03828116620100009092041614610d1057600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03831662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff90911617905550565b60006001600160e01b031982167f7545acac00000000000000000000000000000000000000000000000000000000148061091857506301ffc9a760e01b6001600160e01b0319831614610918565b606083156123ae575081611629565b611629838361264a565b60006123c5826020612e7f565b835110156124155760405162461bcd60e51b815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e647300000000000000000000006044820152606401610862565b50016020015190565b60608161242c81601f612e7f565b101561247a5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610862565b6124848284612e7f565b845110156124d45760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610862565b6060821580156124f3576040519150600082526020820160405261253d565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561252c578051835260209283019201612514565b5050858452601f01601f1916604052505b50949350505050565b6000834710156125985760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610862565b81516000036125e95760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610862565b8282516020840186f590506001600160a01b0381166116295760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610862565b81511561265a5781518083602001fd5b8060405162461bcd60e51b81526004016108629190612a98565b60006020828403121561268657600080fd5b81356001600160e01b03198116811461162957600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156126dd576126dd61269e565b604052919050565b600067ffffffffffffffff8211156126ff576126ff61269e565b5060051b60200190565b600082601f83011261271a57600080fd5b8135602061272f61272a836126e5565b6126b4565b82815260059290921b8401810191818101908684111561274e57600080fd5b8286015b848110156127695780358352918301918301612752565b509695505050505050565b80356001600160a01b038116811461278b57600080fd5b919050565b600067ffffffffffffffff8211156127aa576127aa61269e565b50601f01601f191660200190565b600082601f8301126127c957600080fd5b81356127d761272a82612790565b8181528460208386010111156127ec57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261281a57600080fd5b8135602061282a61272a836126e5565b82815260059290921b8401810191818101908684111561284957600080fd5b8286015b8481101561276957803567ffffffffffffffff81111561286d5760008081fd5b61287b8986838b01016127b8565b84525091830191830161284d565b6000806000806080858703121561289f57600080fd5b843567ffffffffffffffff808211156128b757600080fd5b6128c388838901612709565b95506020915081870135818111156128da57600080fd5b8701601f810189136128eb57600080fd5b80356128f961272a826126e5565b81815260059190911b8201840190848101908b83111561291857600080fd5b928501925b8284101561293d5761292e84612774565b8252928501929085019061291d565b9750505050604087013591508082111561295657600080fd5b61296288838901612709565b9350606087013591508082111561297857600080fd5b5061298587828801612809565b91505092959194509250565b60005b838110156129ac578181015183820152602001612994565b50506000910152565b600081518084526129cd816020860160208601612991565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612a3657603f19888603018452612a248583516129b5565b94509285019290850190600101612a08565b5092979650505050505050565b60008060008060808587031215612a5957600080fd5b84359350612a6960208601612774565b925060408501359150606085013567ffffffffffffffff811115612a8c57600080fd5b612985878288016127b8565b60208152600061162960208301846129b5565b600060208284031215612abd57600080fd5b5035919050565b60008060208385031215612ad757600080fd5b823567ffffffffffffffff80821115612aef57600080fd5b818501915085601f830112612b0357600080fd5b813581811115612b1257600080fd5b8660208260051b8501011115612b2757600080fd5b60209290920196919550909350505050565b60008060408385031215612b4c57600080fd5b82359150602083013567ffffffffffffffff811115612b6a57600080fd5b612b76858286016127b8565b9150509250929050565b60008060408385031215612b9357600080fd5b823567ffffffffffffffff80821115612bab57600080fd5b612bb786838701612709565b93506020850135915080821115612bcd57600080fd5b50612b7685828601612809565b600060208284031215612bec57600080fd5b61162982612774565b600060208284031215612c0757600080fd5b813567ffffffffffffffff811115612c1e57600080fd5b610a5c84828501612709565b805160208201516bffffffffffffffffffffffff198082169291906014831015612c5e5780818460140360031b1b83161693505b505050919050565b6001600160a01b0385168152836020820152826040820152608060608201526000611fa860808301846129b5565b600060208284031215612ca657600080fd5b815167ffffffffffffffff811115612cbd57600080fd5b8201601f81018413612cce57600080fd5b8051612cdc61272a82612790565b818152856020838501011115612cf157600080fd5b6122b1826020830160208601612991565b604081526000612d1560408301856129b5565b82810360208401526122b181856129b5565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b60008251612d69818460208701612991565b9190910192915050565b604081526000612d8660408301846129b5565b828103602093840152600081529190910192915050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112612dca57600080fd5b83018035915067ffffffffffffffff821115612de557600080fd5b602001915036819003821315612dfa57600080fd5b9250929050565b8183823760009101908152919050565b600181811c90821680612e2557607f821691505b60208210810361126557634e487b7160e01b600052602260045260246000fd5b805160208083015191908110156112655760001960209190910360031b1b16919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561091857610918612e69565b828152604060208201526000610a5c60408301846129b5565b601f821115610edd57600081815260208120601f850160051c81016020861015612ed25750805b601f850160051c820191505b81811015612ef157828155600101612ede565b505050505050565b815167ffffffffffffffff811115612f1357612f1361269e565b612f2781612f218454612e11565b84612eab565b602080601f831160018114612f5c5760008415612f445750858301515b600019600386901b1c1916600185901b178555612ef1565b600085815260208120601f198616915b82811015612f8b57888601518255948401946001909101908401612f6c565b5085821015612fa95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000815160208301516001600160e01b031980821693506004831015612c5e5760049290920360031b82901b161692915050565b8181038181111561091857610918612e6956fea26469706673582212206c00c7fd43fb6a2abbe071fb1c9f51011df55a9d8dae12fc7b7bcad2da20531364736f6c63430008110033", "deployedBytecode": "0x60806040526004361061012d5760003560e01c80637f23690c116100a5578063dedff9c611610074578063ead3fbdf11610059578063ead3fbdf1461021e578063f2fde38b146103e2578063ffa1ad741461040257610178565b8063dedff9c6146103a4578063e30c3978146103c457610178565b80637f23690c146103335780638da5cb5b14610346578063979024211461037e578063c4d66de81461039157610178565b806354f6127f116100fc5780636bb56a14116100e15780636bb56a14146102f6578063715018a61461030957806379ba50971461031e57610178565b806354f6127f146102b65780636963d438146102d657610178565b806301bfba611461021e57806301ffc9a714610246578063318584521461027657806344c028fe1461029657610178565b36610178573415610176576101747f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc60001b6040518060200160405280600081525061044b565b505b005b600036606060048210156102065734156101f1576101ef7f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc60001b84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061044b92505050565b505b50604080516020810190915260008152610213565b6102108383610742565b90505b915050805190602001f35b34801561022a57600080fd5b5061023360c881565b6040519081526020015b60405180910390f35b34801561025257600080fd5b50610266610261366004612674565b61091e565b604051901515815260200161023d565b610289610284366004612889565b6109ba565b60405161023d91906129e1565b6102a96102a4366004612a43565b610a64565b60405161023d9190612a98565b3480156102c257600080fd5b506102a96102d1366004612aab565b610b03565b3480156102e257600080fd5b506102896102f1366004612ac4565b610b0e565b6102a9610304366004612b39565b61044b565b34801561031557600080fd5b50610176610c71565b34801561032a57600080fd5b50610176610d13565b610176610341366004612b39565b610e11565b34801561035257600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b03909116815260200161023d565b61017661038c366004612b80565b610ee2565b61017661039f366004612bda565b61109e565b3480156103b057600080fd5b506102896103bf366004612bf5565b6111c0565b3480156103d057600080fd5b506003546001600160a01b0316610366565b3480156103ee57600080fd5b506101766103fd366004612bda565b61126b565b34801561040e57600080fd5b506102a96040518060400160405280600681526020017f302e31352e30000000000000000000000000000000000000000000000000000081525081565b6060341580159061047c57507f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc8314155b156104e7576104e57f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc60001b6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061044b92505050565b505b60006105127f0cfc51aec37c55a4d0b1a65c6255c4bf2fbdf6277f3cc0730c45b828b6db8b4761133c565b9050606060148251106105d557600061052a83612c2a565b60601c905061054081635122dded60e11b6113de565b156105d357600480546001600160a01b0319166001600160a01b0383169081178255604051635122dded60e11b8152909163a245bbda9161058991339134918c918c9101612c66565b6000604051808303816000875af11580156105a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105d09190810190612c94565b91505b505b60006105ee690cfc51aec37c55a4d0b160b01b87611467565b905060006105fb8261133c565b9050606060148251106106be57600061061383612c2a565b60601c905061062981635122dded60e11b6113de565b156106bc57600480546001600160a01b0319166001600160a01b0383169081178255604051635122dded60e11b8152909163a245bbda9161067291339134918f918f9101612c66565b6000604051808303816000875af1158015610691573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106b99190810190612c94565b91505b505b600480546001600160a01b03191690556040516106e19085908390602001612d02565b60405160208183030381529060405295508734336001600160a01b03167f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c28a8a60405161072f929190612d02565b60405180910390a4505050505092915050565b606060008061075c6000356001600160e01b0319166114d0565b915091503460001415801561076f575080155b156107d9576107d77f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc60001b86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061044b92505050565b505b6000356001600160e01b0319161580156107fa57506001600160a01b038216155b15610818576040518060200160405280600081525092505050610918565b6001600160a01b03821661086b576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024015b60405180910390fd5b600080836001600160a01b031683610884576000610886565b345b8888333460405160200161089d9493929190612d27565b60408051601f19818403018152908290526108b791612d57565b60006040518083038185875af1925050503d80600081146108f4576040519150601f19603f3d011682016040523d82523d6000602084013e6108f9565b606091505b5091509150811561090f57935061091892505050565b80518060208301fd5b92915050565b60006001600160e01b031982167f28af17e600000000000000000000000000000000000000000000000000000000148061096857506001600160e01b03198216631aed5a8560e21b145b8061099c57506001600160e01b031982167f94be599900000000000000000000000000000000000000000000000000000000145b806109ab57506109ab826115b4565b806109185750610918826115f2565b60606109c4611630565b3415610a4d576040516001600160e01b03196000351660208201527f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc90349033907f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c29060240160408051601f1981840301815290829052610a4491612d73565b60405180910390a45b610a598585858561167f565b90505b949350505050565b6060610a6e611630565b3415610af7576040516001600160e01b03196000351660208201527f468cd1581d7bc001c3b685513d2b929b55437be34700410383d58f3aa1ea0abc90349033907f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c29060240160408051601f1981840301815290829052610aee91612d73565b60405180910390a45b610a598585858561180f565b60606109188261133c565b60608167ffffffffffffffff811115610b2957610b2961269e565b604051908082528060200260200182016040528015610b5c57816020015b6060815260200190600190039081610b475790505b50905060005b82811015610c6a5760008030868685818110610b8057610b80612d9d565b9050602002810190610b929190612db3565b604051610ba0929190612e01565b600060405180830381855af49150503d8060008114610bdb576040519150601f19603f3d011682016040523d82523d6000602084013e610be0565b606091505b509150915081610c4257805115610bfa5780518082602001fd5b60405162461bcd60e51b815260206004820152601960248201527f4c5350393a20626174636843616c6c73207265766572746564000000000000006044820152606401610862565b80848481518110610c5557610c55612d9d565b60209081029190910101525050600101610b62565b5092915050565b610c79611630565b6000546201000090046001600160a01b0316610c9361191b565b6000546201000090046001600160a01b0316610d1057604080516001600160a01b0383166020820152600091810191909152610d10907f0c622e58e6b7089ae35f1af1c86d997be92fcdd8c9509652022d41aa65169471906060015b60408051601f198184030181529190526001600160a01b0384169190611a27565b50565b600354600160a01b900460ff1615610d57576040517f5758dd0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546201000090046001600160a01b0316610d71611abb565b604080516001600160a01b03831660208201523391810191909152610dba907f0c622e58e6b7089ae35f1af1c86d997be92fcdd8c9509652022d41aa6516947190606001610cef565b604080516001600160a01b0383166020820152338183018190528251808303840181526060909201909252610d1091907f79855c97dbc259ce395421d933d7bc0699b0f1561f988f09a9e8633fd542fe5c90611a27565b3415610e305760405163f36ba73760e01b815260040160405180910390fd5b6000610e3a611b21565b90508015610ed3576001600160a01b03198316690cfc51aec37c55a4d0b160b01b1480610e9157507fffffffffffff00000000000000000000000000000000000000000000000000008316654b80742de2bf60d01b145b80610eb257506001600160a01b03198316696773c5a04a6d4300884b60b11b145b15610ed35760405163199611f160e01b815260048101849052602401610862565b610edd8383611bd3565b505050565b6000610eec611b21565b90508151835114610f29576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3415610f485760405163f36ba73760e01b815260040160405180910390fd5b60005b8351811015611098578115611054578351690cfc51aec37c55a4d0b160b01b90859083908110610f7d57610f7d612d9d565b60200260200101516001600160a01b0319161480610fdc57508351654b80742de2bf60d01b90859083908110610fb557610fb5612d9d565b602002602001015179ffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061101957508351696773c5a04a6d4300884b60b11b9085908390811061100557611005612d9d565b60200260200101516001600160a01b031916145b156110545783818151811061103057611030612d9d565b602002602001015160405163199611f160e01b815260040161086291815260200190565b61109084828151811061106957611069612d9d565b602002602001015184838151811061108357611083612d9d565b6020026020010151611bd3565b600101610f4b565b50505050565b600054610100900460ff16158080156110be5750600054600160ff909116105b806110d85750303b1580156110d8575060005460ff166001145b61114a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610862565b6000805460ff19166001179055801561116d576000805461ff0019166101001790555b61117682611c28565b80156111bc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6060815167ffffffffffffffff8111156111dc576111dc61269e565b60405190808252806020026020018201604052801561120f57816020015b60608152602001906001900390816111fa5790505b50905060005b82518110156112655761124083828151811061123357611233612d9d565b602002602001015161133c565b82828151811061125257611252612d9d565b6020908102919091010152600101611215565b50919050565b611273611630565b6003805460ff60a01b1916600160a01b17905561128f81611dda565b600080546040516001600160a01b03620100009092048216929184169183917f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227009190a3604080516001600160a01b0383811660208301528416818301819052825180830384018152606090920190925261132b91907faefd43f45fed1bcd8992f23c803b6f4ec45cf6b62b0d404d565f290a471e763f90611a27565b50506003805460ff60a01b19169055565b600081815260016020526040902080546060919061135990612e11565b80601f016020809104026020016040519081016040528092919081815260200182805461138590612e11565b80156113d25780601f106113a7576101008083540402835291602001916113d2565b820191906000526020600020905b8154815290600101906020018083116113b557829003601f168201915b50505050509050919050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015611450575060208210155b801561145c5750600081115b979650505050505050565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c83015291829101604051602081830303815290604052905080610a5c90612e45565b600080806114f5696773c5a04a6d4300884b60b11b6001600160e01b03198616611467565b905060006115028261133c565b905060148151101561151b575060009485945092505050565b805160150361159c578060148151811061153757611537612d9d565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f01000000000000000000000000000000000000000000000000000000000000000361159c5761158d81612c2a565b60601c95600195509350505050565b6115a