Overview ERC721
Total Supply:
221 DPT

Holders:
54
Profile Summary
Blockchain:
Base (8453)

Contract Source Code Verified (Partial Match)
Contract Name:
WhitelabelNFT

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Created At:
Tue, 16 Jan 2024 13:14:17 GMT
EIP2981Spec.sol
contracts
interfaces
EIP2981Spec.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "_owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "_approved",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "_owner",
        "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": true,
        "internalType": "address",
        "name": "_by",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "_oldVal",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "_newVal",
        "type": "string"
      }
    ],
    "name": "BaseURIUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "_by",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "_value",
        "type": "string"
      }
    ],
    "name": "ContractURIUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "_by",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "_oldVal",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "_newVal",
        "type": "address"
      }
    ],
    "name": "OwnerUpdated",
    "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": false,
        "internalType": "uint256",
        "name": "requested",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "assigned",
        "type": "uint256"
      }
    ],
    "name": "RoleUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "_by",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "_receiver",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint16",
        "name": "_percentage",
        "type": "uint16"
      }
    ],
    "name": "RoyaltyInfoUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "_by",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "_oldVal",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "_newVal",
        "type": "string"
      }
    ],
    "name": "TokenURIUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "_from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "BATCH_SIZE_MULTIPLIER",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DOMAIN_SEPARATOR",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DOMAIN_TYPEHASH",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "FEATURE_BURNS_ON_BEHALF",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "FEATURE_OPERATOR_PERMITS",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "FEATURE_OWN_BURNS",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "FEATURE_PERMITS",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "FEATURE_TRANSFERS",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "FEATURE_TRANSFERS_ON_BEHALF",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "PERMIT_FOR_ALL_TYPEHASH",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "PERMIT_TYPEHASH",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ROLE_ACCESS_MANAGER",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ROLE_OWNER_MANAGER",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ROLE_ROYALTY_MANAGER",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ROLE_TOKEN_CREATOR",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ROLE_TOKEN_DESTROYER",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ROLE_URI_MANAGER",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "TOKEN_UID",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_approved",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_owner",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "baseURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "exists",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "features",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "getApproved",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "getRole",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_operator",
        "type": "address"
      }
    ],
    "name": "isApprovedForAll",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "required",
        "type": "uint256"
      }
    ],
    "name": "isFeatureEnabled",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "required",
        "type": "uint256"
      }
    ],
    "name": "isOperatorInRole",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_addr",
        "type": "address"
      }
    ],
    "name": "isOwner",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "required",
        "type": "uint256"
      }
    ],
    "name": "isSenderInRole",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "isTransferable",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "mint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "n",
        "type": "uint256"
      }
    ],
    "name": "mintBatch",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "ownerOf",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_operator",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_exp",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "permit",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_operator",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "_approved",
        "type": "bool"
      },
      {
        "internalType": "uint256",
        "name": "_exp",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "permitForAll",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "permitNonces",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_salePrice",
        "type": "uint256"
      }
    ],
    "name": "royaltyInfo",
    "outputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "royaltyAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "royaltyPercentage",
    "outputs": [
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "royaltyReceiver",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "_data",
        "type": "bytes"
      }
    ],
    "name": "safeMint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "safeMint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "n",
        "type": "uint256"
      }
    ],
    "name": "safeMintBatch",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "n",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "_data",
        "type": "bytes"
      }
    ],
    "name": "safeMintBatch",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "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": "_baseURI",
        "type": "string"
      }
    ],
    "name": "setBaseURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_contractURI",
        "type": "string"
      }
    ],
    "name": "setContractURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_royaltyReceiver",
        "type": "address"
      },
      {
        "internalType": "uint16",
        "name": "_royaltyPercentage",
        "type": "uint16"
      }
    ],
    "name": "setRoyaltyInfo",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      },
      {
        "internalType": "string",
        "name": "_tokenURI",
        "type": "string"
      }
    ],
    "name": "setTokenURI",
    "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": [
      {
        "internalType": "uint256",
        "name": "_index",
        "type": "uint256"
      }
    ],
    "name": "tokenByIndex",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_owner",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_index",
        "type": "uint256"
      }
    ],
    "name": "tokenOfOwnerByIndex",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "tokenURI",
    "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": "address",
        "name": "_from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_owner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_mask",
        "type": "uint256"
      }
    ],
    "name": "updateFeatures",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "role",
        "type": "uint256"
      }
    ],
    "name": "updateRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
60a0604052600060809081526009906200001a9082620001eb565b50600c80546001600160b01b0319167502ee379e2119f6e0d6088537da82968e2a7ea178ddcf1790556040805160808101909152605080825262003af26020830139600d906200006b9082620001eb565b503480156200007957600080fd5b5060405162003b4238038062003b428339810160408190526200009c916200036e565b8181818133620000b08160001980620000ee565b506001620000bf8382620001eb565b506002620000ce8282620001eb565b5050600b80546001600160a01b0319163317905550620003d89350505050565b6001600160a01b0383166000818152602081815260409182902084905581518581529081018490527fe9be537308880e0f56b7d7cfd7abf85f14c4934486d138f848b92a0cbaf659b4910160405180910390a2505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200017157607f821691505b6020821081036200019257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001e657600081815260208120601f850160051c81016020861015620001c15750805b601f850160051c820191505b81811015620001e257828155600101620001cd565b5050505b505050565b81516001600160401b0381111562000207576200020762000146565b6200021f816200021884546200015c565b8462000198565b602080601f8311600181146200025757600084156200023e5750858301515b600019600386901b1c1916600185901b178555620001e2565b600085815260208120601f198616915b82811015620002885788860151825594840194600190910190840162000267565b5085821015620002a75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f830112620002c957600080fd5b81516001600160401b0380821115620002e657620002e662000146565b604051601f8301601f19908116603f0116810190828211818310171562000311576200031162000146565b816040528381526020925086838588010111156200032e57600080fd5b600091505b8382101562000352578582018301518183018401529082019062000333565b83821115620003645760008385830101525b9695505050505050565b600080604083850312156200038257600080fd5b82516001600160401b03808211156200039a57600080fd5b620003a886838701620002b7565b93506020850151915080821115620003bf57600080fd5b50620003ce85828601620002b7565b9150509250929050565b61370a80620003e86000396000f3fe608060405234801561001057600080fd5b50600436106103e65760003560e01c8063725f36261161020a578063ae682e2e11610125578063cc2da7ff116100b8578063e8a3d48511610087578063e8a3d485146108ef578063e985e9c5146108f7578063f2fde38b1461090a578063f63c2f821461091d578063fcc2c0781461092557600080fd5b8063cc2da7ff146108b5578063d505accf146108bf578063d5bb7f67146108d2578063e62cac76146108e557600080fd5b8063b88d4fde116100f4578063b88d4fde14610874578063c0d6568d14610887578063c688d6931461088f578063c87b56dd146108a257600080fd5b8063ae682e2e14610839578063af65e2a814610844578063b256456914610857578063b29a2f441461086a57600080fd5b80639032c7261161019d5780639fbc87131161016c5780639fbc8713146107ed578063a144819414610800578063a22cb46514610813578063ae5b102e1461082657600080fd5b80639032c726146107b7578063938e3d7b146107ca57806395d89b41146107dd57806398b622a2146107e557600080fd5b80638a71bb2d116101d95780638a71bb2d1461076a5780638d4e57e6146107925780638da5cb5b1461079c5780638f6fba8c146107af57600080fd5b8063725f362614610714578063768bfc9a146107275780638832e6e3146107305780638a114e131461074357600080fd5b80632f745c59116103055780634f558e7911610298578063615879111161026757806361587911146106c05780636352211e146106d35780636c0360eb146106e657806370a08231146106ee57806372504a241461070157600080fd5b80634f558e79146106515780634f6ccce71461067357806355f804b314610686578063585956d61461069957600080fd5b806340c10f19116102d457806340c10f19146105ef57806342842e0e1461060257806342966c6814610615578063442767331461062857600080fd5b80632f745c591461059357806330adf81f146105a6578063313ce567146105cd5780633644e515146105e757600080fd5b8063191d0ffc1161037d5780632a55205a1161034c5780632a55205a146105175780632b521416146105495780632e81aaea1461055e5780632f54bf6e1461057157600080fd5b8063191d0ffc146104b55780631a0b04ea146104d557806320606b70146104dd57806323b872dd1461050457600080fd5b80630dc5b424116103b95780630dc5b4241461046857806314b7b4e114610486578063162094c41461049057806318160ddd146104a357600080fd5b806301ffc9a7146103eb57806306fdde0314610413578063081812fc14610428578063095ea7b314610453575b600080fd5b6103fe6103f9366004612ce7565b610938565b60405190151581526020015b60405180910390f35b61041b610963565b60405161040a9190612d5c565b61043b610436366004612d6f565b6109f1565b6040516001600160a01b03909116815260200161040a565b610466610461366004612da4565b610a41565b005b61047161020081565b60405163ffffffff909116815260200161040a565b6104716210000081565b61046661049e366004612e71565b610a50565b6005545b60405190815260200161040a565b6104a76104c3366004612eb8565b60086020526000908152604090205481565b610471600881565b6104a77f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b610466610512366004612ed3565b610ae0565b61052a610525366004612f0f565b610da2565b604080516001600160a01b03909316835260208301919091520161040a565b306000908152602081905260409020546104a7565b61046661056c366004612f31565b610de3565b6103fe61057f366004612eb8565b600b546001600160a01b0391821691161490565b6104a76105a1366004612da4565b610ff8565b6104a77fee2282d7affd5a432b221a559e429129347b0c19a3f102179a5fb1859eef3d2981565b6105d5600081565b60405160ff909116815260200161040a565b6104a761109d565b6104666105fd366004612da4565b611135565b610466610610366004612ed3565b61131c565b610466610623366004612d6f565b611337565b6104a7610636366004612eb8565b6001600160a01b031660009081526020819052604090205490565b6103fe61065f366004612d6f565b600090815260036020526040902054151590565b6104a7610681366004612d6f565b6114d1565b610466610694366004612f64565b61155d565b6104a77f47ab88482c90e4bb94b82a947ae78fa91fb25de1469ab491f4c15b9a0a2677ee81565b6104666106ce366004612f31565b6115d5565b61043b6106e1366004612d6f565b6115f0565b61041b611625565b6104a76106fc366004612eb8565b611632565b61046661070f366004612fa1565b611676565b6103fe610722366004612d6f565b6117b6565b61047161040081565b61046661073e366004612fdf565b6117d2565b6104a77f50c16d79fc64e49cf554b52a1bdf271f1a30a6999329cb1b4642bb24597f282f81565b600c5461077f90600160a01b900461ffff1681565b60405161ffff909116815260200161040a565b6104716201000081565b600b5461043b906001600160a01b031681565b610471600281565b6104666107c5366004613057565b61188d565b6104666107d8366004612f64565b611a15565b61041b611a8e565b6105d5600881565b600c5461043b906001600160a01b031681565b61046661080e366004612da4565b611a9b565b6104666108213660046130c8565b611ab5565b610466610834366004612da4565b611ac0565b6104a7600160ff1b81565b6104666108523660046130fb565b611b45565b6103fe610865366004612d6f565b611c2e565b6104716220000081565b61046661088236600461315c565b611c61565b610471600181565b6103fe61089d366004612da4565b611d1d565b61041b6108b0366004612d6f565b611d46565b6104716240000081565b6104666108cd3660046131ac565b611ee7565b6104666108e0366004612d6f565b612047565b6104716202000081565b61041b612054565b6103fe6109053660046131fa565b612061565b610466610918366004612eb8565b61208f565b610471601081565b6103fe610933366004612d6f565b61214f565b60006001600160e01b0319821663152a902d60e11b148061095d575061095d8261215b565b92915050565b6001805461097090613224565b80601f016020809104026020016040519081016040528092919081815260200182805461099c90613224565b80156109e95780601f106109be576101008083540402835291602001916109e9565b820191906000526020600020905b8154815290600101906020018083116109cc57829003601f168201915b505050505081565b600081815260036020526040812054610a255760405162461bcd60e51b8152600401610a1c9061325e565b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b610a4c3383836121fd565b5050565b610a5c6210000061214f565b610a785760405162461bcd60e51b8152600401610a1c9061328b565b6000828152600a602052604090819020905133917f7989fff0ffb34805e8b3574b890ed6157f85a384c69b9a0c04991b24cabb825991610abb918691869061332f565b60405180910390a26000828152600a60205260409020610adb82826133b2565b505050565b6001600160a01b03831633148015610afd5750610afd60016117b6565b80610b2157506001600160a01b0383163314801590610b215750610b2160026117b6565b6001600160a01b0384163314610b6c576040518060400160405280602081526020017f7472616e7366657273206f6e20626568616c66206172652064697361626c6564815250610b9c565b604051806040016040528060168152602001751d1c985b9cd9995c9cc8185c9948191a5cd8589b195960521b8152505b90610bba5760405162461bcd60e51b8152600401610a1c9190612d5c565b506001600160a01b038216610be15760405162461bcd60e51b8152600401610a1c90613472565b610bea816115f0565b6001600160a01b0316836001600160a01b031614610c1a5760405162461bcd60e51b8152600401610a1c9061328b565b6001600160a01b038316331480610c4a5750610c35816109f1565b6001600160a01b0316336001600160a01b0316145b80610c5a5750610c5a8333612061565b610c765760405162461bcd60e51b8152600401610a1c9061328b565b610c7f81611c2e565b610cba5760405162461bcd60e51b815260206004820152600c60248201526b3637b1b5b2b2103a37b5b2b760a11b6044820152606401610a1c565b816001600160a01b0316836001600160a01b031614610d6457610cdc816122f9565b6001600160a01b0382166000818152600460208181526040808420805487865260038452918520805460a09390931b63ffffffff60a01b1663ffffffff60c01b90931692909217909517905583546001810185559383529091206008830401805460079093169091026101000a63ffffffff8181021990931692841602919091179055610d6e565b610d6e8382612457565b80826001600160a01b0316846001600160a01b03166000805160206136b583398151915260405160405180910390a4505050565b600c5460009081906001600160a01b0381169061271090610dce90600160a01b900461ffff16866134ae565b610dd891906134e3565b915091509250929050565b610def6201000061214f565b610e0b5760405162461bcd60e51b8152600401610a1c9061328b565b6001600160a01b038316610e315760405162461bcd60e51b8152600401610a1c90613472565b60018111610e725760405162461bcd60e51b815260206004820152600e60248201526d1b881a5cc81d1bdbc81cdb585b1b60921b6044820152606401610a1c565b818263ffffffff1614610ebb5760405162461bcd60e51b8152602060048201526011602482015270746f6b656e204944206f766572666c6f7760781b6044820152606401610a1c565b6001610ec782846134f7565b610ed1919061350f565b6001610edd83856134f7565b610ee7919061350f565b63ffffffff1614610f335760405162461bcd60e51b81526020600482015260166024820152756e2d746820746f6b656e204944206f766572666c6f7760501b6044820152606401610a1c565b60005b81811015610f9b57610f4b61065f82856134f7565b15610f895760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481b5a5b9d195960921b6044820152606401610a1c565b80610f9381613526565b915050610f36565b50610fa78383836124ac565b60005b81811015610ff257610fbc81846134f7565b6040516001600160a01b038616906000906000805160206136b5833981519152908290a480610fea81613526565b915050610faa565b50505050565b600061100383611632565b82106110475760405162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b6044820152606401610a1c565b6001600160a01b03831660009081526004602052604090208054839081106110715761107161353f565b6000918252602090912060088204015460079091166004026101000a900463ffffffff16905092915050565b604080518082018252600b81526a416c69455243373231763160a81b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527f9db81778f201f995555fc8eeb2867a4c0457608d47c4c8fc0fc8052b03664ff681840152466060820152306080808301919091528351808303909101815260a0909101909252815191012090565b6111416201000061214f565b61115d5760405162461bcd60e51b8152600401610a1c9061328b565b6001600160a01b0382166111835760405162461bcd60e51b8152600401610a1c90613472565b808163ffffffff16146111cc5760405162461bcd60e51b8152602060048201526011602482015270746f6b656e204944206f766572666c6f7760781b6044820152606401610a1c565b600081815260036020526040902054156112195760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481b5a5b9d195960921b6044820152606401610a1c565b6001600160a01b03821660008181526004602081815260408084208054600580548988526003865293872060a09290921b63ffffffff60a01b1660c09490941b63ffffffff60c01b1693909317909617909555845460018082018755958552918420600880840490910180546007948516860261010090810a63ffffffff81810219909316838c169182021790935584549889018555939096527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091870491909101805496909316909302900a92830219909316910217905560405181906001600160a01b038416906000906000805160206136b5833981519152908290a45050565b610adb83838360405180602001604052806000815250611c61565b6000611342826115f0565b90506113506202000061214f565b611487576001600160a01b03811633148015611371575061137160086117b6565b8061139557506001600160a01b0381163314801590611395575061139560106117b6565b6001600160a01b03821633146113e0576040518060400160405280601c81526020017f6275726e73206f6e20626568616c66206172652064697361626c65640000000081525061140c565b60405180604001604052806012815260200171189d5c9b9cc8185c9948191a5cd8589b195960721b8152505b9061142a5760405162461bcd60e51b8152600401610a1c9190612d5c565b506001600160a01b03811633148061145b5750611446826109f1565b6001600160a01b0316336001600160a01b0316145b8061146b575061146b8133612061565b6114875760405162461bcd60e51b8152600401610a1c9061328b565b61149082612571565b6000828152600a602052604081206114a791612c83565b60405182906000906001600160a01b038416906000805160206136b5833981519152908390a45050565b60006114dc60055490565b82106115205760405162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b6044820152606401610a1c565b600582815481106115335761153361353f565b6000918252602090912060088204015460079091166004026101000a900463ffffffff1692915050565b6115696210000061214f565b6115855760405162461bcd60e51b8152600401610a1c9061328b565b336001600160a01b03167fac455070f26733cc10c09e4389a74bf73bdb676d730ee31215c31d20daa880056009836040516115c1929190613555565b60405180910390a26009610a4c82826133b2565b610adb83838360405180602001604052806000815250611b45565b6000818152600360205260408120546001600160a01b03811661095d5760405162461bcd60e51b8152600401610a1c9061325e565b6009805461097090613224565b60006001600160a01b03821661165a5760405162461bcd60e51b8152600401610a1c90613472565b506001600160a01b031660009081526004602052604090205490565b6116826220000061214f565b61169e5760405162461bcd60e51b8152600401610a1c9061328b565b6001600160a01b0382161515806116b7575061ffff8116155b6116f65760405162461bcd60e51b815260206004820152601060248201526f34b73b30b634b2103932b1b2b4bb32b960811b6044820152606401610a1c565b6127108161ffff16111561174c5760405162461bcd60e51b815260206004820152601f60248201527f726f79616c74792070657263656e7461676520657863656564732031303025006044820152606401610a1c565b600c80546001600160a01b0384166001600160b01b03199091168117600160a01b61ffff8516908102919091179092556040519182529033907f9ca088b6b695032bcd5d1fa450e8fa2773391294f09e3710ace940c4ae8cffac9060200160405180910390a35050565b3060009081526020819052604081205461095d905b8316831490565b6117dc8383611135565b823b15610adb57604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061181890339085908890889060040161357a565b6020604051808303816000875af1158015611837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185b91906135ad565b90506001600160e01b03198116630a85bd0160e11b14610ff25760405162461bcd60e51b8152600401610a1c906135ca565b6118986104006117b6565b6118e45760405162461bcd60e51b815260206004820152601d60248201527f6f70657261746f72207065726d697473206172652064697361626c65640000006044820152606401610a1c565b6001600160a01b0387166000908152600860205260408120805461198a917f47ab88482c90e4bb94b82a947ae78fa91fb25de1469ab491f4c15b9a0a2677ee918b918b918b918761193483613526565b909155506040805160208101969096526001600160a01b03948516908601529290911660608401521515608083015260a082015260c0810187905260e0015b6040516020818303038152906040528585856126bd565b9050876001600160a01b0316816001600160a01b0316146119bd5760405162461bcd60e51b8152600401610a1c9061360b565b844210611a005760405162461bcd60e51b81526020600482015260116024820152701cda59db985d1d5c9948195e1c1a5c9959607a1b6044820152606401610a1c565b611a0b888888612749565b5050505050505050565b611a216210000061214f565b611a3d5760405162461bcd60e51b8152600401610a1c9061328b565b600d611a4982826133b2565b50336001600160a01b03167f1ca91f64ead03abb06ea28975dfbf18044ac06f9fa1cb62a54ccc905df1028ed82604051611a839190612d5c565b60405180910390a250565b6002805461097090613224565b610a4c8282604051806020016040528060008152506117d2565b610a4c338383612749565b611acd600160ff1b61214f565b611ae95760405162461bcd60e51b8152600401610a1c9061328b565b610a4c8282611b4033611b11876001600160a01b031660009081526020819052604090205490565b6001600160a01b0391909116600090815260208190526040902054600019808818821618908716919091171690565b612807565b611b50848484610de3565b833b15610ff25760005b82811015611c275760006001600160a01b03861663150b7a023383611b7f868a6134f7565b876040518563ffffffff1660e01b8152600401611b9f949392919061357a565b6020604051808303816000875af1158015611bbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be291906135ad565b90506001600160e01b03198116630a85bd0160e11b14611c145760405162461bcd60e51b8152600401610a1c906135ca565b5080611c1f81613526565b915050611b5a565b5050505050565b600081815260036020526040812054611c595760405162461bcd60e51b8152600401610a1c9061325e565b506001919050565b611c6c848484610ae0565b823b15610ff257604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611ca890339089908890889060040161357a565b6020604051808303816000875af1158015611cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb91906135ad565b90506001600160e01b03198116630a85bd0160e11b14611c275760405162461bcd60e51b8152600401610a1c906135ca565b6001600160a01b038216600090815260208190526040812054611d3f906117cb565b9392505050565b600081815260036020526040902054606090611d745760405162461bcd60e51b8152600401610a1c9061325e565b6000828152600a602052604081208054611d8d90613224565b80601f0160208091040260200160405190810160405280929190818152602001828054611db990613224565b8015611e065780601f10611ddb57610100808354040283529160200191611e06565b820191906000526020600020905b815481529060010190602001808311611de957829003601f168201915b50505050509050600081511115611e1d5792915050565b60098054611e2a90613224565b9050600003611e49575050604080516020810190915260008152919050565b611d3f60098054611e5990613224565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8590613224565b8015611ed25780601f10611ea757610100808354040283529160200191611ed2565b820191906000526020600020905b815481529060010190602001808311611eb557829003601f168201915b5050505050611ee285600a61285f565b612a45565b611ef26102006117b6565b611f355760405162461bcd60e51b81526020600482015260146024820152731c195c9b5a5d1cc8185c9948191a5cd8589b195960621b6044820152606401610a1c565b6001600160a01b03871660009081526008602052604081208054611fc6917fee2282d7affd5a432b221a559e429129347b0c19a3f102179a5fb1859eef3d29918b918b918b9187611f8583613526565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001611973565b9050876001600160a01b0316816001600160a01b031614611ff95760405162461bcd60e51b8152600401610a1c9061360b565b84421061203c5760405162461bcd60e51b81526020600482015260116024820152701cda59db985d1d5c9948195e1c1a5c9959607a1b6044820152606401610a1c565b611a0b8888886121fd565b6120513082611ac0565b50565b600d805461097090613224565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b61209b6240000061214f565b6120b75760405162461bcd60e51b8152600401610a1c9061328b565b600b546040516001600160a01b0380841692169033907fb9312e2100469bd44e3f762c248f4dcc8d7788906fabf34f79db45920c37e26990600090a4600b546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600061095d3383611d1d565b60006001600160e01b031982166301ffc9a760e01b148061218c57506001600160e01b031982166380ac58cd60e01b145b806121a757506001600160e01b03198216635b5e139f60e01b145b806121c257506001600160e01b0319821663780e9d6360e01b145b806121dd57506001600160e01b03198216633197b5d160e21b145b8061095d57506001600160e01b03198216630852cd8d60e31b1492915050565b6000612208826115f0565b9050806001600160a01b0316836001600160a01b03160361225b5760405162461bcd60e51b815260206004820152600d60248201526c1cd95b1988185c1c1c9bdd985b609a1b6044820152606401610a1c565b806001600160a01b0316846001600160a01b0316148061228057506122808185612061565b61229c5760405162461bcd60e51b8152600401610a1c9061328b565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b6000818152600360209081526040808320546001600160a01b03811684526004909252822080549192909160a084901c919083906123399060019061350f565b815481106123495761234961353f565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16905060018380549050612382919061350f565b8263ffffffff16146124135763ffffffff81811660009081526003602052604090208054600167ffffffff0000000160a01b031663ffffffff60a01b60a086901b161790558354829185919085169081106123df576123df61353f565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505b8280548061242357612423613636565b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a02191690559055611c2784865b60008181526006602052604080822080546001600160a01b0319169055518291906001600160a01b038516907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925908390a45050565b6001600160a01b0383166000908152600460205260408120905b828110156125595781546001600160a01b0386169060a0906124e99084906134f7565b6001600160c01b0316901b6001600160c01b031660c08360058054905061251091906134f7565b6001600160e01b0316901b17176001600160e01b031660036000838761253691906134f7565b81526020810191909152604001600020558061255181613526565b9150506124c6565b50612565818484612a71565b610ff260058484612a71565b61257a816122f9565b60008181526003602052604081208054908290556005805460c09290921c92916125a69060019061350f565b815481106125b6576125b661353f565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16905060016005805490506125f0919061350f565b8263ffffffff16146126795763ffffffff818116600090815260036020526040902080546001600160c01b031663ffffffff60c01b60c086901b1617905560058054839285169081106126455761264561353f565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505b600580548061268a5761268a613636565b600082815260209020600860001990920191820401805463ffffffff600460078516026101000a02191690559055505050565b83516020850120600090816126d061109d565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050600061271682888888612b29565b90506001600160a01b03811661273e5760405162461bcd60e51b8152600401610a1c9061360b565b979650505050505050565b826001600160a01b0316826001600160a01b03160361279a5760405162461bcd60e51b815260206004820152600d60248201526c1cd95b1988185c1c1c9bdd985b609a1b6044820152606401610a1c565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383166000818152602081815260409182902084905581518581529081018490527fe9be537308880e0f56b7d7cfd7abf85f14c4934486d138f848b92a0cbaf659b4910160405180910390a2505050565b60608160ff166002148061287657508160ff166008145b8061288457508160ff16600a145b8061289257508160ff166010145b61289b57600080fd5b826000036128c157506040805180820190915260018152600360fc1b602082015261095d565b60408051610100808252610120820190925260009160208201818036833701905050905060005b84156129765760006128fd60ff86168761364c565b9050600061290c826030613660565b9050600a8260ff161061292757612924600782613660565b90505b8060f81b84848061293790613526565b9550815181106129495761294961353f565b60200101906001600160f81b031916908160001a90535061296d60ff8716886134e3565b965050506128e8565b60008167ffffffffffffffff81111561299157612991612dce565b6040519080825280601f01601f1916602001820160405280156129bb576020820181803683370190505b509050600091505b8051821015612a3c578282815181106129de576129de61353f565b602001015160f81c60f81b8160018484516129f9919061350f565b612a03919061350f565b81518110612a1357612a1361353f565b60200101906001600160f81b031916908160001a90535081612a3481613526565b9250506129c3565b95945050505050565b60608282604051602001612a5a929190613685565b604051602081830303815290604052905092915050565b82548181018455836000526008810460206000200160088206915081151915612ad6578160080383811115612aa35750825b815460005b82811015612ac7578681018582016020021b9190911790600101612aa8565b50825593840193909203916001015b600091505b82821015611c2757600883811115612af05750825b6000805b82811015612b13578481018701602082021b9190911790600101612af4565b5080600885048401555050600882019150612adb565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612b9b5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964207369676e6174757265202773272076616c756500000000006044820152606401610a1c565b8360ff16601b1480612bb057508360ff16601c145b612bfc5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964207369676e6174757265202776272076616c756500000000006044820152606401610a1c565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015612c50573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a3c5760405162461bcd60e51b8152600401610a1c9061360b565b508054612c8f90613224565b6000825580601f10612c9f575050565b601f01602090049060005260206000209081019061205191905b80821115612ccd5760008155600101612cb9565b5090565b6001600160e01b03198116811461205157600080fd5b600060208284031215612cf957600080fd5b8135611d3f81612cd1565b60005b83811015612d1f578181015183820152602001612d07565b83811115610ff25750506000910152565b60008151808452612d48816020860160208601612d04565b601f01601f19169290920160200192915050565b602081526000611d3f6020830184612d30565b600060208284031215612d8157600080fd5b5035919050565b80356001600160a01b0381168114612d9f57600080fd5b919050565b60008060408385031215612db757600080fd5b612dc083612d88565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612df557600080fd5b813567ffffffffffffffff80821115612e1057612e10612dce565b604051601f8301601f19908116603f01168101908282118183101715612e3857612e38612dce565b81604052838152866020858801011115612e5157600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612e8457600080fd5b82359150602083013567ffffffffffffffff811115612ea257600080fd5b612eae85828601612de4565b9150509250929050565b600060208284031215612eca57600080fd5b611d3f82612d88565b600080600060608486031215612ee857600080fd5b612ef184612d88565b9250612eff60208501612d88565b9150604084013590509250925092565b60008060408385031215612f2257600080fd5b50508035926020909101359150565b600080600060608486031215612f4657600080fd5b612f4f84612d88565b95602085013595506040909401359392505050565b600060208284031215612f7657600080fd5b813567ffffffffffffffff811115612f8d57600080fd5b612f9984828501612de4565b949350505050565b60008060408385031215612fb457600080fd5b612fbd83612d88565b9150602083013561ffff81168114612fd457600080fd5b809150509250929050565b600080600060608486031215612ff457600080fd5b612ffd84612d88565b925060208401359150604084013567ffffffffffffffff81111561302057600080fd5b61302c86828701612de4565b9150509250925092565b80358015158114612d9f57600080fd5b803560ff81168114612d9f57600080fd5b600080600080600080600060e0888a03121561307257600080fd5b61307b88612d88565b965061308960208901612d88565b955061309760408901613036565b9450606088013593506130ac60808901613046565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156130db57600080fd5b6130e483612d88565b91506130f260208401613036565b90509250929050565b6000806000806080858703121561311157600080fd5b61311a85612d88565b93506020850135925060408501359150606085013567ffffffffffffffff81111561314457600080fd5b61315087828801612de4565b91505092959194509250565b6000806000806080858703121561317257600080fd5b61317b85612d88565b935061318960208601612d88565b925060408501359150606085013567ffffffffffffffff81111561314457600080fd5b600080600080600080600060e0888a0312156131c757600080fd5b6131d088612d88565b96506131de60208901612d88565b955060408801359450606088013593506130ac60808901613046565b6000806040838503121561320d57600080fd5b61321683612d88565b91506130f260208401612d88565b600181811c9082168061323857607f821691505b60208210810361325857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601390820152721d1bdad95b88191bd95cdb89dd08195e1a5cdd606a1b604082015260600190565b6020808252600d908201526c1858d8d95cdcc819195b9a5959609a1b604082015260600190565b600081546132bf81613224565b8085526020600183811680156132dc57600181146132f657613324565b60ff1985168884015283151560051b880183019550613324565b866000528260002060005b8581101561331c5781548a8201860152908301908401613301565b890184019650505b505050505092915050565b83815260606020820152600061334860608301856132b2565b828103604084015261335a8185612d30565b9695505050505050565b601f821115610adb57600081815260208120601f850160051c8101602086101561338b5750805b601f850160051c820191505b818110156133aa57828155600101613397565b505050505050565b815167ffffffffffffffff8111156133cc576133cc612dce565b6133e0816133da8454613224565b84613364565b602080601f83116001811461341557600084156133fd5750858301515b600019600386901b1c1916600185901b1785556133aa565b600085815260208120601f198616915b8281101561344457888601518255948401946001909101908401613425565b50858210156134625787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252600c908201526b7a65726f206164647265737360a01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156134c8576134c8613498565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826134f2576134f26134cd565b500490565b6000821982111561350a5761350a613498565b500190565b60008282101561352157613521613498565b500390565b60006001820161353857613538613498565b5060010190565b634e487b7160e01b600052603260045260246000fd5b60408152600061356860408301856132b2565b8281036020840152612a3c8185612d30565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061335a90830184612d30565b6000602082840312156135bf57600080fd5b8151611d3f81612cd1565b60208082526021908201527f696e76616c6964206f6e455243373231526563656976656420726573706f6e736040820152606560f81b606082015260800190565b602080825260119082015270696e76616c6964207369676e617475726560781b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b60008261365b5761365b6134cd565b500690565b600060ff821660ff84168060ff0382111561367d5761367d613498565b019392505050565b60008351613697818460208801612d04565b8351908301906136ab818360208801612d04565b0194935050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220708b1088a9343a85daba404518d31c325078b4ce543e80895c090c7e4c03785264736f6c634300080f003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5539327738694b7063616162436f7948744d6737696976574771573267573168674152447471436d4a555776000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000025446563656e7472616c697a6564205072652d547261696e6564205472616e73666f726d657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034450540000000000000000000000000000000000000000000000000000000000