@lukso/lsp-smart-contracts
Version:
The reference smart contract implementation for the LUKSO LSP standards
870 lines • 66.2 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "LSP7MintableInit",
"sourceName": "@lukso/lsp7-contracts/contracts/presets/LSP7MintableInit.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "ERC725Y_DataKeysValuesEmptyArray",
"type": "error"
},
{
"inputs": [],
"name": "ERC725Y_DataKeysValuesLengthMismatch",
"type": "error"
},
{
"inputs": [],
"name": "ERC725Y_MsgValueDisallowed",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "storedData",
"type": "bytes"
}
],
"name": "InvalidExtensionAddress",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "InvalidFunctionSelector",
"type": "error"
},
{
"inputs": [],
"name": "LSP4TokenNameNotEditable",
"type": "error"
},
{
"inputs": [],
"name": "LSP4TokenSymbolNotEditable",
"type": "error"
},
{
"inputs": [],
"name": "LSP4TokenTypeNotEditable",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"internalType": "uint256",
"name": "authorizedAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "LSP7AmountExceedsAuthorizedAmount",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "LSP7AmountExceedsBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "callIndex",
"type": "uint256"
}
],
"name": "LSP7BatchCallFailed",
"type": "error"
},
{
"inputs": [],
"name": "LSP7CannotSendWithAddressZero",
"type": "error"
},
{
"inputs": [],
"name": "LSP7CannotUseAddressZeroAsOperator",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "LSP7DecreaseAllowanceNotAuthorized",
"type": "error"
},
{
"inputs": [],
"name": "LSP7DecreasedAllowanceBelowZero",
"type": "error"
},
{
"inputs": [],
"name": "LSP7InvalidTransferBatch",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenReceiver",
"type": "address"
}
],
"name": "LSP7NotifyTokenReceiverContractMissingLSP1Interface",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenReceiver",
"type": "address"
}
],
"name": "LSP7NotifyTokenReceiverIsEOA",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "caller",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "LSP7RevokeOperatorNotAuthorized",
"type": "error"
},
{
"inputs": [],
"name": "LSP7TokenContractCannotHoldValue",
"type": "error"
},
{
"inputs": [],
"name": "LSP7TokenOwnerCannotBeOperator",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "functionSelector",
"type": "bytes4"
}
],
"name": "NoExtensionFoundForFunctionSelector",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "OperatorAllowanceCannotBeIncreasedFromZero",
"type": "error"
},
{
"inputs": [],
"name": "OwnableCannotSetZeroAddressAsOwner",
"type": "error"
},
{
"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": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "operatorNotificationData",
"type": "bytes"
}
],
"name": "OperatorAuthorizationChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "bool",
"name": "notified",
"type": "bool"
},
{
"indexed": false,
"internalType": "bytes",
"name": "operatorNotificationData",
"type": "bytes"
}
],
"name": "OperatorRevoked",
"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": [
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bool",
"name": "force",
"type": "bool"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "Transfer",
"type": "event"
},
{
"stateMutability": "payable",
"type": "fallback"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "operatorNotificationData",
"type": "bytes"
}
],
"name": "authorizeOperator",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
}
],
"name": "authorizedAmountFor",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes[]",
"name": "data",
"type": "bytes[]"
}
],
"name": "batchCalls",
"outputs": [
{
"internalType": "bytes[]",
"name": "results",
"type": "bytes[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"internalType": "uint256",
"name": "subtractedAmount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "operatorNotificationData",
"type": "bytes"
}
],
"name": "decreaseAllowance",
"outputs": [],
"stateMutability": "nonpayable",
"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": "tokenOwner",
"type": "address"
}
],
"name": "getOperatorsOf",
"outputs": [
{
"internalType": "address[]",
"name": "",
"type": "address[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "addedAmount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "operatorNotificationData",
"type": "bytes"
}
],
"name": "increaseAllowance",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "name_",
"type": "string"
},
{
"internalType": "string",
"name": "symbol_",
"type": "string"
},
{
"internalType": "address",
"name": "newOwner_",
"type": "address"
},
{
"internalType": "uint256",
"name": "lsp4TokenType_",
"type": "uint256"
},
{
"internalType": "bool",
"name": "isNonDivisible_",
"type": "bool"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bool",
"name": "force",
"type": "bool"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "mint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "tokenOwner",
"type": "address"
},
{
"internalType": "bool",
"name": "notify",
"type": "bool"
},
{
"internalType": "bytes",
"name": "operatorNotificationData",
"type": "bytes"
}
],
"name": "revokeOperator",
"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": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bool",
"name": "force",
"type": "bool"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "transfer",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "from",
"type": "address[]"
},
{
"internalType": "address[]",
"name": "to",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "amount",
"type": "uint256[]"
},
{
"internalType": "bool[]",
"name": "force",
"type": "bool[]"
},
{
"internalType": "bytes[]",
"name": "data",
"type": "bytes[]"
}
],
"name": "transferBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b612e0380620000f36000396000f3fe6080604052600436106101795760003560e01c8063715018a6116100cb5780638da5cb5b1161007f578063d72fc29a11610059578063d72fc29a146104be578063dedff9c6146104eb578063f2fde38b1461050b576101ed565b80638da5cb5b14610463578063979024211461048b578063b49506fd1461049e576101ed565b8063760d9bba116100b0578063760d9bba1461041057806378381670146104305780637f23690c14610450576101ed565b8063715018a6146103db5780637580d920146103f0576101ed565b806330d0dc371161012d57806365aeaa951161010757806365aeaa95146103585780636963d4381461037857806370a08231146103a5576101ed565b806330d0dc37146102e4578063313ce5671461030457806354f6127f1461032b576101ed565b806318160ddd1161015e57806318160ddd146102855780632bc1da82146102a45780632d7667c9146102c4576101ed565b806301ffc9a71461022e57806304689a8114610263576101ed565b366101ed57346000036101bb5760405163e5099ee360e01b81526004016101b29060208082526004908201526000604082015260600190565b60405180910390fd5b6040517f388f5adc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000366060600482101561021857828260405163e5099ee360e01b81526004016101b29291906120f0565b610222838361052b565b80519350602001915050f35b34801561023a57600080fd5b5061024e61024936600461211f565b61063a565b60405190151581526020015b60405180910390f35b34801561026f57600080fd5b5061028361027e36600461223a565b610687565b005b34801561029157600080fd5b506099545b60405190815260200161025a565b3480156102b057600080fd5b506102836102bf3660046122c9565b6107b1565b3480156102d057600080fd5b506102836102df3660046124ee565b610852565b3480156102f057600080fd5b506102836102ff3660046125c0565b61095a565b34801561031057600080fd5b50610319610a1b565b60405160ff909116815260200161025a565b34801561033757600080fd5b5061034b61034636600461262f565b610a34565b60405161025a9190612698565b34801561036457600080fd5b506102966103733660046126ab565b610a3f565b34801561038457600080fd5b506103986103933660046126de565b610aa5565b60405161025a9190612753565b3480156103b157600080fd5b506102966103c03660046127b5565b6001600160a01b03166000908152609a602052604090205490565b3480156103e757600080fd5b50610283610bf5565b3480156103fc57600080fd5b5061028361040b3660046127d0565b610c09565b34801561041c57600080fd5b5061028361042b366004612804565b610c1d565b34801561043c57600080fd5b5061028361044b366004612870565b610c45565b61028361045e3660046128c0565b610d42565b34801561046f57600080fd5b506033546040516001600160a01b03909116815260200161025a565b610283610499366004612907565b610d77565b3480156104aa57600080fd5b506102836104b93660046122c9565b610da8565b3480156104ca57600080fd5b506104de6104d93660046127b5565b610de8565b60405161025a9190612961565b3480156104f757600080fd5b506103986105063660046129ae565b610e0c565b34801561051757600080fd5b506102836105263660046127b5565b610eb7565b606060006105446000356001600160e01b031916610f47565b5090506001600160a01b038116610595576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024016101b2565b600080826001600160a01b031634878733346040516020016105ba94939291906129e3565b60408051601f19818403018152908290526105d491612a13565b60006040518083038185875af1925050503d8060008114610611576040519150601f19603f3d011682016040523d82523d6000602084013e610616565b606091505b5091509150811561062b579250610634915050565b80518060208301fd5b92915050565b60006001600160e01b031982167fc52d6008000000000000000000000000000000000000000000000000000000001480610678575061067882610ff1565b8061063457506106348261102f565b600054610100900460ff16158080156106a75750600054600160ff909116105b806106c15750303b1580156106c1575060005460ff166001145b6107335760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101b2565b6000805460ff191660011790558015610756576000805461ff0019166101001790555b610763868686868661106d565b80156107a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60006107bd8433610a3f565b905080600003610804576040517fcba6e9770000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016101b2565b60006108108483612a45565b90506108203386836001876110e5565b600033828560405160200161083793929190612a58565b60405160208183030381529060405290506107a9868261128a565b8451845181141580610865575083518114155b80610871575082518114155b8061087d575081518114155b156108b4576040517f263eee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610951576109498782815181106108d4576108d4612a89565b60200260200101518783815181106108ee576108ee612a89565b602002602001015187848151811061090857610908612a89565b602002602001015187858151811061092257610922612a89565b602002602001015187868151811061093c5761093c612a89565b6020026020010151610c1d565b6001016108b7565b50505050505050565b336001600160a01b0384161480159061097c5750336001600160a01b03851614155b156109cc576040517f1a525b320000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038085166024830152851660448201526064016101b2565b6109da8385600085856110e5565b8115610a15576000836000836040516020016109f893929190612a9f565b6040516020818303038152906040529050610a13858261128a565b505b50505050565b60985460009060ff16610a2e5750601290565b50600090565b6060610634826112b5565b6000826001600160a01b0316826001600160a01b031603610a7957506001600160a01b0381166000908152609a6020526040902054610634565b506001600160a01b038082166000908152609c6020908152604080832093861683529290522054610634565b60608167ffffffffffffffff811115610ac057610ac0612149565b604051908082528060200260200182016040528015610af357816020015b6060815260200190600190039081610ade5790505b50905060005b82811015610bee5760008030868685818110610b1757610b17612a89565b9050602002810190610b299190612aca565b604051610b37929190612b18565b600060405180830381855af49150503d8060008114610b72576040519150601f19603f3d011682016040523d82523d6000602084013e610b77565b606091505b509150915081610bc657805115610b915780518082602001fd5b6040517fb774c284000000000000000000000000000000000000000000000000000000008152600481018490526024016101b2565b80848481518110610bd957610bd9612a89565b60209081029190910101525050600101610af9565b5092915050565b610bfd611357565b610c0760006113b1565b565b610c11611357565b610a158484848461141b565b336001600160a01b03861614610c3857610c383386856114a4565b610a138585858585611554565b336001600160a01b03841614801590610c675750336001600160a01b03851614155b15610cb7576040517f98ce29450000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038085166024830152851660448201526064016101b2565b6000610cc38585610a3f565b905082811015610cff576040517f0ef76c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828103610d108587836001876110e5565b6000858285604051602001610d2793929190612a58565b6040516020818303038152906040529050610951878261128a565b610d4a611357565b3415610d695760405163f36ba73760e01b815260040160405180910390fd5b610d7382826115f7565b5050565b610d7f611357565b3415610d9e5760405163f36ba73760e01b815260040160405180910390fd5b610d738282611757565b610db63384846001856110e5565b6000338383604051602001610dcd93929190612a58565b6040516020818303038152906040529050610a15848261128a565b6001600160a01b0381166000908152609b6020526040902060609061063490611822565b6060815167ffffffffffffffff811115610e2857610e28612149565b604051908082528060200260200182016040528015610e5b57816020015b6060815260200190600190039081610e465790505b50905060005b8251811015610eb157610e8c838281518110610e7f57610e7f612a89565b60200260200101516112b5565b828281518110610e9e57610e9e612a89565b6020908102919091010152600101610e61565b50919050565b610ebf611357565b6001600160a01b038116610f3b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016101b2565b610f44816113b1565b50565b60008080610f7f7fcee78b4094da86011096000000000000000000000000000000000000000000006001600160e01b0319861661182f565b90506000610f8c826112b5565b90508051601414158015610fa05750805115155b15610fd957806040517f42bfe79f0000000000000000000000000000000000000000000000000000000081526004016101b29190612698565b610fe281612b28565b60601c95600195509350505050565b60006001600160e01b031982167fa918fa6b0000000000000000000000000000000000000000000000000000000014806106345750610634826118a0565b6000806110426301ffc9a760e01b610f47565b5090506001600160a01b03811661105c5750600092915050565b61106681846118ee565b9392505050565b600054610100900460ff166110d85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016101b2565b610a13858585858561198c565b6001600160a01b038416611125576040517f6355e76600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316846001600160a01b031603611170576040517fdab7504700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038086166000908152609c602090815260408083209388168352929052208390558215611212576001600160a01b0385166000908152609b602052604090206111c09085611a1a565b5082856001600160a01b0316856001600160a01b03167ff772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d846040516112059190612698565b60405180910390a4610a13565b6001600160a01b0385166000908152609b602052604090206112349085611a2f565b50811515856001600160a01b0316856001600160a01b03167f0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd41678460405161127b9190612698565b60405180910390a45050505050565b610d73827f386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc83611a44565b60008181526097602052604090208054606091906112d290612b64565b80601f01602080910402602001604051908101604052809291908181526020018280546112fe90612b64565b801561134b5780601f106113205761010080835404028352916020019161134b565b820191906000526020600020905b81548152906001019060200180831161132e57829003601f168201915b50505050509050919050565b6033546001600160a01b03163314610c075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b2565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03841661144257604051630d2d5ec360e41b815260040160405180910390fd5b611450600085858585610a13565b61145e600085858585611ad8565b61146c600085858585610a13565b6000336000868685604051602001611488959493929190612b98565b6040516020818303038152906040529050610a13858483611c1a565b6001600160a01b038083166000908152609c60209081526040808320938716835292905220548015806114d657508082115b1561152e576040517ff3a6b6910000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301526024820183905285166044820152606481018390526084016101b2565b610a15838561153d8585612bd2565b6000604051806020016040528060008152506110e5565b6001600160a01b038516158061157157506001600160a01b038416155b1561158f57604051630d2d5ec360e41b815260040160405180910390fd5b61159c8585858585610a13565b6115a98585858585611ad8565b6115b68585858585610a13565b600033868686856040516020016115d1959493929190612b98565b60405160208183030381529060405290506115ec8682611d0d565b6107a9858483611c1a565b7f2145e1d6d074577dc71ef54c3807742b41b053a9352ae6b491331509acb9750f8201611650576040517f85c169bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd0f59754f88971fe6bc5a6618cc9d5f1e859c58d16b22d1c7b2d3e2b246cd8aa82016116a9576040517f76755b3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f1fd9e056a24d14c4abc642fcc325992a946906d0dbc57dd70278aaf12842024d8201611702576040517f4ef6d7fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260976020526040902061171a8282612c2b565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b28260405161174b9190612698565b60405180910390a25050565b8051825114611792576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516000036117cd576040517f97da5f9500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561181d576118158382815181106117ee576117ee612a89565b602002602001015183838151811061180857611808612a89565b60200260200101516115f7565b6001016117d0565b505050565b6060600061106683611d38565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190526bffffffffffffffffffffffff198416602c8301529182910160405160208183030381529060405290508061189890612ceb565b949350505050565b60006001600160e01b031982167f629aa69400000000000000000000000000000000000000000000000000000000148061063457506301ffc9a760e01b6001600160e01b0319831614610634565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015611975575060208210155b80156119815750600081115b979650505050505050565b600054610100900460ff166119f75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016101b2565b611a0385858585611d93565b6098805460ff191691151591909117905550505050565b6000611066836001600160a01b038416611f03565b6000611066836001600160a01b038416611f52565b611a5e6001600160a01b038416631aed5a8560e21b6118ee565b1561181d57604051631aed5a8560e21b81526001600160a01b03841690636bb56a1490611a919085908590600401612d0f565b6000604051808303816000875af1158015611ab0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a159190810190612d28565b6001600160a01b038516611b03578260996000828254611af89190612a45565b90915550611b8e9050565b6001600160a01b0385166000908152609a602052604090205483811015611b6f576040517f08d47949000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b0387166024820152604481018590526064016101b2565b6001600160a01b0386166000908152609a602052604090209084900390555b6001600160a01b038416611baa57609980548490039055611bc9565b6001600160a01b0384166000908152609a602052604090208054840190555b836001600160a01b0316856001600160a01b0316336001600160a01b03167f3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a686868660405161127b93929190612d96565b611c2b83631aed5a8560e21b6118ee565b15611c7e57604051631aed5a8560e21b81526001600160a01b03841690636bb56a1490611a91907f20804611b3e2ea21c480dc465142210acf4a2485947541770ec1fb87dee4a55c908590600401612d0f565b8161181d576001600160a01b0383163b15611cd0576040517fa608fbb60000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101b2565b6040517f26c247f40000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016101b2565b610d73827f429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea83611a44565b60608160000180548060200260200160405190810160405280929190818152602001828054801561134b57602002820191906000526020600020905b815481526020019060010190808311611d745750505050509050919050565b600054610100900460ff16611dfe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016101b2565b611e0782612045565b611e697feafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c60001b6040518060400160405280600481526020017fa4d9662400000000000000000000000000000000000000000000000000000000815250611702565b611e937fdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af185611702565b611ebd7f2f0a68ab07768e01943a599e73362a0e17a63a72e94dd2e384d2c1d4db93275684611702565b6040805160208101839052610a15917fe0261fa95db2eb3b5439bd033cda66d56b96f92f243a8228fd87550ed7bdfdb39101604051602081830303815290604052611702565b6000818152600183016020526040812054611f4a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610634565b506000610634565b6000818152600183016020526040812054801561203b576000611f76600183612bd2565b8554909150600090611f8a90600190612bd2565b9050818114611fef576000866000018281548110611faa57611faa612a89565b9060005260206000200154905080876000018481548110611fcd57611fcd612a89565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061200057612000612db7565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610634565b6000915050610634565b600054610100900460ff166120b05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016101b2565b6001600160a01b038116610f3b576040517f1ad8836c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561213157600080fd5b81356001600160e01b03198116811461106657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561218857612188612149565b604052919050565b600067ffffffffffffffff8211156121aa576121aa612149565b50601f01601f191660200190565b600082601f8301126121c957600080fd5b81356121dc6121d782612190565b61215f565b8181528460208386010111156121f157600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160a01b038116811461222557600080fd5b919050565b8035801515811461222557600080fd5b600080600080600060a0868803121561225257600080fd5b853567ffffffffffffffff8082111561226a57600080fd5b61227689838a016121b8565b9650602088013591508082111561228c57600080fd5b50612299888289016121b8565b9450506122a86040870161220e565b9250606086013591506122bd6080870161222a565b90509295509295909350565b6000806000606084860312156122de57600080fd5b6122e78461220e565b925060208401359150604084013567ffffffffffffffff81111561230a57600080fd5b612316868287016121b8565b9150509250925092565b600067ffffffffffffffff82111561233a5761233a612149565b5060051b60200190565b600082601f83011261235557600080fd5b813560206123656121d783612320565b82815260059290921b8401810191818101908684111561238457600080fd5b8286015b848110156123a6576123998161220e565b8352918301918301612388565b509695505050505050565b600082601f8301126123c257600080fd5b813560206123d26121d783612320565b82815260059290921b840181019181810190868411156123f157600080fd5b8286015b848110156123a657803583529183019183016123f5565b600082601f83011261241d57600080fd5b8135602061242d6121d783612320565b82815260059290921b8401810191818101908684111561244c57600080fd5b8286015b848110156123a6576124618161222a565b8352918301918301612450565b600082601f83011261247f57600080fd5b8135602061248f6121d783612320565b82815260059290921b840181019181810190868411156124ae57600080fd5b8286015b848110156123a657803567ffffffffffffffff8111156124d25760008081fd5b6124e08986838b01016121b8565b8452509183019183016124b2565b600080600080600060a0868803121561250657600080fd5b853567ffffffffffffffff8082111561251e57600080fd5b61252a89838a01612344565b9650602088013591508082111561254057600080fd5b61254c89838a01612344565b9550604088013591508082111561256257600080fd5b61256e89838a016123b1565b9450606088013591508082111561258457600080fd5b61259089838a0161240c565b935060808801359150808211156125a657600080fd5b506125b38882890161246e565b9150509295509295909350565b600080600080608085870312156125d657600080fd5b6125df8561220e565b93506125ed6020860161220e565b92506125fb6040860161222a565b9150606085013567ffffffffffffffff81111561261757600080fd5b612623878288016121b8565b91505092959194509250565b60006020828403121561264157600080fd5b5035919050565b60005b8381101561266357818101518382015260200161264b565b50506000910152565b60008151808452612684816020860160208601612648565b601f01601f19169290920160200192915050565b602081526000611066602083018461266c565b600080604083850312156126be57600080fd5b6126c78361220e565b91506126d56020840161220e565b90509250929050565b600080602083850312156126f157600080fd5b823567ffffffffffffffff8082111561270957600080fd5b818501915085601f83011261271d57600080fd5b81358181111561272c57600080fd5b8660208260051b850101111561274157600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156127a857603f1988860301845261279685835161266c565b9450928501929085019060010161277a565b5092979650505050505050565b6000602082840312156127c757600080fd5b6110668261220e565b600080600080608085870312156127e657600080fd5b6127ef8561220e565b9350602085013592506125fb6040860161222a565b600080600080600060a0868803121561281c57600080fd5b6128258661220e565b94506128336020870161220e565b9350604086013592506128486060870161222a565b9150608086013567ffffffffffffffff81111561286457600080fd5b6125b3888289016121b8565b6000806000806080858703121561288657600080fd5b61288f8561220e565b935061289d6020860161220e565b925060408501359150606085013567ffffffffffffffff81111561261757600080fd5b600080604083850312156128d357600080fd5b82359150602083013567ffffffffffffffff8111156128f157600080fd5b6128fd858286016121b8565b9150509250929050565b6000806040838503121561291a57600080fd5b823567ffffffffffffffff8082111561293257600080fd5b61293e868387016123b1565b9350602085013591508082111561295457600080fd5b506128fd8582860161246e565b6020808252825182820181905260009190848201906040850190845b818110156129a25783516001600160a01b03168352928401929184019160010161297d565b50909695505050505050565b6000602082840312156129c057600080fd5b813567ffffffffffffffff8111156129d757600080fd5b611898848285016123b1565b8385823760609290921b6bffffffffffffffffffffffff1916919092019081526014810191909152603401919050565b60008251612a25818460208701612648565b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561063457610634612a2f565b6001600160a01b0384168152826020820152606060408201526000612a80606083018461266c565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038416815260ff83166020820152606060408201526000612a80606083018461266c565b6000808335601e19843603018112612ae157600080fd5b83018035915067ffffffffffffffff821115612afc57600080fd5b602001915036819003821315612b1157600080fd5b9250929050565b8183823760009101908152919050565b805160208201516bffffffffffffffffffffffff198082169291906014831015612b5c5780818460140360031b1b83161693505b505050919050565b600181811c90821680612b7857607f821691505b602082108103610eb157634e487b7160e01b600052602260045260246000fd5b60006001600160a01b038088168352808716602084015280861660408401525083606083015260a0608083015261198160a083018461266c565b8181038181111561063457610634612a2f565b601f82111561181d57600081815260208120601f850160051c81016020861015612c0c5750805b601f850160051c820191505b818110156107a957828155600101612c18565b815167ffffffffffffffff811115612c4557612c45612149565b612c5981612c538454612b64565b84612be5565b602080601f831160018114612c8e5760008415612c765750858301515b600019600386901b1c1916600185901b1785556107a9565b600085815260208120601f198616915b82811015612cbd57888601518255948401946001909101908401612c9e565b5085821015612cdb5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516020808301519190811015610eb15760001960209190910360031b1b16919050565b828152604060208201526000611898604083018461266c565b600060208284031215612d3a57600080fd5b815167ffffffffffffffff811115612d5157600080fd5b8201601f81018413612d6257600080fd5b8051612d706121d782612190565b818152856020838501011115612d8557600080fd5b612a80826020830160208601612648565b8381528215156020820152606060408201526000612a80606083018461266c565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220e6ca6353185bf87107a47454fe3e09347bb0890dde23d6111fed236bf5c02b8564736f6c63430008110033",
"deployedBytecode": "0x6080604052600436106101795760003560e01c8063715018a6116100cb5780638da5cb5b1161007f578063d72fc29a11610059578063d72fc29a146104be578063dedff9c6146104eb578063f2fde38b1461050b576101ed565b80638da5cb5b14610463578063979024211461048b578063b49506fd1461049e576101ed565b8063760d9bba116100b0578063760d9bba1461041057806378381670146104305780637f23690c14610450576101ed565b8063715018a6146103db5780637580d920146103f0576101ed565b806330d0dc371161012d57806365aeaa951161010757806365aeaa95146103585780636963d4381461037857806370a08231146103a5576101ed565b806330d0dc37146102e4578063313ce5671461030457806354f6127f1461032b576101ed565b806318160ddd1161015e57806318160ddd146102855780632bc1da82146102a45780632d7667c9146102c4576101ed565b806301ffc9a71461022e57806304689a8114610263576101ed565b366101ed57346000036101bb5760405163e5099ee360e01b81526004016101b29060208082526004908201526000604082015260600190565b60405180910390fd5b6040517f388f5adc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000366060600482101561021857828260405163e5099ee360e01b81526004016101b29291906120f0565b610222838361052b565b80519350602001915050f35b34801561023a57600080fd5b5061024e61024936600461211f565b61063a565b60405190151581526020015b60405180910390f35b34801561026f57600080fd5b5061028361027e36600461223a565b610687565b005b34801561029157600080fd5b506099545b60405190815260200161025a565b3480156102b057600080fd5b506102836102bf3660046122c9565b6107b1565b3480156102d057600080fd5b506102836102df3660046124ee565b610852565b3480156102f057600080fd5b506102836102ff3660046125c0565b61095a565b34801561031057600080fd5b50610319610a1b565b60405160ff909116815260200161025a565b34801561033757600080fd5b5061034b61034636600461262f565b610a34565b60405161025a9190612698565b34801561036457600080fd5b506102966103733660046126ab565b610a3f565b34801561038457600080fd5b506103986103933660046126de565b610aa5565b60405161025a9190612753565b3480156103b157600080fd5b506102966103c03660046127b5565b6001600160a01b03166000908152609a602052604090205490565b3480156103e757600080fd5b50610283610bf5565b3480156103fc57600080fd5b5061028361040b3660046127d0565b610c09565b34801561041c57600080fd5b5061028361042b366004612804565b610c1d565b34801561043c57600080fd5b5061028361044b366004612870565b610c45565b61028361045e3660046128c0565b610d42565b34801561046f57600080fd5b506033546040516001600160a01b03909116815260200161025a565b610283610499366004612907565b610d77565b3480156104aa57600080fd5b506102836104b93660046122c9565b610da8565b3480156104ca57600080fd5b506104de6104d93660046127b5565b610de8565b60405161025a9190612961565b3480156104f757600080fd5b506103986105063660046129ae565b610e0c565b34801561051757600080fd5b506102836105263660046127b5565b610eb7565b606060006105446000356001600160e01b031916610f47565b5090506001600160a01b038116610595576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081526001600160e01b03196000351660048201526024016101b2565b600080826001600160a01b031634878733346040516020016105ba94939291906129e3565b60408051601f19818403018152908290526105d491612a13565b60006040518083038185875af1925050503d8060008114610611576040519150601f19603f3d011682016040523d82523d6000602084013e610616565b606091505b5091509150811561062b579250610634915050565b80518060208301fd5b92915050565b60006001600160e01b031982167fc52d6008000000000000000000000000000000000000000000000000000000001480610678575061067882610ff1565b8061063457506106348261102f565b600054610100900460ff16158080156106a75750600054600160ff909116105b806106c15750303b1580156106c1575060005460ff166001145b6107335760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101b2565b6000805460ff191660011790558015610756576000805461ff0019166101001790555b610763868686868661106d565b80156107a9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b60006107bd8433610a3f565b905080600003610804576040517fcba6e9770000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016101b2565b60006108108483612a45565b90506108203386836001876110e5565b600033828560405160200161083793929190612a58565b60405160208183030381529060405290506107a9868261128a565b8451845181141580610865575083518114155b80610871575082518114155b8061087d575081518114155b156108b4576040517f263eee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610951576109498782815181106108d4576108d4612a89565b60200260200101518783815181106108ee576108ee612a89565b602002602001015187848151811061090857610908612a89565b602002602001015187858151811061092257610922612a89565b602002602001015187868151811061093c5761093c612a89565b6020026020010151610c1d565b6001016108b7565b50505050505050565b336001600160a01b0384161480159061097c5750336001600160a01b03851614155b156109cc576040517f1a525b320000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038085166024830152851660448201526064016101b2565b6109da8385600085856110e5565b8115610a15576000836000836040516020016109f893929190612a9f565b6040516020818303038152906040529050610a13858261128a565b505b50505050565b60985460009060ff16610a2e5750601290565b50600090565b6060610634826112b5565b6000826001600160a01b0316826001600160a01b031603610a7957506001600160a01b0381166000908152609a6020526040902054610634565b506001600160a01b038082166000908152609c6020908152604080832093861683529290522054610634565b60608167ffffffffffffffff811115610ac057610ac0612149565b604051908082528060200260200182016040528015610af357816020015b6060815260200190600190039081610ade5790505b50905060005b82811015610bee5760008030868685818110610b1757610b17612a89565b9050602002810190610b299190612aca565b604051610b37929190612b18565b600060405180830381855af49150503d8060008114610b72576040519150601f19603f3d011682016040523d82523d6000602084013e610b77565b606091505b509150915081610bc657805115610b915780518082602001fd5b6040517fb774c284000000000000000000000000000000000000000000000000000000008152600481018490526024016101b2565b80848481518110610bd957610bd9612a89565b60209081029190910101525050600101610af9565b5092915050565b610bfd611357565b610c0760006113b1565b565b610c11611357565b610a158484848461141b565b336001600160a01b03861614610c3857610c383386856114a4565b610a138585858585611554565b336001600160a01b03841614801590610c675750336001600160a01b03851614155b15610cb7576040517f98ce29450000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038085166024830152851660448201526064016101b2565b6000610cc38585610a3f565b905082811015610cff576040517f0ef76c3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828103610d108587836001876110e5565b6000858285604051602001610d2793929190612a58565b6040516020818303038152906040529050610951878261128a565b610d4a611357565b3415610d695760405163f36ba73760e01b815260040160405180910390fd5b610d7382826115f7565b5050565b610d7f611357565b3415610d9e5760405163f36ba73760e01b815260040160405180910390fd5b610d738282611757565b610db63384846001856110e5565b6000338383604051602001610dcd93929190612a58565b6040516020818303038152906040529050610a15848261128a565b6001600160a01b0381166000908152609b6020526040902060609061063490611822565b6060815167ffffffffffffffff811115610e2857610e28612149565b604051908082528060200260200182016040528015610e5b57816020015b6060815260200190600190039081610e465790505b50905060005b8251811015610eb157610e8c8