@zoralabs/openzeppelin-contracts-upgradeable
Version:
Secure Smart Contract library for Solidity
824 lines • 92.6 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "ERC1155PresetMinterPauserUpgradeable",
"sourceName": "contracts/token/ERC1155/presets/ERC1155PresetMinterPauserUpgradeable.sol",
"abi": [
{
"inputs": [],
"name": "ERC1155_ACCOUNTS_AND_IDS_LENGTH_MISMATCH",
"type": "error"
},
{
"inputs": [],
"name": "ERC1155_ADDRESS_ZERO_IS_NOT_A_VALID_OWNER",
"type": "error"
},
{
"inputs": [],
"name": "ERC1155_BURN_AMOUNT_EXCEEDS_BALANCE",
"type": "error"
},
{
"inputs": [],
"name": "ERC1155_BURN_FROM_ZERO_ADDRESS",
"type": "error"
},
{
"inputs": [],
"name": "ERC1155_CALLER_IS_NOT_TOKEN_OWNER_OR_APPROVED",
"type": "error"
},
{
"inputs": [],
"name": "ERC1155_ERC1155RECEIVER_REJECTED_TOKENS",
"type": "error"
},
{
"inputs": [],
"name": "ERC1155_IDS_AND_AMOUNTS_LENGTH_MISMATCH",
"type": "error"
},
{
"inputs": [],
"name": "ERC1155_INSUFFICIENT_BALANCE_FOR_TRANSFER",
"type": "error"
},
{
"inputs": [],
"name": "ERC1155_MINT_TO_ZERO_ADDRESS",
"type": "error"
},
{
"inputs": [],
"name": "ERC1155_SETTING_APPROVAL_FOR_SELF",
"type": "error"
},
{
"inputs": [],
"name": "ERC1155_TRANSFER_TO_NON_ERC1155RECEIVER_IMPLEMENTER",
"type": "error"
},
{
"inputs": [],
"name": "ERC1155_TRANSFER_TO_ZERO_ADDRESS",
"type": "error"
},
{
"inputs": [],
"name": "INITIALIZABLE_CONTRACT_ALREADY_INITIALIZED",
"type": "error"
},
{
"inputs": [],
"name": "INITIALIZABLE_CONTRACT_IS_NOT_INITIALIZING",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Paused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"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": "ids",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
}
],
"name": "TransferBatch",
"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": "id",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "TransferSingle",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "value",
"type": "string"
},
{
"indexed": true,
"internalType": "uint256",
"name": "id",
"type": "uint256"
}
],
"name": "URI",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Unpaused",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MINTER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PAUSER_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "ids",
"type": "uint256[]"
}
],
"name": "balanceOfBatch",
"outputs": [
{
"internalType": "uint256[]",
"name": "batchBalances",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "ids",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
}
],
"name": "burnBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "getRoleMember",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleMemberCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "mint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "ids",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "mintBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "pause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "ids",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeBatchTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "unpause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "uri",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b50614944806100206000396000f3fe608060405234801561001057600080fd5b50600436106101ad5760003560e01c80638456cb59116100ee578063d539139311610097578063e985e9c511610071578063e985e9c51461049e578063f242432a146104ce578063f5298aca146104ea578063f62d188814610506576101ad565b8063d539139314610446578063d547741f14610464578063e63ab1e914610480576101ad565b8063a217fddf116100c8578063a217fddf146103dc578063a22cb465146103fa578063ca15c87314610416576101ad565b80638456cb59146103725780639010d07c1461037c57806391d14854146103ac576101ad565b80632f2ff15d1161015b5780634e1273f4116101355780634e1273f4146102ec5780635c975abb1461031c5780636b20c4541461033a578063731133e914610356576101ad565b80632f2ff15d146102aa57806336568abe146102c65780633f4ba83a146102e2576101ad565b80631f7fdffa1161018c5780631f7fdffa14610242578063248a9ca31461025e5780632eb2c2d61461028e576101ad565b8062fdd58e146101b257806301ffc9a7146101e25780630e89341c14610212575b600080fd5b6101cc60048036038101906101c791906131fd565b610522565b6040516101d9919061324c565b60405180910390f35b6101fc60048036038101906101f791906132bf565b6105e2565b6040516102099190613307565b60405180910390f35b61022c60048036038101906102279190613322565b6105f4565b60405161023991906133e8565b60405180910390f35b61025c60048036038101906102579190613607565b610688565b005b610278600480360381019061027391906136f8565b61070a565b6040516102859190613734565b60405180910390f35b6102a860048036038101906102a3919061374f565b61072a565b005b6102c460048036038101906102bf919061381e565b6107c6565b005b6102e060048036038101906102db919061381e565b6107e7565b005b6102ea61086a565b005b61030660048036038101906103019190613921565b6108e4565b6040516103139190613a57565b60405180910390f35b6103246109ec565b6040516103319190613307565b60405180910390f35b610354600480360381019061034f9190613a79565b610a04565b005b610370600480360381019061036b9190613b04565b610aa1565b005b61037a610b23565b005b61039660048036038101906103919190613b87565b610b9d565b6040516103a39190613bd6565b60405180910390f35b6103c660048036038101906103c1919061381e565b610bcc565b6040516103d39190613307565b60405180910390f35b6103e4610c37565b6040516103f19190613734565b60405180910390f35b610414600480360381019061040f9190613c1d565b610c3e565b005b610430600480360381019061042b91906136f8565b610c54565b60405161043d919061324c565b60405180910390f35b61044e610c78565b60405161045b9190613734565b60405180910390f35b61047e6004803603810190610479919061381e565b610c9c565b005b610488610cbd565b6040516104959190613734565b60405180910390f35b6104b860048036038101906104b39190613c5d565b610ce1565b6040516104c59190613307565b60405180910390f35b6104e860048036038101906104e39190613c9d565b610d75565b005b61050460048036038101906104ff9190613d34565b610e11565b005b610520600480360381019061051b9190613e28565b610eae565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610589576040517f8620cc3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c9600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60006105ed82610fe8565b9050919050565b606060cb805461060390613ea0565b80601f016020809104026020016040519081016040528092919081815260200182805461062f90613ea0565b801561067c5780601f106106515761010080835404028352916020019161067c565b820191906000526020600020905b81548152906001019060200180831161065f57829003601f168201915b50505050509050919050565b6106b97f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66106b46110ca565b610bcc565b6106f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ef90613f43565b60405180910390fd5b610704848484846110d2565b50505050565b600060656000838152602001908152602001600020600101549050919050565b6107326110ca565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561077b5750610779856107746110ca565b610ce1565b155b156107b2576040517ff8ba805400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107bf85858585856112ea565b5050505050565b6107cf8261070a565b6107d8816115f0565b6107e28383611604565b505050565b6107ef6110ca565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461085c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085390613fd5565b60405180910390fd5b6108668282611638565b5050565b61089b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6108966110ca565b610bcc565b6108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d190614067565b60405180910390fd5b6108e261166c565b565b606060008351905082518114610926576040517f4ce4cfdc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff8111156109405761093f61340f565b5b60405190808252806020026020018201604052801561096e5781602001602082028036833780820191505090505b50915060005b818110156109e4576109ba85828151811061099257610991614087565b5b60200260200101518583815181106109ad576109ac614087565b5b6020026020010151610522565b8382815181106109cd576109cc614087565b5b602002602001018181525050806001019050610974565b505092915050565b600061012d60009054906101000a900460ff16905090565b610a0c6110ca565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a525750610a5183610a4c6110ca565b610ce1565b5b610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890614128565b60405180910390fd5b610a9c8383836116d0565b505050565b610ad27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610acd6110ca565b610bcc565b610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890613f43565b60405180910390fd5b610b1d84848484611980565b50505050565b610b547f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b4f6110ca565b610bcc565b610b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8a906141ba565b60405180910390fd5b610b9b611b0c565b565b6000610bc48260976000868152602001908152602001600020611b7090919063ffffffff16565b905092915050565b60006065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b610c50610c496110ca565b8383611b8a565b5050565b6000610c7160976000848152602001908152602001600020611ced565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610ca58261070a565b610cae816115f0565b610cb88383611638565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b600060ca60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610d7d6110ca565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610dc65750610dc485610dbf6110ca565b610ce1565b155b15610dfd576040517ff8ba805400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e0a8585858585611d02565b5050505050565b610e196110ca565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610e5f5750610e5e83610e596110ca565b610ce1565b5b610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590614128565b60405180910390fd5b610ea9838383611f72565b505050565b60008060019054906101000a900460ff16159050801580610ee1575060008060009054906101000a900460ff1660ff1614155b8015610f0e5750610ef13061218c565b80610f0d5750600160008054906101000a900460ff1660ff1614155b5b15610f45576040517f7ab8448200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610f82576001600060016101000a81548160ff0219169083151502179055505b610f8b826121af565b8015610fe45760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610fdb919061422c565b60405180910390a15b5050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806110b357507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806110c357506110c282612212565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611138576040517f8113ddc800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008351905082518114611178576040517ff9532c3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111826110ca565b90506111938160008888888861228c565b60005b82811015611244578481815181106111b1576111b0614087565b5b602002602001015160c960008884815181106111d0576111cf614087565b5b6020026020010151815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112329190614276565b92505081905550806001019050611196565b508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb88886040516112bc9291906142cc565b60405180910390a46112d3816000888888886122a2565b6112e2816000888888886122aa565b505050505050565b6000835190508251811461132a576040517f4ce4cfdc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611390576040517f714fd84400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061139a6110ca565b90506113aa81888888888861228c565b6000806000805b85811015611549578881815181106113cc576113cb614087565b5b602002602001015193508781815181106113e9576113e8614087565b5b6020026020010151925060c9600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915082821015611480576040517fdd543d5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260c9600086815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114e09190614276565b9250508190555082820360c9600086815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060010190506113b1565b508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b6040516115c09291906142cc565b60405180910390a46115d6848b8b8b8b8b6122a2565b6115e4848b8b8b8b8b6122aa565b50505050505050505050565b611601816115fc6110ca565b61246f565b50565b61160e82826124f4565b61163381609760008581526020019081526020016000206125d590919063ffffffff16565b505050565b6116428282612605565b61166781609760008581526020019081526020016000206126e790919063ffffffff16565b505050565b611674612717565b600061012d60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6116b96110ca565b6040516116c69190613bd6565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611736576040517f45d40ad500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008251905081518114611776576040517ff9532c3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006117806110ca565b90506117a08186600087876040518060200160405280600081525061228c565b6000806000805b858110156118d8578781815181106117c2576117c1614087565b5b602002602001015193508681815181106117df576117de614087565b5b6020026020010151925060c9600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915082821015611876576040517f5f896ec200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82820360c9600086815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060010190506117a7565b50600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8a8a6040516119509291906142cc565b60405180910390a4611976848960008a8a604051806020016040528060008152506122a2565b5050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036119e6576040517f8113ddc800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006119f06110ca565b9050611a0181600087878787612760565b8260c9600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a619190614276565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611adf929190614303565b60405180910390a4611af681600087878787612768565b611b0581600087878787612770565b5050505050565b611b14612935565b600161012d60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611b596110ca565b604051611b669190613bd6565b60405180910390a1565b6000611b7f836000018361297f565b60001c905092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611bef576040517fd67f41b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ca60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ce09190613307565b60405180910390a3505050565b6000611cfb826000016129aa565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d68576040517f714fd84400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d726110ca565b9050611d82818787878787612760565b600060c9600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611e11576040517fdd543d5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83810360c9600087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360c9600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec89190614276565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611f45929190614303565b60405180910390a4611f5b828888888888612768565b611f69828888888888612770565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fd8576040517f45d40ad500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611fe26110ca565b905061200281856000868660405180602001604052806000815250612760565b600060c9600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612091576040517f5f896ec200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82810360c9600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161215f929190614303565b60405180910390a461218582866000878760405180602001604052806000815250612768565b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff166121f5576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121fe816129bb565b612206612a0d565b61220f81612a71565b50565b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612285575061228482612b30565b5b9050919050565b61229a868686868686612baa565b505050505050565b505050505050565b6122c98473ffffffffffffffffffffffffffffffffffffffff1661218c565b15612467578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161230f959493929190614381565b6020604051808303816000875af192505050801561234b57506040513d601f19601f8201168201806040525081019061234891906143fe565b60015b6123e757612357614438565b806308c379a0036123b3575061236b61445a565b8061237657506123b5565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa91906133e8565b60405180910390fd5b505b6040517fefab692200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612465576040517ffeff9fd400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b505050505050565b6124798282610bcc565b6124f05761248681612c08565b6124948360001c6020612c35565b6040516020016124a59291906145be565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e791906133e8565b60405180910390fd5b5050565b6124fe8282610bcc565b6125d15760016065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506125766110ca565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006125fd836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612e71565b905092915050565b61260f8282610bcc565b156126e35760006065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506126886110ca565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b600061270f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612ee1565b905092915050565b61271f6109ec565b61275e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275590614644565b60405180910390fd5b565b505050505050565b505050505050565b61278f8473ffffffffffffffffffffffffffffffffffffffff1661218c565b1561292d578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016127d5959493929190614664565b6020604051808303816000875af192505050801561281157506040513d601f19601f8201168201806040525081019061280e91906143fe565b60015b6128ad5761281d614438565b806308c379a003612879575061283161445a565b8061283c575061287b565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287091906133e8565b60405180910390fd5b505b6040517fefab692200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461292b576040517ffeff9fd400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b505050505050565b61293d6109ec565b1561297d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129749061470a565b60405180910390fd5b565b600082600001828154811061299757612996614087565b5b9060005260206000200154905092915050565b600081600001805490509050919050565b600060019054906101000a900460ff16612a01576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a0a81612ff5565b50565b600060019054906101000a900460ff16612a53576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061012d60006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff16612ab7576040517f96bfb10000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612acb6000801b612ac66110ca565b61300f565b612afc7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6612af76110ca565b61300f565b612b2d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a612b286110ca565b61300f565b50565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612ba35750612ba28261301d565b5b9050919050565b612bb8868686868686613087565b612bc06109ec565b15612c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf79061479c565b60405180910390fd5b505050505050565b6060612c2e8273ffffffffffffffffffffffffffffffffffffffff16601460ff16612c35565b9050919050565b606060006002836002612c4891906147bc565b612c529190614276565b67ffffffffffffffff811115612c6b57612c6a61340f565b5b6040519080825280601f01601f191660200182016040528015612c9d5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612cd557612cd4614087565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612d3957612d38614087565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612d7991906147bc565b612d839190614276565b90505b6001811115612e23577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612dc557612dc4614087565b5b1a60f81b828281518110612ddc57612ddb614087565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612e1c90614816565b9050612d86565b5060008414612e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5e9061488b565b60405180910390fd5b8091505092915050565b6000612e7d838361308f565b612ed6578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612edb565b600090505b92915050565b60008083600101600084815260200190815260200160002054905060008114612fe9576000600182612f1391906148ab565b9050600060018660000180549050612f2b91906148ab565b9050818114612f9a576000866000018281548110612f4c57612f4b614087565b5b9060005260206000200154905080876000018481548110612f7057612f6f614087565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480612fae57612fad6148df565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612fef565b60009150505b92915050565b8060cb908051906020019061300b9291906130b2565b5050565b6130198282611604565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050505050565b600080836001016000848152602001908152602001600020541415905092915050565b8280546130be90613ea0565b90600052602060002090601f0160209004810192826130e05760008555613127565b82601f106130f957805160ff1916838001178555613127565b82800160010185558215613127579182015b8281111561312657825182559160200191906001019061310b565b5b5090506131349190613138565b5090565b5b80821115613151576000816000905550600101613139565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061319482613169565b9050919050565b6131a481613189565b81146131af57600080fd5b50565b6000813590506131c18161319b565b92915050565b6000819050919050565b6131da816131c7565b81146131e557600080fd5b50565b6000813590506131f7816131d1565b92915050565b600080604083850312156132145761321361315f565b5b6000613222858286016131b2565b9250506020613233858286016131e8565b9150509250929050565b613246816131c7565b82525050565b6000602082019050613261600083018461323d565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61329c81613267565b81146132a757600080fd5b50565b6000813590506132b981613293565b92915050565b6000602082840312156132d5576132d461315f565b5b60006132e3848285016132aa565b91505092915050565b60008115159050919050565b613301816132ec565b82525050565b600060208201905061331c60008301846132f8565b92915050565b6000602082840312156133385761333761315f565b5b6000613346848285016131e8565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561338957808201518184015260208101905061336e565b83811115613398576000848401525b50505050565b6000601f19601f8301169050919050565b60006133ba8261334f565b6133c4818561335a565b93506133d481856020860161336b565b6133dd8161339e565b840191505092915050565b6000602082019050818103600083015261340281846133af565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6134478261339e565b810181811067ffffffffffffffff821117156134665761346561340f565b5b80604052505050565b6000613479613155565b9050613485828261343e565b919050565b600067ffffffffffffffff8211156134a5576134a461340f565b5b602082029050602081019050919050565b600080fd5b60006134ce6134c98461348a565b61346f565b905080838252602082019050602084028301858111156134f1576134f06134b6565b5b835b8181101561351a578061350688826131e8565b8452602084019350506020810190506134f3565b5050509392505050565b600082601f8301126135395761353861340a565b5b81356135498482602086016134bb565b91505092915050565b600080fd5b600067ffffffffffffffff8211156135725761357161340f565b5b61357b8261339e565b9050602081019050919050565b82818337600083830152505050565b60006135aa6135a584613557565b61346f565b9050828152602081018484840111156135c6576135c5613552565b5b6135d1848285613588565b509392505050565b600082601f8301126135ee576135ed61340a565b5b81356135fe848260208601613597565b91505092915050565b600080600080608085870312156136215761362061315f565b5b600061362f878288016131b2565b945050602085013567ffffffffffffffff8111156136505761364f613164565b5b61365c87828801613524565b935050604085013567ffffffffffffffff81111561367d5761367c613164565b5b61368987828801613524565b925050606085013567ffffffffffffffff8111156136aa576136a9613164565b5b6136b6878288016135d9565b91505092959194509250565b6000819050919050565b6136d5816136c2565b81146136e057600080fd5b50565b6000813590506136f2816136cc565b92915050565b60006020828403121561370e5761370d61315f565b5b600061371c848285016136e3565b91505092915050565b61372e816136c2565b82525050565b60006020820190506137496000830184613725565b92915050565b600080600080600060a0868803121561376b5761376a61315f565b5b6000613779888289016131b2565b955050602061378a888289016131b2565b945050604086013567ffffffffffffffff8111156137ab576137aa613164565b5b6137b788828901613524565b935050606086013567ffffffffffffffff8111156137d8576137d7613164565b5b6137e488828901613524565b925050608086013567ffffffffffffffff81111561380557613804613164565b5b613811888289016135d9565b9150509295509295909350565b600080604083850312156138355761383461315f565b5b6000613843858286016136e3565b9250506020613854858286016131b2565b9150509250929050565b600067ffffffffffffffff8211156138795761387861340f565b5b602082029050602081019050919050565b600061389d6138988461385e565b61346f565b905080838252602082019050602084028301858111156138c0576138bf6134b6565b5b835b818110156138e957806138d588826131b2565b8452602084019350506020810190506138c2565b5050509392505050565b600082601f8301126139085761390761340a565b5b813561391884826020860161388a565b91505092915050565b600080604083850312156139385761393761315f565b5b600083013567ffffffffffffffff81111561395657613955613164565b5b613962858286016138f3565b925050602083013567ffffffffffffffff81111561398357613982613164565b5b61398f85828601613524565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139ce816131c7565b82525050565b60006139e083836139c5565b60208301905092915050565b6000602082019050919050565b6000613a0482613999565b613a0e81856139a4565b9350613a19836139b5565b8060005b83811015613a4a578151613a3188826139d4565b9750613a3c836139ec565b925050600181019050613a1d565b5085935050505092915050565b60006020820190508181036000830152613a7181846139f9565b905092915050565b600080600060608486031215613a9257613a9161315f565b5b6000613aa0868287016131b2565b935050602084013567ffffffffffffffff811115613ac157613ac0613164565b5b613acd86828701613524565b925050604084013567ffffffffffffffff811115613aee57613aed613164565b5b613afa86828701613524565b9150509250925092565b60008060008060808587031215613b1e57613b1d61315f565b5b6000613b2c878288016131b2565b9450506020613b3d878288016131e8565b9350506040613b4e878288016131e8565b925050606085013567ffffffffffffffff811115613b6f57613b6e613164565b5b613b7b878288016135d9565b91505092959194509250565b60008060408385031215613b9e57613b9d61315f565b5b6000613bac858286016136e3565b9250506020613bbd858286016131e8565b9150509250929050565b613bd081613189565b82525050565b6000602082019050613beb6000830184613bc7565b92915050565b613bfa816132ec565b8114613c0557600080fd5b50565b600081359050613c1781613bf1565b92915050565b60008060408385031215613c3457613c3361315f565b5b6000613c42858286016131b2565b9250506020613c5385828601613c08565b9150509250929050565b60008060408385031215613c7457613c7361315f565b5b6000613c82858286016131b2565b9250506020613c93858286016131b2565b9150509250929050565b600080600080600060a08688031215613cb957613cb861315f565b5b6000613cc7888289016131b2565b9550506020613cd8888289016131b2565b9450506040613ce9888289016131e8565b9350506060613cfa888289016131e8565b925050608086013567ffffffffffffffff811115613d1b57613d1a613164565b5b613d27888289016135d9565b9150509295509295909350565b600080600060608486031215613d4d57613d4c61315f565b5b6000613d5b868287016131b2565b9350506020613d6c868287016131e8565b9250506040613d7d868287016131e8565b9150509250925092565b600067ffffffffffffffff821115613da257613da161340f565b5b613dab8261339e565b9050602081019050919050565b6000613dcb613dc684613d87565b61346f565b905082815260208101848484011115613de757613de6613552565b5b613df2848285613588565b509392505050565b600082601f830112613e0f57613e0e61340a565b5b8135613e1f848260208601613db8565b91505092915050565b600060208284031215613e3e57613e3d61315f565b5b600082013567ffffffffffffffff811115613e5c57613e5b613164565b5b613e6884828501613dfa565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613eb857607f821691505b602082108103613ecb57613eca613e71565b5b50919050565b7f455243313135355072657365744d696e7465725061757365723a206d7573742060008201527f68617665206d696e74657220726f6c6520746f206d696e740000000000000000602082015250565b6000613f2d60388361335a565b9150613f3882613ed1565b604082019050919050565b60006020820190508181036000830152613f5c81613f20565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c65