@settlemint/solidity-soulbound
Version:
Smart contract set to build an Soulbound token in SettleMint
1,039 lines (1,037 loc) • 78.4 kB
TypeScript
// This file was autogenerated by hardhat-viem, do not edit it.
// prettier-ignore
// tslint:disable
// eslint-disable
import type { Address } from "viem";
import type { GetContractReturnType } from "@nomicfoundation/hardhat-viem/types";
import "@nomicfoundation/hardhat-viem/types";
export interface Soulbound$Type {
"_format": "hh-sol-artifact-1",
"contractName": "Soulbound",
"sourceName": "contracts/SoulboundToken.sol",
"abi": [
{
"inputs": [],
"name": "AccessControlBadConfirmation",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "bytes32",
"name": "neededRole",
"type": "bytes32"
}
],
"name": "AccessControlUnauthorizedAccount",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"name": "AddressEmptyCode",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ERC1155InsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC1155InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "idsLength",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "valuesLength",
"type": "uint256"
}
],
"name": "ERC1155InvalidArrayLength",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "ERC1155InvalidOperator",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC1155InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC1155InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC1155MissingApprovalForAll",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [],
"name": "EnforcedPause",
"type": "error"
},
{
"inputs": [],
"name": "ExpectedPause",
"type": "error"
},
{
"inputs": [],
"name": "FailedCall",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [],
"name": "UUPSUnauthorizedCallContext",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "slot",
"type": "bytes32"
}
],
"name": "UUPSUnsupportedProxiableUUID",
"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": "uint64",
"name": "version",
"type": "uint64"
}
],
"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"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"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": "UPGRADE_INTERFACE_VERSION",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"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": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amounts",
"type": "uint256"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "tokenIds",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
}
],
"name": "burnBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
}
],
"name": "exists",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getCurrentTokenId",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"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": "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": "name_",
"type": "string"
},
{
"internalType": "string",
"name": "symbol_",
"type": "string"
},
{
"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": "uint256",
"name": "amounts",
"type": "uint256"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
}
],
"name": "mint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "address",
"name": "recipient",
"type": "address"
}
],
"name": "mintBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "proxiableUUID",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "callerConfirmation",
"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": "values",
"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": "value",
"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": "string",
"name": "newuri",
"type": "string"
}
],
"name": "setURI",
"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": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
}
],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "unpause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newImplementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "upgradeToAndCall",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
}
],
"name": "uri",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60a08060405234602957306080526135f7908161002f8239608051818181610e6b01526110720152f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8062fdd58e1461022657806301ffc9a71461022157806302fe53051461021c57806306fdde03146102175780630e89341c1461021257806318160ddd1461020d578063248a9ca3146102085780632eb2c2d6146102035780632f2ff15d146101fe57806336568abe146101f95780633f4ba83a146101f45780634e1273f4146101ef5780634f1ef286146101ea5780634f558e79146101e557806352d1902d146101e057806356189236146101db5780635c975abb146101d65780636ac4d939146101d157806383ca4b6f146101cc5780638456cb59146101c757806391d14854146101c257806394bf804d146101bd57806395d89b41146101b8578063a217fddf146101b3578063a22cb465146101ae578063a6487c53146101a9578063ad3cb1cc146101a4578063b390c0ab1461019f578063bd85b0391461019a578063d539139314610195578063d547741f14610190578063e985e9c51461018b5763f242432a1461018657600080fd5b611c69565b611c05565b611ba6565b611b6b565b611b20565b6119c4565b611965565b6116b0565b6115b7565b61159b565b6114f3565b61143a565b6113c7565b6112d2565b61122e565b611122565b6110e0565b6110c2565b611057565b61100a565b610e2c565b610d6b565b610c34565b610bd5565b610b71565b610ae4565b610a1b565b6109de565b6107f3565b610716565b6104f8565b610307565b610270565b600435906001600160a01b038216820361024157565b600080fd5b602435906001600160a01b038216820361024157565b35906001600160a01b038216820361024157565b346102415760406003193601126102415760206102d461028e61022b565b6024356000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450083526040600020906001600160a01b0316600052602052604060002090565b54604051908152f35b7fffffffff0000000000000000000000000000000000000000000000000000000081160361024157565b34610241576020600319360112610241577fffffffff00000000000000000000000000000000000000000000000000000000600435610345816102dd565b167f0e08307600000000000000000000000000000000000000000000000000000000811490811561037f575b506040519015158152602090f35b7f7965db0b000000000000000000000000000000000000000000000000000000008114915081156103b2575b5038610371565b7fd9b67a2600000000000000000000000000000000000000000000000000000000811491508115610416575b81156103ec575b50386103ab565b7f01ffc9a700000000000000000000000000000000000000000000000000000000915014386103e5565b7f0e89341c00000000000000000000000000000000000000000000000000000000811491506103de565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f601f19910116810190811067ffffffffffffffff82111761049257604052565b610440565b67ffffffffffffffff811161049257601f01601f191660200190565b81601f82011215610241576020813591016104cd82610497565b926104db604051948561046f565b828452828201116102415781600092602092838601378301015290565b346102415760206003193601126102415760043567ffffffffffffffff81116102415761052c61056e9136906004016104b3565b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090206105699060ff905b5416611d54565b6123bb565b005b90600182811c921680156105b9575b602083101461058a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161057f565b604051906000827f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450254916105f683610570565b808352926001811690811561069b575060011461061c575b61061a9250038361046f565b565b507f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4502600090815290917ff429cb5e2ec84cbb765e76b31964a56ccde03e7a6122d6cc4afb19edc55edeed5b81831061067f57505090602061061a9282010161060e565b6020919350806001915483858901015201910190918492610667565b6020925061061a94915060ff191682840152151560051b82010161060e565b60005b8381106106cd5750506000910152565b81810151838201526020016106bd565b90601f19601f6020936106fb815180928187528780880191016106ba565b0116010190565b9060206107139281815201906106dd565b90565b3461024157600060031936011261024157604051600060015461073881610570565b80845290600181169081156107cf5750600114610770575b61076c836107608185038261046f565b60405191829182610702565b0390f35b600160009081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b8082106107b557509091508101602001610760610750565b91926001816020925483858801015201910190929161079d565b60ff191660208086019190915291151560051b840190910191506107609050610750565b346102415760206003193601126102415760043561080f6105c3565b81826000937a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008110156109b3575b50806d04ee2d6d415b85acef8100000000600a921015610997575b662386f26fc10000811015610982575b6305f5e100811015610970575b612710811015610960575b6064811015610951575b1015610946575b6108d660001960216108a060018701612511565b958601015b01917f3031323334353637383961626364656600000000000000000000000000000000600a82061a8353600a900490565b9081156108ea576108d690600019906108a5565b60405161076c906107608161093861090f89610909602085018b611ddf565b90611ddf565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b03601f19810183528261046f565b60019092019161088c565b60029060649004940193610885565b600490612710900494019361087b565b6008906305f5e1009004940193610870565b601090662386f26fc100009004940193610863565b6020906d04ee2d6d415b85acef81000000009004940193610853565b604094507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000090049050600a610838565b346102415760006003193601126102415760207f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154604051908152f35b34610241576020600319360112610241576020610a676004356000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260016040600020015490565b604051908152f35b67ffffffffffffffff81116104925760051b60200190565b9080601f83011215610241578135610a9e81610a6f565b92610aac604051948561046f565b81845260208085019260051b82010192831161024157602001905b828210610ad45750505090565b8135815260209182019101610ac7565b346102415760a060031936011261024157610afd61022b565b610b05610246565b9060443567ffffffffffffffff811161024157610b26903690600401610a87565b60643567ffffffffffffffff811161024157610b46903690600401610a87565b906084359367ffffffffffffffff851161024157610b6b61056e9536906004016104b3565b93611df6565b346102415760406003193601126102415761056e600435610b90610246565b90610bd0610bcb826000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260016040600020015490565b612538565b612670565b3461024157604060031936011261024157600435610bf1610246565b336001600160a01b03821603610c0a5761056e91612752565b7f6697b2320000000000000000000000000000000000000000000000000000000060005260046000fd5b34610241576000600319360112610241573360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260409020610c7f9060ff90610562565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff811615610cfc5760ff19167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b0000000000000000000000000000000000000000000000000000000060005260046000fd5b906020808351928381520192019060005b818110610d445750505090565b8251845260209384019390920191600101610d37565b906020610713928181520190610d26565b346102415760406003193601126102415760043567ffffffffffffffff8111610241573660238201121561024157806004013590610da882610a6f565b91610db6604051938461046f565b8083526024602084019160051b8301019136831161024157602401905b828210610e14578360243567ffffffffffffffff81116102415761076c91610e02610e08923690600401610a87565b90611eee565b60405191829182610d5a565b60208091610e218461025c565b815201910190610dd3565b604060031936011261024157610e4061022b565b60243567ffffffffffffffff811161024157610e609036906004016104b3565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803014908115610fd5575b50610fab57604051917f52d1902d0000000000000000000000000000000000000000000000000000000083526020836004816001600160a01b0386165afa60009381610f7a575b50610f19577f4c9c8ce3000000000000000000000000000000000000000000000000000000006000526001600160a01b03821660045260246000fd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610f4b5761056e9250612e1c565b7faa1d49a400000000000000000000000000000000000000000000000000000000600052600483905260246000fd5b610f9d91945060203d602011610fa4575b610f95818361046f565b81019061282b565b9238610edd565b503d610f8b565b7fe07c8dba0000000000000000000000000000000000000000000000000000000060005260046000fd5b90506001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141538610e96565b34610241576020600319360112610241576004356000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280060205260206040600020541515604051908152f35b34610241576000600319360112610241576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610fab5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b34610241576000600319360112610241576020600054604051908152f35b3461024157600060031936011261024157602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b346102415760406003193601126102415760043567ffffffffffffffff811161024157611153903690600401610a87565b61115b610246565b906111668151611e7a565b3360009081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090206111a39060ff905b5416611fb9565b60005b82518110156111d2576001906111bd60005461204d565b806000556111cb8285611eab565b52016111a6565b5090604051916111e360208461046f565b600083526001600160a01b038416156111ff5761056e9361283a565b7f57f447ce00000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346102415760406003193601126102415760043567ffffffffffffffff81116102415761125f903690600401610a87565b60243567ffffffffffffffff81116102415761127f903690600401610a87565b9033156112a35761056e916040519161129960208461046f565b6000835233612a2c565b7f01a8351400000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b34610241576000600319360112610241573360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d6020526040902061131d9060ff90610562565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff811661139d5760ff1960019116177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b7fd93c06650000000000000000000000000000000000000000000000000000000060005260046000fd5b3461024157604060031936011261024157602060ff61142e6004356113ea610246565b906000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680084526040600020906001600160a01b0316600052602052604060002090565b54166040519015158152f35b3461024157604060031936011261024157600435611456610246565b3360009081527f549fe2656c81d2947b3b913f0a53b9ea86c71e049f3a1b8aa23c09a8a05cb8d4602052604090206114909060ff9061119c565b61149b60005461204d565b9081600055604051916114af60208461046f565b600083526001600160a01b038216156111ff5761056e936114ed60405192600184526020840152604083019160018352606084015260808301604052565b9161283a565b3461024157600060031936011261024157604051600060025461151581610570565b80845290600181169081156107cf575060011461153c5761076c836107608185038261046f565b600260009081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b80821061158157509091508101602001610760610750565b919260018160209254838588010152019101909291611569565b3461024157600060031936011261024157602060405160008152f35b34610241576040600319360112610241576115d061022b565b602435801515809103610241576001600160a01b038216918215611681576116469061162e336001600160a01b03166000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602052604060002090565b906001600160a01b0316600052602052604060002090565b60ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b7fced3e10000000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b346102415760606003193601126102415760043567ffffffffffffffff8111610241576116e19036906004016104b3565b60243567ffffffffffffffff8111610241576117019036906004016104b3565b9060443567ffffffffffffffff8111610241576117229036906004016104b3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549267ffffffffffffffff61176860ff604087901c16159567ffffffffffffffff1690565b168015908161195d575b6001149081611953575b15908161194a575b506119205761180592846117fc60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6118a557612260565b61180b57005b6118767fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b61191b680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b612260565b7ff92ee8a90000000000000000000000000000000000000000000000000000000060005260046000fd5b90501538611784565b303b15915061177c565b859150611772565b346102415760006003193601126102415761076c6040805190611988818361046f565b600582527f352e302e300000000000000000000000000000000000000000000000000000006020830152519182916020835260208301906106dd565b346102415760006040600319360112611b1d576024356004353315611af15790611a0b60405192600184526020840152604083019160018352606084015260808301604052565b9160209181604051611a1e60208261046f565b52600192839250611a32858360003361339c565b6000946000935b611a89575b61056e867f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b8251841015611aec578480968560059796971b90611adb8580848701015193880101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b828154039055019501939495611a39565b611a3e565b6024837f01a8351400000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b34610241576020600319360112610241576004356000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28006020526020604060002054604051908152f35b346102415760006003193601126102415760206040517f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68152f35b346102415760406003193601126102415761056e600435611bc5610246565b90611c00610bcb826000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260016040600020015490565b612752565b3461024157604060031936011261024157602060ff61142e611c2561022b565b61162e611c30610246565b916001600160a01b03166000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602052604060002090565b346102415760a060031936011261024157611c8261022b565b611c8a610246565b604435906064359260843567ffffffffffffffff811161024157611cb29036906004016104b3565b926001600160a01b0382163381141580611d43575b611d12576001600160a01b038416156111ff57156112a35761056e94611d0a60405192600184526020840152604083019160018352606084015260808301604052565b929091612c2f565b7fe237d922000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b50611d4e3384612374565b15611cc7565b15611d5b57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f43616c6c6572206973206e6f7420616e2061646d696e20726f6c65206175746860448201527f6f726973656400000000000000000000000000000000000000000000000000006064820152fd5b90611df2602092828151948592016106ba565b0190565b939291906001600160a01b0385163381141580611e2f575b611d12576001600160a01b038216156111ff57156112a35761061a94612c2f565b5060ff611e723361162e896001600160a01b03166000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602052604060002090565b541615611e0e565b90611e8482610a6f565b611e91604051918261046f565b828152601f19611ea18294610a6f565b0190602036910137565b8051821015611ebf5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91909180518351808203611f89575050611f088151611e7a565b9060005b8151811015611f825780611f7060019260051b602080828701015191890101516000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006020526040600020906001600160a01b0316600052602052604060002090565b54611f7b8286611eab565b5201611f0c565b5090925050565b7f5b0599910000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b15611fc057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616c6c6572206973206e6f742061206d696e746572000000000000000000006044820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600019811461205c5760010190565b61201e565b601f811161206d575050565b60016000526020600020906020601f840160051c830193106120aa575b601f0160051c01905b81811061209e575050565b60008155600101612093565b909150819061208a565b601f81116120c0575050565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45026000526020600020906020601f840160051c8301931061211c575b601f0160051c01905b818110612110575050565b60008155600101612105565b90915081906120fc565b601f821161213357505050565b6000526020600020906020601f840160051c8301931061216e575b601f0160051c01905b818110612162575050565b60008155600101612157565b909150819061214e565b90815167ffffffffffffffff8111610492576121a081612199600254610570565b6002612126565b602092601f82116001146121e1576121d1929382916000926121d6575b50506000198260011b9260031b1c19161790565b600255565b0151905038806121bd565b6002600052601f198216937f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9160005b868110612248575083600195961061222f575b505050811b01600255565b015160001960f88460031b161c19169055388080612224565b91926020600181928685015181550194019201612211565b90916122769061226e612f38565b610569612f38565b61227e612f38565b612287336125be565b5080519067ffffffffffffffff8211610492576122ae826122a9600154610570565b612061565b602090601f83116001146122ea5791806122e29261061a95946000926121d65750506000198260011b9260031b1c19161790565b600155612178565b6001600052601f19831691907fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69260005b81811061235c575091600193918561061a97969410612343575b505050811b01600155612178565b015160001960f88460031b161c19169055388080612335565b9293602060018192878601518155019501930161231b565b60ff9161162e6123b6926001600160a01b03166000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602052604060002090565b541690565b90815167ffffffffffffffff811161049257612400816123fb7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450254610570565b6120b4565b602092601f821160011461245457612430929382916000926121d65750506000198260011b9260031b1c19161790565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450255565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4502600052601f198216937ff429cb5e2ec84cbb765e76b31964a56ccde03e7a6122d6cc4afb19edc55edeed9160005b8681106124f957508360019596106124e0575b505050811b017f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450255565b015160001960f88460031b161c191690553880806124b6565b919260206001819286850151815501940192016124a3565b9061251b82610497565b612528604051918261046f565b828152601f19611ea18294610497565b806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff612583336040600020906001600160a01b0316600052602052604060002090565b54161561258d5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b6001600160a01b03811660009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1661266a576001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b50600090565b806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff6126bb836040600020906001600160a01b0316600052602052604060002090565b541661274b57806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205261270a826040600020906001600160a01b0316600052602052604060002090565b600160ff198254161790556001600160a01b03339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260ff61279d836040600020906001600160a01b0316600052602052604060002090565b54161561274b57806000527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526127ed826040600020906001600160a01b0316600052602052604060002090565b60ff1981541690556001600160a01b03339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b90816020910312610241575190565b9391909161284b828487600061339c565b600094855b84518710156128bd576128b56001918860051b906128a3602080848a010151938a0101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b6128ae8382546132da565b90556132da565b960195612850565b6129159195949296506128f1907f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2801546132da565b7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b6001600160a01b038416158061296c575b15612932575b50505050565b805160010361295b579060208061295295930151910151916000336131d1565b3880808061292c565b61296793600033613024565b612952565b9360009591936000965b85518810156129d5576001908860051b906129c6602080848a010151938a0101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b82815403905501970196612976565b612a2791959397509591957f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b612926565b90919392506001600160a01b0381161590818015612c27575b15612ba35784836000612a579361339c565b612b0f575b6000805b8251821015612abf576001908260051b90612ab0602080848a01015193870101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b82815403905501910190612a60565b91505061061a9192507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b6000805b8251821015612b6e57612b666001918360051b906128a3602080848b01015193880101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b910190612b13565b612b9e91506128f1907f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2801546132da565b612a5c565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4120536f756c626f756e6420746f6b656e2063616e6e6f74206265207472616e60448201527f73666572726564000000000000000000000000000000000000000000000000006064820152fd5b506001612a45565b919392906001600160a01b03831615808015612e0b575b15612ba357612c578387848761339c565b612d6f575b6001600160a01b0381161580612cb1575b15612c7a575b5050505050565b8451600103612ca057602080612c9696015192015192336131d1565b3880808080612c73565b612cac94919233613024565b612c96565b94936000939091845b8651861015612d19576001908660051b90612d0a602080848a010151938b0101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b82815403905501950194612cba565b612d6a919396979295507f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280154037f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e280155565b612c6d565b9392600092835b8551851015612dd157612dc96001918660051b906128a3602080848a010151938b0101516000527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2800602052604060002090565b940193612d76565b612e069194506128f190969295967f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e2801546132da565b612c5c565b506001600160a01b03821615612c46565b90813b15612f01576001600160a01b038216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2805115612ece57612ecb916132bc565b50565b505034612ed757565b7fb398979f0000000000000000000000000000000000000000000000000000000060005260046000fd5b6001600160a01b03827f4c9c8ce3000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612f6757565b7fd7e6bcf80000000000000000000000000000000000000000000000000000000060005260046000fd5b908160209103126102415751610713816102dd565b939061071395936001600160a01b03612fe69481612fd89416885216602087015260a0604087015260a0860190610d26565b908482036060860152610d26565b9160808184039101526106dd565b3d1561301f573d9061300582610497565b91613013604051938461046f565b82523d6000602084013e565b606090565b9091949293853b613038575b505050505050565b6020936130739160405196879586957fbc197c8100000000000000000000000000000000000000000000000000000000875260048701612fa6565b038160006001600160a01b0387165af16000918161316c575b506130e1575061309a612ff4565b80519190826130da577f57f447ce000000000000000000000000000000000000000000000000000000006000526001600160a01b03821660045260246000fd5b6020915001fd5b7fffffffff000000000000000000000000000000000000000000000000000000007fbc197c81000000000000000000000000000000000000000000000000000000009116036131365750388080808080613030565b7f57f447ce000000000000000000000000000000000000000000000000000000006000526001600160a01b031660045260246000fd5b61318f91925060203d602011613196575b613187818361046f565b810190612f91565b903861308c565b503d61317d565b91926001600160a01b0360a094816107139897941685521660208401526040830152606082015281608082015201906106dd565b9091949293853b6131e457505050505050565b60209361321f9160405196879586957ff23a6e610000000000000000000000000000000000000000000000000000000087526004870161319d565b038160006001600160a01b0387165af16000918161329b575b50613246575061309a612ff4565b7fffffffff000000000000000000000000000000000000000000000000000000007ff23a6e61000000000000000000000000000000000000000000000000000000009116036131365750388080808080613030565b6132b591925060203d60201161319657613187818361046f565b9038613238565b60008061071393602081519101845af46132d4612ff4565b916132e7565b9190820180921161205c57565b9061332657508051156132fc57602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b8151158061336e575b613337575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50803b1561332f565b909161338e61071393604084526040840190610d26565b916020818403910152610d26565b9392918051835190818103611f8957505060005b815181101561351c578060051b9060208083850101519286010151846001600160a01b038916613442575b6001936001600160a01b0382166133f6575b505050016133b0565b6134389161162e613430926000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602052604060002090565b9182546132da565b90553884816133ed565b50909161347c8861162e836000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602052604060002090565b548281106134cc578291600194938792036134c48b61162e846000527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602052604060002090565b5593506133db565b6040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038a16600482015260248101919091526044810183905260648101829052608490fd5b50805193949391929160010361357f576020908101519181015160408051938452918301526001600160a01b03928316939092169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291819081015b0390a4565b90916001600160a01b037f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb9161357a826040519384931697169533958361337756fea2646970667358221220f7addbc7d31946dddc83935807e49a26c237e7f18fdf8800dc17caa91da5606e64736f6c634300081b0033",
"deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c8062fdd58e1461022657806301ffc9a71461022157806302fe53051461021c57806306fdde03146102175780630e89341c1461021257806318160ddd1461020d578063248a9ca3146102085780632eb2c2d6146102035780632f2ff15d146101fe57806336568abe146101f95780633f4ba83a146101f45780634e1273f4146101ef5780634f1ef286146101ea5780634f558e79146101e557806352d1902d146101e057806356189236146101db5780635c975abb146101d65780636ac4d939146101d157806383ca4b6f146101cc5780638456cb59146101c757806391d14854146101c257806394bf804d146101bd57806395d89b41146101b8578063a217fddf146101b3578063a22cb465146101ae578063a6487c53146101a9578063ad3cb1cc146101a4578063b390c0ab1461019f578063bd85b0391461019a578063d53913931461