{
  "contractName": "ERC721",
  "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": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "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": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "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": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "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": "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"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"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\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"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\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"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\":\"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\"}],\"devdoc\":{\"details\":\"see https://eips.ethereum.org/EIPS/eip-721\",\"kind\":\"dev\",\"methods\":{\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"constructor\":{\"details\":\"Initializes the contract by setting a `name` and a `symbol` to the token collection.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC721-isApprovedForAll}.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"tokenByIndex(uint256)\":{\"details\":\"See {IERC721Enumerable-tokenByIndex}.\"},\"tokenOfOwnerByIndex(address,uint256)\":{\"details\":\"See {IERC721Enumerable-tokenOfOwnerByIndex}.\"},\"tokenURI(uint256)\":{\"details\":\"See {IERC721Metadata-tokenURI}.\"},\"totalSupply()\":{\"details\":\"See {IERC721Enumerable-totalSupply}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"}},\"title\":\"ERC721 Non-Fungible Token Standard basic implementation\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":\"ERC721\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xd6b90e604fb2eb2d641c7110c72440bf2dc999ec6ab8ff60f200e71ca75d1d90\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b92d8ab83b21ff984b1f0d6d66897d5afb1f2052004cbcb133cea023e0ae468\",\"dweb:/ipfs/QmTarypkQrFp4UMjTh7Zzhz2nZLz5uPS4nJQtHDEuwBVe6\"]},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd970f51e3a77790c2f02b5b1759827c3b897c3d98c407b3631e8af32e3dc93c\",\"dweb:/ipfs/QmPF85Amgbqjk3SNZKsPCsqCw8JfwYEPMnnhvMJUyX58je\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x3b21f2c8d626de3b9925ae33e972d8bf5c8b1bffb3f4ee94daeed7d0679036e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7f8d45329fecbf0836ad7543330c3ecd0f8d0ffa42d4016278c3eb2215fdcdfe\",\"dweb:/ipfs/QmXWLT7GcnHtA5NiD6MFi2CV3EWJY4wv5mLNnypqYDrxL3\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x5a3de7f7f76e47a071195cf42e2a702265694a6b32037de709463bd8ad784fb5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://678cbad1f972a4d8c9d47bc39fa6d39560b4fc143c8d9c812a63fe99bb13062e\",\"dweb:/ipfs/QmUhLDvUndcbQLakDNg9G4UXz8UPzRqC6S3rWGKupB6DYs\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5a9f5c29bd7cf0b345e14d97d5f685f68c07e1e5bfdd47e5bcec045e81b0b6ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://321cbaa1412fc8d013d8ad3fb5f98c0db7401ddacfb09b70828ea2cebe37397e\",\"dweb:/ipfs/Qmd3Hoc71w6rmxAR6A5VKW9at677VP1L5KDcJnyvu4ksu3\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol\":{\"keccak256\":\"0xe6bd1b1218338b6f9fe17776f48623b4ac3d8a40405f74a44bc23c00abe2ca13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c354c3f6e9c487759aa7869be4fba68e0b2efc777b514d289c4cbd3ff8f7e1a\",\"dweb:/ipfs/QmdF9LcSYVmiUCL7JxLEYmSLrjga6zJsujfi6sgEJD4M1z\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0xccb917776f826ac6b68bd5a15a5f711e3967848a52ba11e6104d9a4f593314a7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://430255ad2229ced6d880e61a67bdc6e48dbbaed8354a7c1fe918cd8b8714a886\",\"dweb:/ipfs/QmTHY56odzqEpEC6v6tafaWMYY7vmULw25q5XHJLCCAeox\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada84513617b7c1b2f890b44503735abaec73a1acd030112a17aac7e6c66a4a1\",\"dweb:/ipfs/QmaiFwdio67iJrfjAdkMac24eJ5sS1qD7CZW6PhUU6KjiK\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xa6a15ddddcbf29d2922a1e0d4151b5d2d33da24b93cc9ebc12390e0d855532f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c119bcaecfa853d564ac88d312777f75fa1126a3bca88a3371adb0ad9f35cb0\",\"dweb:/ipfs/QmY9UPuXeSKq86Zh38fE43VGQPhKMN34mkuFSFqPcr6nvZ\"]},\"@openzeppelin/contracts/utils/EnumerableMap.sol\":{\"keccak256\":\"0xf6bdf22fe038e5310b6f0372ecd01f221e2c0b248b45efc404542d94fcac9133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e798f3492180627d6616fa94925b61a9f105347eed9e895f3e18a0eb3dfcd3d\",\"dweb:/ipfs/QmQcTro5nv3Lopf4c4rEe1BuykCfPsjRsJmysdNXtHNUdt\"]},\"@openzeppelin/contracts/utils/EnumerableSet.sol\":{\"keccak256\":\"0xae0992eb1ec30fd1ecdf2e04a6036decfc9797bf11dc1ec84b546b74318d5ec2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b61f99a64e999682ad7bfbb3a1c762a20a0a5b30f9f2011693fa857969af61f\",\"dweb:/ipfs/QmZystFY76wkWCf7V3yKh3buZuKVKbswiE7y6yU62kk3zi\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x16b5422892fbdd9648f12e59de85b42efd57d76b6d6b2358cb46e0f6d4a71aaf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ef38821a4ee756757dc1ce9074ef6096d1b5c760627e92c0852d788dc636ea7\",\"dweb:/ipfs/QmdGwP6BtRMcp4VVJUWwTmXEjYmL52A8WZpBdFJYmzc9pJ\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b506040516200232b3803806200232b833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b5060405250620001b391506301ffc9a760e01b90506200021d565b8151620001c8906006906020850190620002a2565b508051620001de906007906020840190620002a2565b50620001f16380ac58cd60e01b6200021d565b62000203635b5e139f60e01b6200021d565b6200021563780e9d6360e01b6200021d565b50506200034e565b6001600160e01b031980821614156200027d576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002da576000855562000325565b82601f10620002f557805160ff191683800117855562000325565b8280016001018555821562000325579182015b828111156200032557825182559160200191906001019062000308565b506200033392915062000337565b5090565b5b8082111562000333576000815560010162000338565b611fcd806200035e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80634f6ccce7116100b257806395d89b4111610081578063b88d4fde11610066578063b88d4fde14610402578063c87b56dd146104d5578063e985e9c5146104f25761011b565b806395d89b41146103bf578063a22cb465146103c75761011b565b80634f6ccce71461034a5780636352211e146103675780636c0360eb1461038457806370a082311461038c5761011b565b806318160ddd116100ee57806318160ddd1461027157806323b872dd1461028b5780632f745c59146102ce57806342842e0e146103075761011b565b806301ffc9a71461012057806306fdde0314610173578063081812fc146101f0578063095ea7b314610236575b600080fd5b61015f6004803603602081101561013657600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661052d565b604080519115158252519081900360200190f35b61017b610568565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101b557818101518382015260200161019d565b50505050905090810190601f1680156101e25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61020d6004803603602081101561020657600080fd5b503561061c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61026f6004803603604081101561024c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356106a5565b005b6102796107e8565b60408051918252519081900360200190f35b61026f600480360360608110156102a157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356107f9565b610279600480360360408110156102e457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561086a565b61026f6004803603606081101561031d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356108a2565b6102796004803603602081101561036057600080fd5b50356108bd565b61020d6004803603602081101561037d57600080fd5b50356108d3565b61017b6108fb565b610279600480360360208110156103a257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661097a565b61017b610a16565b61026f600480360360408110156103dd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610a95565b61026f6004803603608081101561041857600080fd5b73ffffffffffffffffffffffffffffffffffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561046057600080fd5b82018360208201111561047257600080fd5b8035906020019184600183028401116401000000008311171561049457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c06945050505050565b61017b600480360360208110156104eb57600080fd5b5035610c7e565b61015f6004803603604081101561050857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610fb5565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b60068054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106125780601f106105e757610100808354040283529160200191610612565b820191906000526020600020905b8154815290600101906020018083116105f557829003601f168201915b5050505050905090565b600061062782610ff0565b61067c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611ec2602c913960400191505060405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006106b0826108d3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610737576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611f466021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610756610ffd565b73ffffffffffffffffffffffffffffffffffffffff16148061078457506107848161077f610ffd565b610fb5565b6107d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180611e156038913960400191505060405180910390fd5b6107e38383611001565b505050565b60006107f460026110a1565b905090565b61080a610804610ffd565b826110ac565b61085f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611f676031913960400191505060405180910390fd5b6107e383838361119e565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081206108999083611379565b90505b92915050565b6107e383838360405180602001604052806000815250610c06565b6000806108cb600284611385565b509392505050565b600061089c82604051806060016040528060298152602001611e7760299139600291906113a1565b60098054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106125780601f106105e757610100808354040283529160200191610612565b600073ffffffffffffffffffffffffffffffffffffffff82166109e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611e4d602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902061089c906110a1565b60078054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106125780601f106105e757610100808354040283529160200191610612565b610a9d610ffd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b3757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8060056000610b44610ffd565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155610bb3610ffd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b610c17610c11610ffd565b836110ac565b610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611f676031913960400191505060405180910390fd5b610c78848484846113b8565b50505050565b6060610c8982610ff0565b610cde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f17602f913960400191505060405180910390fd5b60008281526008602090815260408083208054825160026001831615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190921691909104601f810185900485028201850190935282815292909190830182828015610d8f5780601f10610d6457610100808354040283529160200191610d8f565b820191906000526020600020905b815481529060010190602001808311610d7257829003601f168201915b505060095493945050505060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001841615020190911604610dd6579050610563565b805115610ec5576009816040516020018083805460018160011615610100020316600290048015610e3e5780601f10610e1c576101008083540402835291820191610e3e565b820191906000526020600020905b815481529060010190602001808311610e2a575b5050825160208401908083835b60208310610e8857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610e4b565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050610563565b6009610ed084611424565b6040516020018083805460018160011615610100020316600290048015610f2e5780601f10610f0c576101008083540402835291820191610f2e565b820191906000526020600020905b815481529060010190602001808311610f1a575b5050825160208401908083835b60208310610f7857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610f3b565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b600061089c600283611551565b3390565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061105b826108d3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061089c8261155d565b60006110b782610ff0565b61110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611de9602c913960400191505060405180910390fd5b6000611117836108d3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061118657508373ffffffffffffffffffffffffffffffffffffffff1661116e8461061c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061119657506111968185610fb5565b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff166111be826108d3565b73ffffffffffffffffffffffffffffffffffffffff161461122a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180611eee6029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611296576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180611dc56024913960400191505060405180910390fd5b6112a18383836107e3565b6112ac600082611001565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090206112db9082611561565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902061130b908261156d565b5061131860028284611579565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000610899838361159c565b6000808080611394868661161a565b9097909650945050505050565b60006113ae8484846116af565b90505b9392505050565b6113c384848461119e565b6113cf84848484611793565b610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611d936032913960400191505060405180910390fd5b606081611465575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610563565b8160005b811561147d57600101600a82049150611469565b60008167ffffffffffffffff8111801561149657600080fd5b506040519080825280601f01601f1916602001820160405280156114c1576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b831561154857600a840660300160f81b8282806001900393508151811061150e57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a840493506114eb565b50949350505050565b600061089983836119a3565b5490565b600061089983836119bb565b60006108998383611a9f565b60006113ae848473ffffffffffffffffffffffffffffffffffffffff8516611ae9565b815460009082106115f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611d716022913960400191505060405180910390fd5b82600001828154811061160757fe5b9060005260206000200154905092915050565b815460009081908310611678576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611ea06022913960400191505060405180910390fd5b600084600001848154811061168957fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281611764576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611729578181015183820152602001611711565b50505050905090810190601f1680156117565780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061177757fe5b9060005260206000209060020201600101549150509392505050565b60006117b48473ffffffffffffffffffffffffffffffffffffffff16611b80565b6117c057506001611196565b60006119387f150b7a02000000000000000000000000000000000000000000000000000000006117ee610ffd565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561186f578181015183820152602001611857565b50505050905090810190601f16801561189c5780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001611d936032913973ffffffffffffffffffffffffffffffffffffffff88169190611b86565b9050600081806020019051602081101561195157600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015611a955783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019190810190600090879083908110611a0c57fe5b9060005260206000200154905080876000018481548110611a2957fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080611a5957fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061089c565b600091505061089c565b6000611aab83836119a3565b611ae15750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561089c565b50600061089c565b600082815260018401602052604081205480611b4e5750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556113b1565b82856000016001830381548110611b6157fe5b90600052602060002090600202016001018190555060009150506113b1565b3b151590565b60606113ae848460008585611b9a85611b80565b611c0557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310611c6e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611c31565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611cd0576040519150601f19603f3d011682016040523d82523d6000602084013e611cd5565b606091505b5091509150611ce5828286611cf0565b979650505050505050565b60608315611cff5750816113b1565b825115611d0f5782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561172957818101518382015260200161171156fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a264697066735822122064583af919f629c1541fd6a7c7c8b9be629e996dafa750e6ade600b98c101b7f64736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061011b5760003560e01c80634f6ccce7116100b257806395d89b4111610081578063b88d4fde11610066578063b88d4fde14610402578063c87b56dd146104d5578063e985e9c5146104f25761011b565b806395d89b41146103bf578063a22cb465146103c75761011b565b80634f6ccce71461034a5780636352211e146103675780636c0360eb1461038457806370a082311461038c5761011b565b806318160ddd116100ee57806318160ddd1461027157806323b872dd1461028b5780632f745c59146102ce57806342842e0e146103075761011b565b806301ffc9a71461012057806306fdde0314610173578063081812fc146101f0578063095ea7b314610236575b600080fd5b61015f6004803603602081101561013657600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661052d565b604080519115158252519081900360200190f35b61017b610568565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101b557818101518382015260200161019d565b50505050905090810190601f1680156101e25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61020d6004803603602081101561020657600080fd5b503561061c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61026f6004803603604081101561024c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356106a5565b005b6102796107e8565b60408051918252519081900360200190f35b61026f600480360360608110156102a157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356107f9565b610279600480360360408110156102e457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561086a565b61026f6004803603606081101561031d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356108a2565b6102796004803603602081101561036057600080fd5b50356108bd565b61020d6004803603602081101561037d57600080fd5b50356108d3565b61017b6108fb565b610279600480360360208110156103a257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661097a565b61017b610a16565b61026f600480360360408110156103dd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515610a95565b61026f6004803603608081101561041857600080fd5b73ffffffffffffffffffffffffffffffffffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561046057600080fd5b82018360208201111561047257600080fd5b8035906020019184600183028401116401000000008311171561049457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610c06945050505050565b61017b600480360360208110156104eb57600080fd5b5035610c7e565b61015f6004803603604081101561050857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610fb5565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526020819052604090205460ff165b919050565b60068054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106125780601f106105e757610100808354040283529160200191610612565b820191906000526020600020905b8154815290600101906020018083116105f557829003601f168201915b5050505050905090565b600061062782610ff0565b61067c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611ec2602c913960400191505060405180910390fd5b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006106b0826108d3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610737576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611f466021913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610756610ffd565b73ffffffffffffffffffffffffffffffffffffffff16148061078457506107848161077f610ffd565b610fb5565b6107d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526038815260200180611e156038913960400191505060405180910390fd5b6107e38383611001565b505050565b60006107f460026110a1565b905090565b61080a610804610ffd565b826110ac565b61085f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611f676031913960400191505060405180910390fd5b6107e383838361119e565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604081206108999083611379565b90505b92915050565b6107e383838360405180602001604052806000815250610c06565b6000806108cb600284611385565b509392505050565b600061089c82604051806060016040528060298152602001611e7760299139600291906113a1565b60098054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106125780601f106105e757610100808354040283529160200191610612565b600073ffffffffffffffffffffffffffffffffffffffff82166109e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611e4d602a913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902061089c906110a1565b60078054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106125780601f106105e757610100808354040283529160200191610612565b610a9d610ffd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b3757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8060056000610b44610ffd565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155610bb3610ffd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b610c17610c11610ffd565b836110ac565b610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611f676031913960400191505060405180910390fd5b610c78848484846113b8565b50505050565b6060610c8982610ff0565b610cde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180611f17602f913960400191505060405180910390fd5b60008281526008602090815260408083208054825160026001831615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190921691909104601f810185900485028201850190935282815292909190830182828015610d8f5780601f10610d6457610100808354040283529160200191610d8f565b820191906000526020600020905b815481529060010190602001808311610d7257829003601f168201915b505060095493945050505060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001841615020190911604610dd6579050610563565b805115610ec5576009816040516020018083805460018160011615610100020316600290048015610e3e5780601f10610e1c576101008083540402835291820191610e3e565b820191906000526020600020905b815481529060010190602001808311610e2a575b5050825160208401908083835b60208310610e8857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610e4b565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050610563565b6009610ed084611424565b6040516020018083805460018160011615610100020316600290048015610f2e5780601f10610f0c576101008083540402835291820191610f2e565b820191906000526020600020905b815481529060010190602001808311610f1a575b5050825160208401908083835b60208310610f7857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610f3b565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b600061089c600283611551565b3390565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155819061105b826108d3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061089c8261155d565b60006110b782610ff0565b61110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180611de9602c913960400191505060405180910390fd5b6000611117836108d3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061118657508373ffffffffffffffffffffffffffffffffffffffff1661116e8461061c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061119657506111968185610fb5565b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff166111be826108d3565b73ffffffffffffffffffffffffffffffffffffffff161461122a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180611eee6029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611296576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180611dc56024913960400191505060405180910390fd5b6112a18383836107e3565b6112ac600082611001565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090206112db9082611561565b5073ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902061130b908261156d565b5061131860028284611579565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000610899838361159c565b6000808080611394868661161a565b9097909650945050505050565b60006113ae8484846116af565b90505b9392505050565b6113c384848461119e565b6113cf84848484611793565b610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180611d936032913960400191505060405180910390fd5b606081611465575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610563565b8160005b811561147d57600101600a82049150611469565b60008167ffffffffffffffff8111801561149657600080fd5b506040519080825280601f01601f1916602001820160405280156114c1576020820181803683370190505b5085935090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b831561154857600a840660300160f81b8282806001900393508151811061150e57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a840493506114eb565b50949350505050565b600061089983836119a3565b5490565b600061089983836119bb565b60006108998383611a9f565b60006113ae848473ffffffffffffffffffffffffffffffffffffffff8516611ae9565b815460009082106115f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611d716022913960400191505060405180910390fd5b82600001828154811061160757fe5b9060005260206000200154905092915050565b815460009081908310611678576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180611ea06022913960400191505060405180910390fd5b600084600001848154811061168957fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281611764576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611729578181015183820152602001611711565b50505050905090810190601f1680156117565780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061177757fe5b9060005260206000209060020201600101549150509392505050565b60006117b48473ffffffffffffffffffffffffffffffffffffffff16611b80565b6117c057506001611196565b60006119387f150b7a02000000000000000000000000000000000000000000000000000000006117ee610ffd565b888787604051602401808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561186f578181015183820152602001611857565b50505050905090810190601f16801561189c5780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051806060016040528060328152602001611d936032913973ffffffffffffffffffffffffffffffffffffffff88169190611b86565b9050600081806020019051602081101561195157600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015611a955783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8083019190810190600090879083908110611a0c57fe5b9060005260206000200154905080876000018481548110611a2957fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080611a5957fe5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061089c565b600091505061089c565b6000611aab83836119a3565b611ae15750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561089c565b50600061089c565b600082815260018401602052604081205480611b4e5750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556113b1565b82856000016001830381548110611b6157fe5b90600052602060002090600202016001018190555060009150506113b1565b3b151590565b60606113ae848460008585611b9a85611b80565b611c0557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b60208310611c6e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611c31565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611cd0576040519150601f19603f3d011682016040523d82523d6000602084013e611cd5565b606091505b5091509150611ce5828286611cf0565b979650505050505050565b60608315611cff5750816113b1565b825115611d0f5782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561172957818101518382015260200161171156fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a264697066735822122064583af919f629c1541fd6a7c7c8b9be629e996dafa750e6ade600b98c101b7f64736f6c63430007060033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "569:16185:28:-:0;;;3575:369;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3575:369:28;;;;;;;;;;-1:-1:-1;3575:369:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3575:369:28;;;;;;;;;;-1:-1:-1;3575:369:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3575:369:28;;-1:-1:-1;768:40:18;;-1:-1:-1;;;;787:20:18;-1:-1:-1;768:18:18;:40::i;:::-;3649:13:28;;;;:5;;:13;;;;;:::i;:::-;-1:-1:-1;3672:17:28;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;3777:40:28;-1:-1:-1;;;3777:18:28;:40::i;:::-;3827:49;-1:-1:-1;;;3827:18:28;:49::i;:::-;3886:51;-1:-1:-1;;;3886:18:28;:51::i;:::-;3575:369;;569:16185;;1499:198:18;-1:-1:-1;;;;;;1582:25:18;;;;;1574:66;;;;;-1:-1:-1;;;1574:66:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1650:33:18;:20;:33;;;;;;;;;;:40;;-1:-1:-1;;1650:40:18;1686:4;1650:40;;;1499:198::o;569:16185:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;569:16185:28;;;-1:-1:-1;569:16185:28;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "569:16185:28:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;965:140:18;;;;;;;;;;;;;;;;-1:-1:-1;965:140:18;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4500:90:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7107:209;;;;;;;;;;;;;;;;-1:-1:-1;7107:209:28;;:::i;:::-;;;;;;;;;;;;;;;;;;;6665:381;;;;;;;;;;;;;;;;-1:-1:-1;6665:381:28;;;;;;;;;:::i;:::-;;6175:200;;;:::i;:::-;;;;;;;;;;;;;;;;7955:300;;;;;;;;;;;;;;;;-1:-1:-1;7955:300:28;;;;;;;;;;;;;;;;;;:::i;5952:152::-;;;;;;;;;;;;;;;;-1:-1:-1;5952:152:28;;;;;;;;;:::i;8321:149::-;;;;;;;;;;;;;;;;-1:-1:-1;8321:149:28;;;;;;;;;;;;;;;;;;:::i;6447:161::-;;;;;;;;;;;;;;;;-1:-1:-1;6447:161:28;;:::i;4271:167::-;;;;;;;;;;;;;;;;-1:-1:-1;4271:167:28;;:::i;5786:87::-;;;:::i;4003:211::-;;;;;;;;;;;;;;;;-1:-1:-1;4003:211:28;;;;:::i;4654:94::-;;;:::i;7383:290::-;;;;;;;;;;;;;;;;-1:-1:-1;7383:290:28;;;;;;;;;;;:::i;8536:282::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8536:282:28;;-1:-1:-1;8536:282:28;;-1:-1:-1;;;;;8536:282:28:i;4814:740::-;;;;;;;;;;;;;;;;-1:-1:-1;4814:740:28;;:::i;7739:154::-;;;;;;;;;;;;;;;;-1:-1:-1;7739:154:28;;;;;;;;;;;:::i;965:140:18:-;1065:33;;;1042:4;1065:33;;;;;;;;;;;;;965:140;;;;:::o;4500:90:28:-;4578:5;4571:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4546:13;;4571:12;;4578:5;;4571:12;;4578:5;4571:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4500:90;:::o;7107:209::-;7175:7;7202:16;7210:7;7202;:16::i;:::-;7194:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7285:24:28;;;;:15;:24;;;;;;;;;7107:209::o;6665:381::-;6745:13;6761:16;6769:7;6761;:16::i;:::-;6745:32;;6801:5;6795:11;;:2;:11;;;;6787:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6879:5;6863:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;6888:37;6905:5;6912:12;:10;:12::i;:::-;6888:16;:37::i;:::-;6855:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7018:21;7027:2;7031:7;7018:8;:21::i;:::-;6665:381;;;:::o;6175:200::-;6228:7;6347:21;:12;:19;:21::i;:::-;6340:28;;6175:200;:::o;7955:300::-;8114:41;8133:12;:10;:12::i;:::-;8147:7;8114:18;:41::i;:::-;8106:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8220:28;8230:4;8236:2;8240:7;8220:9;:28::i;5952:152::-;6067:20;;;6041:7;6067:20;;;:13;:20;;;;;:30;;6091:5;6067:23;:30::i;:::-;6060:37;;5952:152;;;;;:::o;8321:149::-;8424:39;8441:4;8447:2;8451:7;8424:39;;;;;;;;;;;;:16;:39::i;6447:161::-;6514:7;;6555:22;:12;6571:5;6555:15;:22::i;:::-;-1:-1:-1;6533:44:28;6447:161;-1:-1:-1;;;6447:161:28:o;4271:167::-;4335:7;4361:70;4378:7;4361:70;;;;;;;;;;;;;;;;;:12;;:70;:16;:70::i;5786:87::-;5858:8;5851:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5826:13;;5851:15;;5858:8;;5851:15;;5858:8;5851:15;;;;;;;;;;;;;;;;;;;;;;;;4003:211;4067:7;4094:19;;;4086:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4178:20;;;;;;;:13;:20;;;;;:29;;:27;:29::i;4654:94::-;4734:7;4727:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4702:13;;4727:14;;4734:7;;4727:14;;4734:7;4727:14;;;;;;;;;;;;;;;;;;;;;;;;7383:290;7497:12;:10;:12::i;:::-;7485:24;;:8;:24;;;;7477:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7595:8;7550:18;:32;7569:12;:10;:12::i;:::-;7550:32;;;;;;;;;;;;;;;;;;-1:-1:-1;7550:32:28;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;;7633:12;:10;:12::i;:::-;7618:48;;;7657:8;7618:48;;;;;;;;;;;;;;;;;;;;7383:290;;:::o;8536:282::-;8667:41;8686:12;:10;:12::i;:::-;8700:7;8667:18;:41::i;:::-;8659:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8772:39;8786:4;8792:2;8796:7;8805:5;8772:13;:39::i;:::-;8536:282;;;;:::o;4814:740::-;4879:13;4912:16;4920:7;4912;:16::i;:::-;4904:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4991:23;5017:19;;;:10;:19;;;;;;;;4991:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5017:19;;4991:45;;;5017:19;4991:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5115:8:28;5109:22;4991:45;;-1:-1:-1;;;;5109:22:28;;;;;;;;;;;;;5105:74;;5159:9;-1:-1:-1;5152:16:28;;5105:74;5281:23;;:27;5277:110;;5355:8;5365:9;5338:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5338:37:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5324:52;;;;;5277:110;5517:8;5527:18;:7;:16;:18::i;:::-;5500:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5500:46:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5486:61;;;4814:740;;;:::o;7739:154::-;7851:25;;;;7828:4;7851:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;7739:154::o;10252:117::-;10309:4;10332:30;:12;10354:7;10332:21;:30::i;598:104:17:-;685:10;598:104;:::o;15908:155:28:-;15973:24;;;;:15;:24;;;;;:29;;;;;;;;;;;;;:24;;16026:16;15973:24;16026:7;:16::i;:::-;16017:39;;;;;;;;;;;;15908:155;;:::o;7031:121:35:-;7100:7;7126:19;7134:3;7126:7;:19::i;10527:329:28:-;10612:4;10636:16;10644:7;10636;:16::i;:::-;10628:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10711:13;10727:16;10735:7;10727;:16::i;:::-;10711:32;;10772:5;10761:16;;:7;:16;;;:51;;;;10805:7;10781:31;;:20;10793:7;10781:11;:20::i;:::-;:31;;;10761:51;:87;;;;10816:32;10833:5;10840:7;10816:16;:32::i;:::-;10753:96;10527:329;-1:-1:-1;;;;10527:329:28:o;13521:559::-;13638:4;13618:24;;:16;13626:7;13618;:16::i;:::-;:24;;;13610:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13706:16;;;13698:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13774:39;13795:4;13801:2;13805:7;13774:20;:39::i;:::-;13875:29;13892:1;13896:7;13875:8;:29::i;:::-;13915:19;;;;;;;:13;:19;;;;;:35;;13942:7;13915:26;:35::i;:::-;-1:-1:-1;13960:17:28;;;;;;;:13;:17;;;;;:30;;13982:7;13960:21;:30::i;:::-;-1:-1:-1;14001:29:28;:12;14018:7;14027:2;14001:16;:29::i;:::-;;14065:7;14061:2;14046:27;;14055:4;14046:27;;;;;;;;;;;;13521:559;;;:::o;9214:135:36:-;9285:7;9319:22;9323:3;9335:5;9319:3;:22::i;7480:224:35:-;7560:7;;;;7619:22;7623:3;7635:5;7619:3;:22::i;:::-;7588:53;;;;-1:-1:-1;7480:224:35;-1:-1:-1;;;;;7480:224:35:o;8123:202::-;8230:7;8272:44;8277:3;8297;8303:12;8272:4;:44::i;:::-;8264:53;-1:-1:-1;8123:202:35;;;;;;:::o;9680:269:28:-;9793:28;9803:4;9809:2;9813:7;9793:9;:28::i;:::-;9839:48;9862:4;9868:2;9872:7;9881:5;9839:22;:48::i;:::-;9831:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;210:723:37;266:13;483:10;479:51;;-1:-1:-1;509:10:37;;;;;;;;;;;;;;;;;;;479:51;554:5;539:12;593:75;600:9;;593:75;;625:8;;655:2;647:10;;;;593:75;;;677:19;709:6;699:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;699:17:37;-1:-1:-1;769:5:37;;-1:-1:-1;677:39:37;-1:-1:-1;742:10:37;;;784:112;791:9;;784:112;;857:2;850:4;:9;845:2;:14;834:27;;816:6;823:7;;;;;;;816:15;;;;;;;;;;;:45;;;;;;;;;;-1:-1:-1;883:2:37;875:10;;;;784:112;;;-1:-1:-1;919:6:37;210:723;-1:-1:-1;;;;210:723:37:o;6799:149:35:-;6883:4;6906:35;6916:3;6936;6906:9;:35::i;4491:108::-;4573:19;;4491:108::o;8329:135:36:-;8399:4;8422:35;8430:3;8450:5;8422:7;:35::i;8032:129::-;8099:4;8122:32;8127:3;8147:5;8122:4;:32::i;6247:174:35:-;6336:4;6359:55;6364:3;6384;6398:14;;;6359:4;:55::i;4452:201:36:-;4546:18;;4519:7;;4546:26;-1:-1:-1;4538:73:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4628:3;:11;;4640:5;4628:18;;;;;;;;;;;;;;;;4621:25;;4452:201;;;;:::o;4942:274:35:-;5045:19;;5009:7;;;;5045:27;-1:-1:-1;5037:74:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5122:22;5147:3;:12;;5160:5;5147:19;;;;;;;;;;;;;;;;;;5122:44;;5184:5;:10;;;5196:5;:12;;;5176:33;;;;;4942:274;;;;;:::o;5623:315::-;5717:7;5755:17;;;:12;;;:17;;;;;;5805:12;5790:13;5782:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5871:3;:12;;5895:1;5884:8;:12;5871:26;;;;;;;;;;;;;;;;;;:33;;;5864:40;;;5623:315;;;;;:::o;15313:589:28:-;15433:4;15458:15;:2;:13;;;:15::i;:::-;15453:58;;-1:-1:-1;15496:4:28;15489:11;;15453:58;15520:23;15546:246;15598:45;15657:12;:10;:12::i;:::-;15683:4;15701:7;15722:5;15562:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15546:246;;;;;;;;;;;;;;;;;:15;;;;:246;:15;:246::i;:::-;15520:272;;15802:13;15829:10;15818:32;;;;;;;;;;;;;;;-1:-1:-1;15818:32:28;15868:26;;15878:16;15868:26;;-1:-1:-1;;;15313:589:28;;;;;;:::o;4278:123:35:-;4349:4;4372:17;;;:12;;;;;:17;;;;;;:22;;;4278:123::o;2212:1512:36:-;2278:4;2415:19;;;:12;;;:19;;;;;;2449:15;;2445:1273;;2878:18;;2830:14;;;;;2878:22;;;;2806:21;;2878:3;;:22;;3160;;;;;;;;;;;;;;3140:42;;3303:9;3274:3;:11;;3286:13;3274:26;;;;;;;;;;;;;;;;;;;:38;;;;3378:23;;;3420:1;3378:12;;;:23;;;;;;3404:17;;;3378:43;;3527:17;;3378:3;;3527:17;;;;;;;;;;;;;;;;;;;;;;3619:3;:12;;:19;3632:5;3619:19;;;;;;;;;;;3612:26;;;3660:4;3653:11;;;;;;;;2445:1273;3702:5;3695:12;;;;;1640:404;1703:4;1724:21;1734:3;1739:5;1724:9;:21::i;:::-;1719:319;;-1:-1:-1;1761:23:36;;;;;;;;:11;:23;;;;;;;;;;;;;1941:18;;1919:19;;;:12;;;:19;;;;;;:40;;;;1973:11;;1719:319;-1:-1:-1;2022:5:36;2015:12;;1836:678:35;1912:4;2045:17;;;:12;;;:17;;;;;;2077:13;2073:435;;-1:-1:-1;;2161:38:35;;;;;;;;;;;;;;;;;;2143:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;2355:19;;2335:17;;;:12;;;:17;;;;;;;:39;2388:11;;2073:435;2466:5;2430:3;:12;;2454:1;2443:8;:12;2430:26;;;;;;;;;;;;;;;;;;:33;;:41;;;;2492:5;2485:12;;;;;726:413:34;1086:20;1124:8;;;726:413::o;3581:193::-;3684:12;3715:52;3737:6;3745:4;3751:1;3754:12;3684;4858:18;4869:6;4858:10;:18::i;:::-;4850:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4981:12;4995:23;5022:6;:11;;5042:5;5050:4;5022:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4980:75;;;;5072:52;5090:7;5099:10;5111:12;5072:17;:52::i;:::-;5065:59;4608:523;-1:-1:-1;;;;;;;4608:523:34:o;6111:725::-;6226:12;6254:7;6250:580;;;-1:-1:-1;6284:10:34;6277:17;;6250:580;6395:17;;:21;6391:429;;6653:10;6647:17;6713:15;6700:10;6696:2;6692:19;6685:44;6602:145;6785:20;;;;;;;;;;;;;;;;;;;;6792:12;;6785:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "source": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../GSN/Context.sol\";\nimport \"./IERC721.sol\";\nimport \"./IERC721Metadata.sol\";\nimport \"./IERC721Enumerable.sol\";\nimport \"./IERC721Receiver.sol\";\nimport \"../../introspection/ERC165.sol\";\nimport \"../../math/SafeMath.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/EnumerableSet.sol\";\nimport \"../../utils/EnumerableMap.sol\";\nimport \"../../utils/Strings.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {\n    using SafeMath for uint256;\n    using Address for address;\n    using EnumerableSet for EnumerableSet.UintSet;\n    using EnumerableMap for EnumerableMap.UintToAddressMap;\n    using Strings for uint256;\n\n    // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n    // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n    // Mapping from holder address to their (enumerable) set of owned tokens\n    mapping (address => EnumerableSet.UintSet) private _holderTokens;\n\n    // Enumerable mapping from token ids to their owners\n    EnumerableMap.UintToAddressMap private _tokenOwners;\n\n    // Mapping from token ID to approved address\n    mapping (uint256 => address) private _tokenApprovals;\n\n    // Mapping from owner to operator approvals\n    mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n    // Token name\n    string private _name;\n\n    // Token symbol\n    string private _symbol;\n\n    // Optional mapping for token URIs\n    mapping (uint256 => string) private _tokenURIs;\n\n    // Base URI\n    string private _baseURI;\n\n    /*\n     *     bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n     *     bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n     *     bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n     *     bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n     *     bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n     *     bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n     *     bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n     *     bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n     *     bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n     *\n     *     => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n     *        0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n     */\n    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n    /*\n     *     bytes4(keccak256('name()')) == 0x06fdde03\n     *     bytes4(keccak256('symbol()')) == 0x95d89b41\n     *     bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n     *\n     *     => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n     */\n    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n    /*\n     *     bytes4(keccak256('totalSupply()')) == 0x18160ddd\n     *     bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n     *     bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n     *\n     *     => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n     */\n    bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n    /**\n     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n     */\n    constructor (string memory name_, string memory symbol_) public {\n        _name = name_;\n        _symbol = symbol_;\n\n        // register the supported interfaces to conform to ERC721 via ERC165\n        _registerInterface(_INTERFACE_ID_ERC721);\n        _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n        _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n    }\n\n    /**\n     * @dev See {IERC721-balanceOf}.\n     */\n    function balanceOf(address owner) public view override returns (uint256) {\n        require(owner != address(0), \"ERC721: balance query for the zero address\");\n\n        return _holderTokens[owner].length();\n    }\n\n    /**\n     * @dev See {IERC721-ownerOf}.\n     */\n    function ownerOf(uint256 tokenId) public view override returns (address) {\n        return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n    }\n\n    /**\n     * @dev See {IERC721Metadata-name}.\n     */\n    function name() public view override returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev See {IERC721Metadata-symbol}.\n     */\n    function symbol() public view override returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev See {IERC721Metadata-tokenURI}.\n     */\n    function tokenURI(uint256 tokenId) public view override returns (string memory) {\n        require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n        string memory _tokenURI = _tokenURIs[tokenId];\n\n        // If there is no base URI, return the token URI.\n        if (bytes(_baseURI).length == 0) {\n            return _tokenURI;\n        }\n        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n        if (bytes(_tokenURI).length > 0) {\n            return string(abi.encodePacked(_baseURI, _tokenURI));\n        }\n        // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n        return string(abi.encodePacked(_baseURI, tokenId.toString()));\n    }\n\n    /**\n    * @dev Returns the base URI set via {_setBaseURI}. This will be\n    * automatically added as a prefix in {tokenURI} to each token's URI, or\n    * to the token ID if no specific URI is set for that token ID.\n    */\n    function baseURI() public view returns (string memory) {\n        return _baseURI;\n    }\n\n    /**\n     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n     */\n    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {\n        return _holderTokens[owner].at(index);\n    }\n\n    /**\n     * @dev See {IERC721Enumerable-totalSupply}.\n     */\n    function totalSupply() public view override returns (uint256) {\n        // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n        return _tokenOwners.length();\n    }\n\n    /**\n     * @dev See {IERC721Enumerable-tokenByIndex}.\n     */\n    function tokenByIndex(uint256 index) public view override returns (uint256) {\n        (uint256 tokenId, ) = _tokenOwners.at(index);\n        return tokenId;\n    }\n\n    /**\n     * @dev See {IERC721-approve}.\n     */\n    function approve(address to, uint256 tokenId) public virtual override {\n        address owner = ownerOf(tokenId);\n        require(to != owner, \"ERC721: approval to current owner\");\n\n        require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n            \"ERC721: approve caller is not owner nor approved for all\"\n        );\n\n        _approve(to, tokenId);\n    }\n\n    /**\n     * @dev See {IERC721-getApproved}.\n     */\n    function getApproved(uint256 tokenId) public view override returns (address) {\n        require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n        return _tokenApprovals[tokenId];\n    }\n\n    /**\n     * @dev See {IERC721-setApprovalForAll}.\n     */\n    function setApprovalForAll(address operator, bool approved) public virtual override {\n        require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n        _operatorApprovals[_msgSender()][operator] = approved;\n        emit ApprovalForAll(_msgSender(), operator, approved);\n    }\n\n    /**\n     * @dev See {IERC721-isApprovedForAll}.\n     */\n    function isApprovedForAll(address owner, address operator) public view override returns (bool) {\n        return _operatorApprovals[owner][operator];\n    }\n\n    /**\n     * @dev See {IERC721-transferFrom}.\n     */\n    function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n        //solhint-disable-next-line max-line-length\n        require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n        _transfer(from, to, tokenId);\n    }\n\n    /**\n     * @dev See {IERC721-safeTransferFrom}.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n        safeTransferFrom(from, to, tokenId, \"\");\n    }\n\n    /**\n     * @dev See {IERC721-safeTransferFrom}.\n     */\n    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n        require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n        _safeTransfer(from, to, tokenId, _data);\n    }\n\n    /**\n     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n     * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n     *\n     * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n     *\n     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n     * implement alternative mechanisms to perform token transfer, such as signature-based.\n     *\n     * Requirements:\n     *\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must exist and be owned by `from`.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n        _transfer(from, to, tokenId);\n        require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n    }\n\n    /**\n     * @dev Returns whether `tokenId` exists.\n     *\n     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n     *\n     * Tokens start existing when they are minted (`_mint`),\n     * and stop existing when they are burned (`_burn`).\n     */\n    function _exists(uint256 tokenId) internal view returns (bool) {\n        return _tokenOwners.contains(tokenId);\n    }\n\n    /**\n     * @dev Returns whether `spender` is allowed to manage `tokenId`.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {\n        require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n        address owner = ownerOf(tokenId);\n        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n    }\n\n    /**\n     * @dev Safely mints `tokenId` and transfers it to `to`.\n     *\n     * Requirements:\n     d*\n     * - `tokenId` must not exist.\n     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _safeMint(address to, uint256 tokenId) internal virtual {\n        _safeMint(to, tokenId, \"\");\n    }\n\n    /**\n     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n     */\n    function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n        _mint(to, tokenId);\n        require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n    }\n\n    /**\n     * @dev Mints `tokenId` and transfers it to `to`.\n     *\n     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n     *\n     * Requirements:\n     *\n     * - `tokenId` must not exist.\n     * - `to` cannot be the zero address.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _mint(address to, uint256 tokenId) internal virtual {\n        require(to != address(0), \"ERC721: mint to the zero address\");\n        require(!_exists(tokenId), \"ERC721: token already minted\");\n\n        _beforeTokenTransfer(address(0), to, tokenId);\n\n        _holderTokens[to].add(tokenId);\n\n        _tokenOwners.set(tokenId, to);\n\n        emit Transfer(address(0), to, tokenId);\n    }\n\n    /**\n     * @dev Destroys `tokenId`.\n     * The approval is cleared when the token is burned.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _burn(uint256 tokenId) internal virtual {\n        address owner = ownerOf(tokenId);\n\n        _beforeTokenTransfer(owner, address(0), tokenId);\n\n        // Clear approvals\n        _approve(address(0), tokenId);\n\n        // Clear metadata (if any)\n        if (bytes(_tokenURIs[tokenId]).length != 0) {\n            delete _tokenURIs[tokenId];\n        }\n\n        _holderTokens[owner].remove(tokenId);\n\n        _tokenOwners.remove(tokenId);\n\n        emit Transfer(owner, address(0), tokenId);\n    }\n\n    /**\n     * @dev Transfers `tokenId` from `from` to `to`.\n     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - `tokenId` token must be owned by `from`.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _transfer(address from, address to, uint256 tokenId) internal virtual {\n        require(ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n        require(to != address(0), \"ERC721: transfer to the zero address\");\n\n        _beforeTokenTransfer(from, to, tokenId);\n\n        // Clear approvals from the previous owner\n        _approve(address(0), tokenId);\n\n        _holderTokens[from].remove(tokenId);\n        _holderTokens[to].add(tokenId);\n\n        _tokenOwners.set(tokenId, to);\n\n        emit Transfer(from, to, tokenId);\n    }\n\n    /**\n     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n     *\n     * Requirements:\n     *\n     * - `tokenId` must exist.\n     */\n    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n        require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n        _tokenURIs[tokenId] = _tokenURI;\n    }\n\n    /**\n     * @dev Internal function to set the base URI for all token IDs. It is\n     * automatically added as a prefix to the value returned in {tokenURI},\n     * or to the token ID if {tokenURI} is empty.\n     */\n    function _setBaseURI(string memory baseURI_) internal virtual {\n        _baseURI = baseURI_;\n    }\n\n    /**\n     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n     * The call is not executed if the target address is not a contract.\n     *\n     * @param from address representing the previous owner of the given token ID\n     * @param to target address that will receive the tokens\n     * @param tokenId uint256 ID of the token to be transferred\n     * @param _data bytes optional data to send along with the call\n     * @return bool whether the call correctly returned the expected magic value\n     */\n    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n        private returns (bool)\n    {\n        if (!to.isContract()) {\n            return true;\n        }\n        bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n            IERC721Receiver(to).onERC721Received.selector,\n            _msgSender(),\n            from,\n            tokenId,\n            _data\n        ), \"ERC721: transfer to non ERC721Receiver implementer\");\n        bytes4 retval = abi.decode(returndata, (bytes4));\n        return (retval == _ERC721_RECEIVED);\n    }\n\n    function _approve(address to, uint256 tokenId) private {\n        _tokenApprovals[tokenId] = to;\n        emit Approval(ownerOf(tokenId), to, tokenId);\n    }\n\n    /**\n     * @dev Hook that is called before any token transfer. This includes minting\n     * and burning.\n     *\n     * Calling conditions:\n     *\n     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n     * transferred to `to`.\n     * - When `from` is zero, `tokenId` will be minted for `to`.\n     * - When `to` is zero, ``from``'s `tokenId` will be burned.\n     * - `from` cannot be the zero address.\n     * - `to` cannot be the zero address.\n     *\n     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n     */\n    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n}\n",
  "sourcePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
  "ast": {
    "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
    "exportedSymbols": {
      "Address": [
        6821
      ],
      "Context": [
        4324
      ],
      "ERC165": [
        4381
      ],
      "ERC721": [
        6358
      ],
      "EnumerableMap": [
        7276
      ],
      "EnumerableSet": [
        7756
      ],
      "IERC165": [
        4393
      ],
      "IERC721": [
        6501
      ],
      "IERC721Enumerable": [
        6532
      ],
      "IERC721Metadata": [
        6559
      ],
      "IERC721Receiver": [
        6577
      ],
      "SafeMath": [
        4589
      ],
      "Strings": [
        7843
      ]
    },
    "id": 6359,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 5429,
        "literals": [
          "solidity",
          ">=",
          "0.6",
          ".0",
          "<",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:31:28"
      },
      {
        "absolutePath": "@openzeppelin/contracts/GSN/Context.sol",
        "file": "../../GSN/Context.sol",
        "id": 5430,
        "nodeType": "ImportDirective",
        "scope": 6359,
        "sourceUnit": 4325,
        "src": "66:31:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
        "file": "./IERC721.sol",
        "id": 5431,
        "nodeType": "ImportDirective",
        "scope": 6359,
        "sourceUnit": 6502,
        "src": "98:23:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol",
        "file": "./IERC721Metadata.sol",
        "id": 5432,
        "nodeType": "ImportDirective",
        "scope": 6359,
        "sourceUnit": 6560,
        "src": "122:31:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol",
        "file": "./IERC721Enumerable.sol",
        "id": 5433,
        "nodeType": "ImportDirective",
        "scope": 6359,
        "sourceUnit": 6533,
        "src": "154:33:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
        "file": "./IERC721Receiver.sol",
        "id": 5434,
        "nodeType": "ImportDirective",
        "scope": 6359,
        "sourceUnit": 6578,
        "src": "188:31:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/introspection/ERC165.sol",
        "file": "../../introspection/ERC165.sol",
        "id": 5435,
        "nodeType": "ImportDirective",
        "scope": 6359,
        "sourceUnit": 4382,
        "src": "220:40:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "../../math/SafeMath.sol",
        "id": 5436,
        "nodeType": "ImportDirective",
        "scope": 6359,
        "sourceUnit": 4590,
        "src": "261:33:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
        "file": "../../utils/Address.sol",
        "id": 5437,
        "nodeType": "ImportDirective",
        "scope": 6359,
        "sourceUnit": 6822,
        "src": "295:33:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/EnumerableSet.sol",
        "file": "../../utils/EnumerableSet.sol",
        "id": 5438,
        "nodeType": "ImportDirective",
        "scope": 6359,
        "sourceUnit": 7757,
        "src": "329:39:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/EnumerableMap.sol",
        "file": "../../utils/EnumerableMap.sol",
        "id": 5439,
        "nodeType": "ImportDirective",
        "scope": 6359,
        "sourceUnit": 7277,
        "src": "369:39:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
        "file": "../../utils/Strings.sol",
        "id": 5440,
        "nodeType": "ImportDirective",
        "scope": 6359,
        "sourceUnit": 7844,
        "src": "409:33:28",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 5442,
              "name": "Context",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4324,
              "src": "588:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Context_$4324",
                "typeString": "contract Context"
              }
            },
            "id": 5443,
            "nodeType": "InheritanceSpecifier",
            "src": "588:7:28"
          },
          {
            "baseName": {
              "id": 5444,
              "name": "ERC165",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4381,
              "src": "597:6:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC165_$4381",
                "typeString": "contract ERC165"
              }
            },
            "id": 5445,
            "nodeType": "InheritanceSpecifier",
            "src": "597:6:28"
          },
          {
            "baseName": {
              "id": 5446,
              "name": "IERC721",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6501,
              "src": "605:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC721_$6501",
                "typeString": "contract IERC721"
              }
            },
            "id": 5447,
            "nodeType": "InheritanceSpecifier",
            "src": "605:7:28"
          },
          {
            "baseName": {
              "id": 5448,
              "name": "IERC721Metadata",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6559,
              "src": "614:15:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC721Metadata_$6559",
                "typeString": "contract IERC721Metadata"
              }
            },
            "id": 5449,
            "nodeType": "InheritanceSpecifier",
            "src": "614:15:28"
          },
          {
            "baseName": {
              "id": 5450,
              "name": "IERC721Enumerable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6532,
              "src": "631:17:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC721Enumerable_$6532",
                "typeString": "contract IERC721Enumerable"
              }
            },
            "id": 5451,
            "nodeType": "InheritanceSpecifier",
            "src": "631:17:28"
          }
        ],
        "contractDependencies": [
          4324,
          4381,
          4393,
          6501,
          6532,
          6559
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 5441,
          "nodeType": "StructuredDocumentation",
          "src": "444:124:28",
          "text": " @title ERC721 Non-Fungible Token Standard basic implementation\n @dev see https://eips.ethereum.org/EIPS/eip-721"
        },
        "fullyImplemented": true,
        "id": 6358,
        "linearizedBaseContracts": [
          6358,
          6532,
          6559,
          6501,
          4381,
          4393,
          4324
        ],
        "name": "ERC721",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 5454,
            "libraryName": {
              "id": 5452,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4589,
              "src": "661:8:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$4589",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "655:27:28",
            "typeName": {
              "id": 5453,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "674:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 5457,
            "libraryName": {
              "id": 5455,
              "name": "Address",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6821,
              "src": "693:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Address_$6821",
                "typeString": "library Address"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "687:26:28",
            "typeName": {
              "id": 5456,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "705:7:28",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "id": 5460,
            "libraryName": {
              "id": 5458,
              "name": "EnumerableSet",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7756,
              "src": "724:13:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EnumerableSet_$7756",
                "typeString": "library EnumerableSet"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "718:46:28",
            "typeName": {
              "id": 5459,
              "name": "EnumerableSet.UintSet",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7661,
              "src": "742:21:28",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_UintSet_$7661_storage_ptr",
                "typeString": "struct EnumerableSet.UintSet"
              }
            }
          },
          {
            "id": 5463,
            "libraryName": {
              "id": 5461,
              "name": "EnumerableMap",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7276,
              "src": "775:13:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EnumerableMap_$7276",
                "typeString": "library EnumerableMap"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "769:55:28",
            "typeName": {
              "id": 5462,
              "name": "EnumerableMap.UintToAddressMap",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7101,
              "src": "793:30:28",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_UintToAddressMap_$7101_storage_ptr",
                "typeString": "struct EnumerableMap.UintToAddressMap"
              }
            }
          },
          {
            "id": 5466,
            "libraryName": {
              "id": 5464,
              "name": "Strings",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7843,
              "src": "835:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Strings_$7843",
                "typeString": "library Strings"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "829:26:28",
            "typeName": {
              "id": 5465,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "847:7:28",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 5469,
            "mutability": "constant",
            "name": "_ERC721_RECEIVED",
            "nodeType": "VariableDeclaration",
            "scope": 6358,
            "src": "1033:53:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 5467,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "1033:6:28",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30783135306237613032",
              "id": 5468,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1076:10:28",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_353073666_by_1",
                "typeString": "int_const 353073666"
              },
              "value": "0x150b7a02"
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5473,
            "mutability": "mutable",
            "name": "_holderTokens",
            "nodeType": "VariableDeclaration",
            "scope": 6358,
            "src": "1170:64:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$7661_storage_$",
              "typeString": "mapping(address => struct EnumerableSet.UintSet)"
            },
            "typeName": {
              "id": 5472,
              "keyType": {
                "id": 5470,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1179:7:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1170:42:28",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$7661_storage_$",
                "typeString": "mapping(address => struct EnumerableSet.UintSet)"
              },
              "valueType": {
                "id": 5471,
                "name": "EnumerableSet.UintSet",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 7661,
                "src": "1190:21:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_UintSet_$7661_storage_ptr",
                  "typeString": "struct EnumerableSet.UintSet"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5475,
            "mutability": "mutable",
            "name": "_tokenOwners",
            "nodeType": "VariableDeclaration",
            "scope": 6358,
            "src": "1298:51:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_UintToAddressMap_$7101_storage",
              "typeString": "struct EnumerableMap.UintToAddressMap"
            },
            "typeName": {
              "id": 5474,
              "name": "EnumerableMap.UintToAddressMap",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 7101,
              "src": "1298:30:28",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_UintToAddressMap_$7101_storage_ptr",
                "typeString": "struct EnumerableMap.UintToAddressMap"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5479,
            "mutability": "mutable",
            "name": "_tokenApprovals",
            "nodeType": "VariableDeclaration",
            "scope": 6358,
            "src": "1405:52:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
              "typeString": "mapping(uint256 => address)"
            },
            "typeName": {
              "id": 5478,
              "keyType": {
                "id": 5476,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1414:7:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1405:28:28",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                "typeString": "mapping(uint256 => address)"
              },
              "valueType": {
                "id": 5477,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1425:7:28",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5485,
            "mutability": "mutable",
            "name": "_operatorApprovals",
            "nodeType": "VariableDeclaration",
            "scope": 6358,
            "src": "1512:73:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
              "typeString": "mapping(address => mapping(address => bool))"
            },
            "typeName": {
              "id": 5484,
              "keyType": {
                "id": 5480,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1521:7:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1512:46:28",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                "typeString": "mapping(address => mapping(address => bool))"
              },
              "valueType": {
                "id": 5483,
                "keyType": {
                  "id": 5481,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1541:7:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "1532:25:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "valueType": {
                  "id": 5482,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1552:4:28",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5487,
            "mutability": "mutable",
            "name": "_name",
            "nodeType": "VariableDeclaration",
            "scope": 6358,
            "src": "1610:20:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 5486,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1610:6:28",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5489,
            "mutability": "mutable",
            "name": "_symbol",
            "nodeType": "VariableDeclaration",
            "scope": 6358,
            "src": "1657:22:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 5488,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1657:6:28",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5493,
            "mutability": "mutable",
            "name": "_tokenURIs",
            "nodeType": "VariableDeclaration",
            "scope": 6358,
            "src": "1725:46:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
              "typeString": "mapping(uint256 => string)"
            },
            "typeName": {
              "id": 5492,
              "keyType": {
                "id": 5490,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1734:7:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1725:27:28",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                "typeString": "mapping(uint256 => string)"
              },
              "valueType": {
                "id": 5491,
                "name": "string",
                "nodeType": "ElementaryTypeName",
                "src": "1745:6:28",
                "typeDescriptions": {
                  "typeIdentifier": "t_string_storage_ptr",
                  "typeString": "string"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 5495,
            "mutability": "mutable",
            "name": "_baseURI",
            "nodeType": "VariableDeclaration",
            "scope": 6358,
            "src": "1794:23:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 5494,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1794:6:28",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 5498,
            "mutability": "constant",
            "name": "_INTERFACE_ID_ERC721",
            "nodeType": "VariableDeclaration",
            "scope": 6358,
            "src": "2693:57:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 5496,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "2693:6:28",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30783830616335386364",
              "id": 5497,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2740:10:28",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2158778573_by_1",
                "typeString": "int_const 2158778573"
              },
              "value": "0x80ac58cd"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 5501,
            "mutability": "constant",
            "name": "_INTERFACE_ID_ERC721_METADATA",
            "nodeType": "VariableDeclaration",
            "scope": 6358,
            "src": "3016:66:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 5499,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "3016:6:28",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30783562356531333966",
              "id": 5500,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3072:10:28",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1532892063_by_1",
                "typeString": "int_const 1532892063"
              },
              "value": "0x5b5e139f"
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 5504,
            "mutability": "constant",
            "name": "_INTERFACE_ID_ERC721_ENUMERABLE",
            "nodeType": "VariableDeclaration",
            "scope": 6358,
            "src": "3387:68:28",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 5502,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "3387:6:28",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30783738306539643633",
              "id": 5503,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3445:10:28",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2014223715_by_1",
                "typeString": "int_const 2014223715"
              },
              "value": "0x780e9d63"
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 5532,
              "nodeType": "Block",
              "src": "3639:305:28",
              "statements": [
                {
                  "expression": {
                    "id": 5514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 5512,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5487,
                      "src": "3649:5:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5513,
                      "name": "name_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5507,
                      "src": "3657:5:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "3649:13:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 5515,
                  "nodeType": "ExpressionStatement",
                  "src": "3649:13:28"
                },
                {
                  "expression": {
                    "id": 5518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 5516,
                      "name": "_symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5489,
                      "src": "3672:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5517,
                      "name": "symbol_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5509,
                      "src": "3682:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "3672:17:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 5519,
                  "nodeType": "ExpressionStatement",
                  "src": "3672:17:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5521,
                        "name": "_INTERFACE_ID_ERC721",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5498,
                        "src": "3796:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 5520,
                      "name": "_registerInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4380,
                      "src": "3777:18:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes4)"
                      }
                    },
                    "id": 5522,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3777:40:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5523,
                  "nodeType": "ExpressionStatement",
                  "src": "3777:40:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5525,
                        "name": "_INTERFACE_ID_ERC721_METADATA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5501,
                        "src": "3846:29:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 5524,
                      "name": "_registerInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4380,
                      "src": "3827:18:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes4)"
                      }
                    },
                    "id": 5526,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3827:49:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5527,
                  "nodeType": "ExpressionStatement",
                  "src": "3827:49:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5529,
                        "name": "_INTERFACE_ID_ERC721_ENUMERABLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5504,
                        "src": "3905:31:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "id": 5528,
                      "name": "_registerInterface",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4380,
                      "src": "3886:18:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes4_$returns$__$",
                        "typeString": "function (bytes4)"
                      }
                    },
                    "id": 5530,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3886:51:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5531,
                  "nodeType": "ExpressionStatement",
                  "src": "3886:51:28"
                }
              ]
            },
            "documentation": {
              "id": 5505,
              "nodeType": "StructuredDocumentation",
              "src": "3462:108:28",
              "text": " @dev Initializes the contract by setting a `name` and a `symbol` to the token collection."
            },
            "id": 5533,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5510,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5507,
                  "mutability": "mutable",
                  "name": "name_",
                  "nodeType": "VariableDeclaration",
                  "scope": 5533,
                  "src": "3588:19:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5506,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3588:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5509,
                  "mutability": "mutable",
                  "name": "symbol_",
                  "nodeType": "VariableDeclaration",
                  "scope": 5533,
                  "src": "3609:21:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5508,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3609:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3587:44:28"
            },
            "returnParameters": {
              "id": 5511,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3639:0:28"
            },
            "scope": 6358,
            "src": "3575:369:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6426
            ],
            "body": {
              "id": 5558,
              "nodeType": "Block",
              "src": "4076:138:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5548,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5543,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5536,
                          "src": "4094:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 5546,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4111:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 5545,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4103:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 5544,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4103:7:28",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5547,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4103:10:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "4094:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373",
                        "id": 5549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4115:44:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba",
                          "typeString": "literal_string \"ERC721: balance query for the zero address\""
                        },
                        "value": "ERC721: balance query for the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba",
                          "typeString": "literal_string \"ERC721: balance query for the zero address\""
                        }
                      ],
                      "id": 5542,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "4086:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5550,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4086:74:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5551,
                  "nodeType": "ExpressionStatement",
                  "src": "4086:74:28"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "baseExpression": {
                          "id": 5552,
                          "name": "_holderTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5473,
                          "src": "4178:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$7661_storage_$",
                            "typeString": "mapping(address => struct EnumerableSet.UintSet storage ref)"
                          }
                        },
                        "id": 5554,
                        "indexExpression": {
                          "id": 5553,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5536,
                          "src": "4192:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "4178:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$7661_storage",
                          "typeString": "struct EnumerableSet.UintSet storage ref"
                        }
                      },
                      "id": 5555,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7735,
                      "src": "4178:27:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_UintSet_$7661_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_UintSet_$7661_storage_ptr_$",
                        "typeString": "function (struct EnumerableSet.UintSet storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 5556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4178:29:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5541,
                  "id": 5557,
                  "nodeType": "Return",
                  "src": "4171:36:28"
                }
              ]
            },
            "documentation": {
              "id": 5534,
              "nodeType": "StructuredDocumentation",
              "src": "3950:48:28",
              "text": " @dev See {IERC721-balanceOf}."
            },
            "functionSelector": "70a08231",
            "id": 5559,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5538,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4049:8:28"
            },
            "parameters": {
              "id": 5537,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5536,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 5559,
                  "src": "4022:13:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5535,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4022:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4021:15:28"
            },
            "returnParameters": {
              "id": 5541,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5540,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5559,
                  "src": "4067:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5539,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4067:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4066:9:28"
            },
            "scope": 6358,
            "src": "4003:211:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6434
            ],
            "body": {
              "id": 5574,
              "nodeType": "Block",
              "src": "4344:94:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5570,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5562,
                        "src": "4378:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                        "id": 5571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4387:43:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
                          "typeString": "literal_string \"ERC721: owner query for nonexistent token\""
                        },
                        "value": "ERC721: owner query for nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
                          "typeString": "literal_string \"ERC721: owner query for nonexistent token\""
                        }
                      ],
                      "expression": {
                        "id": 5568,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5475,
                        "src": "4361:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$7101_storage",
                          "typeString": "struct EnumerableMap.UintToAddressMap storage ref"
                        }
                      },
                      "id": 5569,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "get",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7275,
                      "src": "4361:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_UintToAddressMap_$7101_storage_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_address_$bound_to$_t_struct$_UintToAddressMap_$7101_storage_ptr_$",
                        "typeString": "function (struct EnumerableMap.UintToAddressMap storage pointer,uint256,string memory) view returns (address)"
                      }
                    },
                    "id": 5572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4361:70:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 5567,
                  "id": 5573,
                  "nodeType": "Return",
                  "src": "4354:77:28"
                }
              ]
            },
            "documentation": {
              "id": 5560,
              "nodeType": "StructuredDocumentation",
              "src": "4220:46:28",
              "text": " @dev See {IERC721-ownerOf}."
            },
            "functionSelector": "6352211e",
            "id": 5575,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ownerOf",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5564,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4317:8:28"
            },
            "parameters": {
              "id": 5563,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5562,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5575,
                  "src": "4288:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5561,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4288:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4287:17:28"
            },
            "returnParameters": {
              "id": 5567,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5566,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5575,
                  "src": "4335:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5565,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4335:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4334:9:28"
            },
            "scope": 6358,
            "src": "4271:167:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6544
            ],
            "body": {
              "id": 5584,
              "nodeType": "Block",
              "src": "4561:29:28",
              "statements": [
                {
                  "expression": {
                    "id": 5582,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5487,
                    "src": "4578:5:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 5581,
                  "id": 5583,
                  "nodeType": "Return",
                  "src": "4571:12:28"
                }
              ]
            },
            "documentation": {
              "id": 5576,
              "nodeType": "StructuredDocumentation",
              "src": "4444:51:28",
              "text": " @dev See {IERC721Metadata-name}."
            },
            "functionSelector": "06fdde03",
            "id": 5585,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5578,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4528:8:28"
            },
            "parameters": {
              "id": 5577,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4513:2:28"
            },
            "returnParameters": {
              "id": 5581,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5580,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5585,
                  "src": "4546:13:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5579,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4546:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4545:15:28"
            },
            "scope": 6358,
            "src": "4500:90:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6550
            ],
            "body": {
              "id": 5594,
              "nodeType": "Block",
              "src": "4717:31:28",
              "statements": [
                {
                  "expression": {
                    "id": 5592,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5489,
                    "src": "4734:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 5591,
                  "id": 5593,
                  "nodeType": "Return",
                  "src": "4727:14:28"
                }
              ]
            },
            "documentation": {
              "id": 5586,
              "nodeType": "StructuredDocumentation",
              "src": "4596:53:28",
              "text": " @dev See {IERC721Metadata-symbol}."
            },
            "functionSelector": "95d89b41",
            "id": 5595,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5588,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4684:8:28"
            },
            "parameters": {
              "id": 5587,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4669:2:28"
            },
            "returnParameters": {
              "id": 5591,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5590,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5595,
                  "src": "4702:13:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5589,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4702:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4701:15:28"
            },
            "scope": 6358,
            "src": "4654:94:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6558
            ],
            "body": {
              "id": 5657,
              "nodeType": "Block",
              "src": "4894:660:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 5606,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5598,
                            "src": "4920:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5605,
                          "name": "_exists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5951,
                          "src": "4912:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 5607,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4912:16:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                        "id": 5608,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4930:49:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
                          "typeString": "literal_string \"ERC721Metadata: URI query for nonexistent token\""
                        },
                        "value": "ERC721Metadata: URI query for nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
                          "typeString": "literal_string \"ERC721Metadata: URI query for nonexistent token\""
                        }
                      ],
                      "id": 5604,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "4904:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5609,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4904:76:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5610,
                  "nodeType": "ExpressionStatement",
                  "src": "4904:76:28"
                },
                {
                  "assignments": [
                    5612
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5612,
                      "mutability": "mutable",
                      "name": "_tokenURI",
                      "nodeType": "VariableDeclaration",
                      "scope": 5657,
                      "src": "4991:23:28",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 5611,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "4991:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5616,
                  "initialValue": {
                    "baseExpression": {
                      "id": 5613,
                      "name": "_tokenURIs",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5493,
                      "src": "5017:10:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                        "typeString": "mapping(uint256 => string storage ref)"
                      }
                    },
                    "id": 5615,
                    "indexExpression": {
                      "id": 5614,
                      "name": "tokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5598,
                      "src": "5028:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5017:19:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4991:45:28"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5623,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 5619,
                            "name": "_baseURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5495,
                            "src": "5115:8:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          ],
                          "id": 5618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5109:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": {
                            "id": 5617,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "5109:5:28",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5620,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5109:15:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes storage pointer"
                        }
                      },
                      "id": 5621,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "5109:22:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5622,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5135:1:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "5109:27:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5627,
                  "nodeType": "IfStatement",
                  "src": "5105:74:28",
                  "trueBody": {
                    "id": 5626,
                    "nodeType": "Block",
                    "src": "5138:41:28",
                    "statements": [
                      {
                        "expression": {
                          "id": 5624,
                          "name": "_tokenURI",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5612,
                          "src": "5159:9:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 5603,
                        "id": 5625,
                        "nodeType": "Return",
                        "src": "5152:16:28"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 5634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 5630,
                            "name": "_tokenURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5612,
                            "src": "5287:9:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "id": 5629,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5281:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": {
                            "id": 5628,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "5281:5:28",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 5631,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5281:16:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 5632,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "5281:23:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 5633,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5307:1:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "5281:27:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5645,
                  "nodeType": "IfStatement",
                  "src": "5277:110:28",
                  "trueBody": {
                    "id": 5644,
                    "nodeType": "Block",
                    "src": "5310:77:28",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 5639,
                                  "name": "_baseURI",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5495,
                                  "src": "5355:8:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  }
                                },
                                {
                                  "id": 5640,
                                  "name": "_tokenURI",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5612,
                                  "src": "5365:9:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_string_storage",
                                    "typeString": "string storage ref"
                                  },
                                  {
                                    "typeIdentifier": "t_string_memory_ptr",
                                    "typeString": "string memory"
                                  }
                                ],
                                "expression": {
                                  "id": 5637,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967295,
                                  "src": "5338:3:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 5638,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "encodePacked",
                                "nodeType": "MemberAccess",
                                "src": "5338:16:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 5641,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5338:37:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 5636,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5331:6:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                              "typeString": "type(string storage pointer)"
                            },
                            "typeName": {
                              "id": 5635,
                              "name": "string",
                              "nodeType": "ElementaryTypeName",
                              "src": "5331:6:28",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 5642,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5331:45:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_string_memory_ptr",
                            "typeString": "string memory"
                          }
                        },
                        "functionReturnParameters": 5603,
                        "id": 5643,
                        "nodeType": "Return",
                        "src": "5324:52:28"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 5650,
                            "name": "_baseURI",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5495,
                            "src": "5517:8:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 5651,
                                "name": "tokenId",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5598,
                                "src": "5527:7:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 5652,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "toString",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7842,
                              "src": "5527:16:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256) pure returns (string memory)"
                              }
                            },
                            "id": 5653,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5527:18:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            },
                            {
                              "typeIdentifier": "t_string_memory_ptr",
                              "typeString": "string memory"
                            }
                          ],
                          "expression": {
                            "id": 5648,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "5500:3:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 5649,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "5500:16:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 5654,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5500:46:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5647,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "5493:6:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                        "typeString": "type(string storage pointer)"
                      },
                      "typeName": {
                        "id": 5646,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5493:6:28",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 5655,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5493:54:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 5603,
                  "id": 5656,
                  "nodeType": "Return",
                  "src": "5486:61:28"
                }
              ]
            },
            "documentation": {
              "id": 5596,
              "nodeType": "StructuredDocumentation",
              "src": "4754:55:28",
              "text": " @dev See {IERC721Metadata-tokenURI}."
            },
            "functionSelector": "c87b56dd",
            "id": 5658,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenURI",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5600,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4861:8:28"
            },
            "parameters": {
              "id": 5599,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5598,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5658,
                  "src": "4832:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5597,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4832:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4831:17:28"
            },
            "returnParameters": {
              "id": 5603,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5602,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5658,
                  "src": "4879:13:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5601,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "4879:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4878:15:28"
            },
            "scope": 6358,
            "src": "4814:740:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5666,
              "nodeType": "Block",
              "src": "5841:32:28",
              "statements": [
                {
                  "expression": {
                    "id": 5664,
                    "name": "_baseURI",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5495,
                    "src": "5858:8:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 5663,
                  "id": 5665,
                  "nodeType": "Return",
                  "src": "5851:15:28"
                }
              ]
            },
            "documentation": {
              "id": 5659,
              "nodeType": "StructuredDocumentation",
              "src": "5560:221:28",
              "text": " @dev Returns the base URI set via {_setBaseURI}. This will be\n automatically added as a prefix in {tokenURI} to each token's URI, or\n to the token ID if no specific URI is set for that token ID."
            },
            "functionSelector": "6c0360eb",
            "id": 5667,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "baseURI",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5660,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5802:2:28"
            },
            "returnParameters": {
              "id": 5663,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5662,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5667,
                  "src": "5826:13:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 5661,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5826:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5825:15:28"
            },
            "scope": 6358,
            "src": "5786:87:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6523
            ],
            "body": {
              "id": 5685,
              "nodeType": "Block",
              "src": "6050:54:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5682,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5672,
                        "src": "6091:5:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 5678,
                          "name": "_holderTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5473,
                          "src": "6067:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$7661_storage_$",
                            "typeString": "mapping(address => struct EnumerableSet.UintSet storage ref)"
                          }
                        },
                        "id": 5680,
                        "indexExpression": {
                          "id": 5679,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5670,
                          "src": "6081:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6067:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$7661_storage",
                          "typeString": "struct EnumerableSet.UintSet storage ref"
                        }
                      },
                      "id": 5681,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "at",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7755,
                      "src": "6067:23:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_UintSet_$7661_storage_ptr_$_t_uint256_$returns$_t_uint256_$bound_to$_t_struct$_UintSet_$7661_storage_ptr_$",
                        "typeString": "function (struct EnumerableSet.UintSet storage pointer,uint256) view returns (uint256)"
                      }
                    },
                    "id": 5683,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6067:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5677,
                  "id": 5684,
                  "nodeType": "Return",
                  "src": "6060:37:28"
                }
              ]
            },
            "documentation": {
              "id": 5668,
              "nodeType": "StructuredDocumentation",
              "src": "5879:68:28",
              "text": " @dev See {IERC721Enumerable-tokenOfOwnerByIndex}."
            },
            "functionSelector": "2f745c59",
            "id": 5686,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenOfOwnerByIndex",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5674,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6023:8:28"
            },
            "parameters": {
              "id": 5673,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5670,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 5686,
                  "src": "5981:13:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5669,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5981:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5672,
                  "mutability": "mutable",
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 5686,
                  "src": "5996:13:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5671,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5996:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5980:30:28"
            },
            "returnParameters": {
              "id": 5677,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5676,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5686,
                  "src": "6041:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5675,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6041:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6040:9:28"
            },
            "scope": 6358,
            "src": "5952:152:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6513
            ],
            "body": {
              "id": 5697,
              "nodeType": "Block",
              "src": "6237:138:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 5693,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5475,
                        "src": "6347:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$7101_storage",
                          "typeString": "struct EnumerableMap.UintToAddressMap storage ref"
                        }
                      },
                      "id": 5694,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7184,
                      "src": "6347:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_UintToAddressMap_$7101_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_UintToAddressMap_$7101_storage_ptr_$",
                        "typeString": "function (struct EnumerableMap.UintToAddressMap storage pointer) view returns (uint256)"
                      }
                    },
                    "id": 5695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6347:21:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5692,
                  "id": 5696,
                  "nodeType": "Return",
                  "src": "6340:28:28"
                }
              ]
            },
            "documentation": {
              "id": 5687,
              "nodeType": "StructuredDocumentation",
              "src": "6110:60:28",
              "text": " @dev See {IERC721Enumerable-totalSupply}."
            },
            "functionSelector": "18160ddd",
            "id": 5698,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupply",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5689,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6210:8:28"
            },
            "parameters": {
              "id": 5688,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6195:2:28"
            },
            "returnParameters": {
              "id": 5692,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5691,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5698,
                  "src": "6228:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5690,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6228:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6227:9:28"
            },
            "scope": 6358,
            "src": "6175:200:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6531
            ],
            "body": {
              "id": 5716,
              "nodeType": "Block",
              "src": "6523:85:28",
              "statements": [
                {
                  "assignments": [
                    5708,
                    null
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5708,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "nodeType": "VariableDeclaration",
                      "scope": 5716,
                      "src": "6534:15:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 5707,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6534:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    },
                    null
                  ],
                  "id": 5713,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 5711,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5701,
                        "src": "6571:5:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 5709,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5475,
                        "src": "6555:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$7101_storage",
                          "typeString": "struct EnumerableMap.UintToAddressMap storage ref"
                        }
                      },
                      "id": 5710,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "at",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7220,
                      "src": "6555:15:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_UintToAddressMap_$7101_storage_ptr_$_t_uint256_$returns$_t_uint256_$_t_address_$bound_to$_t_struct$_UintToAddressMap_$7101_storage_ptr_$",
                        "typeString": "function (struct EnumerableMap.UintToAddressMap storage pointer,uint256) view returns (uint256,address)"
                      }
                    },
                    "id": 5712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6555:22:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_address_$",
                      "typeString": "tuple(uint256,address)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6533:44:28"
                },
                {
                  "expression": {
                    "id": 5714,
                    "name": "tokenId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 5708,
                    "src": "6594:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 5706,
                  "id": 5715,
                  "nodeType": "Return",
                  "src": "6587:14:28"
                }
              ]
            },
            "documentation": {
              "id": 5699,
              "nodeType": "StructuredDocumentation",
              "src": "6381:61:28",
              "text": " @dev See {IERC721Enumerable-tokenByIndex}."
            },
            "functionSelector": "4f6ccce7",
            "id": 5717,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "tokenByIndex",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5703,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6496:8:28"
            },
            "parameters": {
              "id": 5702,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5701,
                  "mutability": "mutable",
                  "name": "index",
                  "nodeType": "VariableDeclaration",
                  "scope": 5717,
                  "src": "6469:13:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5700,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6469:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6468:15:28"
            },
            "returnParameters": {
              "id": 5706,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5705,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5717,
                  "src": "6514:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5704,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6514:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6513:9:28"
            },
            "scope": 6358,
            "src": "6447:161:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6462
            ],
            "body": {
              "id": 5758,
              "nodeType": "Block",
              "src": "6735:311:28",
              "statements": [
                {
                  "assignments": [
                    5727
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5727,
                      "mutability": "mutable",
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 5758,
                      "src": "6745:13:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5726,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6745:7:28",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5731,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 5729,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5722,
                        "src": "6769:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5728,
                      "name": "ownerOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5575,
                      "src": "6761:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view returns (address)"
                      }
                    },
                    "id": 5730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6761:16:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6745:32:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5735,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5733,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5720,
                          "src": "6795:2:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 5734,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5727,
                          "src": "6801:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6795:11:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20617070726f76616c20746f2063757272656e74206f776e6572",
                        "id": 5736,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6808:35:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
                          "typeString": "literal_string \"ERC721: approval to current owner\""
                        },
                        "value": "ERC721: approval to current owner"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
                          "typeString": "literal_string \"ERC721: approval to current owner\""
                        }
                      ],
                      "id": 5732,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6787:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5737,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6787:57:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5738,
                  "nodeType": "ExpressionStatement",
                  "src": "6787:57:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 5749,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 5743,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5740,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4312,
                              "src": "6863:10:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 5741,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6863:12:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 5742,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5727,
                            "src": "6879:5:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "6863:21:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 5745,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5727,
                              "src": "6905:5:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 5746,
                                "name": "_msgSender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4312,
                                "src": "6912:10:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                  "typeString": "function () view returns (address payable)"
                                }
                              },
                              "id": 5747,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6912:12:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 5744,
                            "name": "isApprovedForAll",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5832,
                            "src": "6888:16:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address,address) view returns (bool)"
                            }
                          },
                          "id": 5748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6888:37:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "6863:62:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c",
                        "id": 5750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6939:58:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d",
                          "typeString": "literal_string \"ERC721: approve caller is not owner nor approved for all\""
                        },
                        "value": "ERC721: approve caller is not owner nor approved for all"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d",
                          "typeString": "literal_string \"ERC721: approve caller is not owner nor approved for all\""
                        }
                      ],
                      "id": 5739,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6855:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5751,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6855:152:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5752,
                  "nodeType": "ExpressionStatement",
                  "src": "6855:152:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5754,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5720,
                        "src": "7027:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5755,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5722,
                        "src": "7031:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5753,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6346,
                      "src": "7018:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 5756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7018:21:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5757,
                  "nodeType": "ExpressionStatement",
                  "src": "7018:21:28"
                }
              ]
            },
            "documentation": {
              "id": 5718,
              "nodeType": "StructuredDocumentation",
              "src": "6614:46:28",
              "text": " @dev See {IERC721-approve}."
            },
            "functionSelector": "095ea7b3",
            "id": 5759,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5724,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6726:8:28"
            },
            "parameters": {
              "id": 5723,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5720,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5759,
                  "src": "6682:10:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5719,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6682:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5722,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5759,
                  "src": "6694:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5721,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6694:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6681:29:28"
            },
            "returnParameters": {
              "id": 5725,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6735:0:28"
            },
            "scope": 6358,
            "src": "6665:381:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6470
            ],
            "body": {
              "id": 5779,
              "nodeType": "Block",
              "src": "7184:132:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 5770,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5762,
                            "src": "7210:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5769,
                          "name": "_exists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5951,
                          "src": "7202:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 5771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7202:16:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                        "id": 5772,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7220:46:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
                          "typeString": "literal_string \"ERC721: approved query for nonexistent token\""
                        },
                        "value": "ERC721: approved query for nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
                          "typeString": "literal_string \"ERC721: approved query for nonexistent token\""
                        }
                      ],
                      "id": 5768,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "7194:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5773,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7194:73:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5774,
                  "nodeType": "ExpressionStatement",
                  "src": "7194:73:28"
                },
                {
                  "expression": {
                    "baseExpression": {
                      "id": 5775,
                      "name": "_tokenApprovals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5479,
                      "src": "7285:15:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                        "typeString": "mapping(uint256 => address)"
                      }
                    },
                    "id": 5777,
                    "indexExpression": {
                      "id": 5776,
                      "name": "tokenId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5762,
                      "src": "7301:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7285:24:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 5767,
                  "id": 5778,
                  "nodeType": "Return",
                  "src": "7278:31:28"
                }
              ]
            },
            "documentation": {
              "id": 5760,
              "nodeType": "StructuredDocumentation",
              "src": "7052:50:28",
              "text": " @dev See {IERC721-getApproved}."
            },
            "functionSelector": "081812fc",
            "id": 5780,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getApproved",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5764,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7157:8:28"
            },
            "parameters": {
              "id": 5763,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5762,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5780,
                  "src": "7128:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5761,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7128:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7127:17:28"
            },
            "returnParameters": {
              "id": 5767,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5766,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5780,
                  "src": "7175:7:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5765,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7175:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7174:9:28"
            },
            "scope": 6358,
            "src": "7107:209:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6478
            ],
            "body": {
              "id": 5813,
              "nodeType": "Block",
              "src": "7467:206:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 5793,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 5790,
                          "name": "operator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5783,
                          "src": "7485:8:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 5791,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4312,
                            "src": "7497:10:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                              "typeString": "function () view returns (address payable)"
                            }
                          },
                          "id": 5792,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7497:12:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "7485:24:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20617070726f766520746f2063616c6c6572",
                        "id": 5794,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7511:27:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
                          "typeString": "literal_string \"ERC721: approve to caller\""
                        },
                        "value": "ERC721: approve to caller"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
                          "typeString": "literal_string \"ERC721: approve to caller\""
                        }
                      ],
                      "id": 5789,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "7477:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5795,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7477:62:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5796,
                  "nodeType": "ExpressionStatement",
                  "src": "7477:62:28"
                },
                {
                  "expression": {
                    "id": 5804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 5797,
                          "name": "_operatorApprovals",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5485,
                          "src": "7550:18:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(address => bool))"
                          }
                        },
                        "id": 5801,
                        "indexExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 5798,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4312,
                            "src": "7569:10:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                              "typeString": "function () view returns (address payable)"
                            }
                          },
                          "id": 5799,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7569:12:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "7550:32:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 5802,
                      "indexExpression": {
                        "id": 5800,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5783,
                        "src": "7583:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "7550:42:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 5803,
                      "name": "approved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5785,
                      "src": "7595:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "7550:53:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 5805,
                  "nodeType": "ExpressionStatement",
                  "src": "7550:53:28"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 5807,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4312,
                          "src": "7633:10:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                            "typeString": "function () view returns (address payable)"
                          }
                        },
                        "id": 5808,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7633:12:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 5809,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5783,
                        "src": "7647:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5810,
                        "name": "approved",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5785,
                        "src": "7657:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 5806,
                      "name": "ApprovalForAll",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6418,
                      "src": "7618:14:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,bool)"
                      }
                    },
                    "id": 5811,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7618:48:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5812,
                  "nodeType": "EmitStatement",
                  "src": "7613:53:28"
                }
              ]
            },
            "documentation": {
              "id": 5781,
              "nodeType": "StructuredDocumentation",
              "src": "7322:56:28",
              "text": " @dev See {IERC721-setApprovalForAll}."
            },
            "functionSelector": "a22cb465",
            "id": 5814,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setApprovalForAll",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5787,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7458:8:28"
            },
            "parameters": {
              "id": 5786,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5783,
                  "mutability": "mutable",
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 5814,
                  "src": "7410:16:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5782,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7410:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5785,
                  "mutability": "mutable",
                  "name": "approved",
                  "nodeType": "VariableDeclaration",
                  "scope": 5814,
                  "src": "7428:13:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5784,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7428:4:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7409:33:28"
            },
            "returnParameters": {
              "id": 5788,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7467:0:28"
            },
            "scope": 6358,
            "src": "7383:290:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6488
            ],
            "body": {
              "id": 5831,
              "nodeType": "Block",
              "src": "7834:59:28",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 5825,
                        "name": "_operatorApprovals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5485,
                        "src": "7851:18:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                          "typeString": "mapping(address => mapping(address => bool))"
                        }
                      },
                      "id": 5827,
                      "indexExpression": {
                        "id": 5826,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5817,
                        "src": "7870:5:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "7851:25:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 5829,
                    "indexExpression": {
                      "id": 5828,
                      "name": "operator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5819,
                      "src": "7877:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7851:35:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5824,
                  "id": 5830,
                  "nodeType": "Return",
                  "src": "7844:42:28"
                }
              ]
            },
            "documentation": {
              "id": 5815,
              "nodeType": "StructuredDocumentation",
              "src": "7679:55:28",
              "text": " @dev See {IERC721-isApprovedForAll}."
            },
            "functionSelector": "e985e9c5",
            "id": 5832,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isApprovedForAll",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5821,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7810:8:28"
            },
            "parameters": {
              "id": 5820,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5817,
                  "mutability": "mutable",
                  "name": "owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 5832,
                  "src": "7765:13:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5816,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7765:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5819,
                  "mutability": "mutable",
                  "name": "operator",
                  "nodeType": "VariableDeclaration",
                  "scope": 5832,
                  "src": "7780:16:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5818,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7780:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7764:33:28"
            },
            "returnParameters": {
              "id": 5824,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5823,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5832,
                  "src": "7828:4:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5822,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "7828:4:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7827:6:28"
            },
            "scope": 6358,
            "src": "7739:154:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6454
            ],
            "body": {
              "id": 5858,
              "nodeType": "Block",
              "src": "8044:211:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5845,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4312,
                              "src": "8133:10:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 5846,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8133:12:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "id": 5847,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5839,
                            "src": "8147:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5844,
                          "name": "_isApprovedOrOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5991,
                          "src": "8114:18:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) view returns (bool)"
                          }
                        },
                        "id": 5848,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8114:41:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564",
                        "id": 5849,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8157:51:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
                          "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
                        },
                        "value": "ERC721: transfer caller is not owner nor approved"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
                          "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
                        }
                      ],
                      "id": 5843,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "8106:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8106:103:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5851,
                  "nodeType": "ExpressionStatement",
                  "src": "8106:103:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5853,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5835,
                        "src": "8230:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5854,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5837,
                        "src": "8236:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5855,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5839,
                        "src": "8240:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5852,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6233,
                      "src": "8220:9:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 5856,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8220:28:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5857,
                  "nodeType": "ExpressionStatement",
                  "src": "8220:28:28"
                }
              ]
            },
            "documentation": {
              "id": 5833,
              "nodeType": "StructuredDocumentation",
              "src": "7899:51:28",
              "text": " @dev See {IERC721-transferFrom}."
            },
            "functionSelector": "23b872dd",
            "id": 5859,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5841,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8035:8:28"
            },
            "parameters": {
              "id": 5840,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5835,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 5859,
                  "src": "7977:12:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5834,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7977:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5837,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5859,
                  "src": "7991:10:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5836,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7991:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5839,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5859,
                  "src": "8003:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5838,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8003:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7976:43:28"
            },
            "returnParameters": {
              "id": 5842,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8044:0:28"
            },
            "scope": 6358,
            "src": "7955:300:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6444
            ],
            "body": {
              "id": 5877,
              "nodeType": "Block",
              "src": "8414:56:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5871,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5862,
                        "src": "8441:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5872,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5864,
                        "src": "8447:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5873,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5866,
                        "src": "8451:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 5874,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8460:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 5870,
                      "name": "safeTransferFrom",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        5878,
                        5908
                      ],
                      "referencedDeclaration": 5908,
                      "src": "8424:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory)"
                      }
                    },
                    "id": 5875,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8424:39:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5876,
                  "nodeType": "ExpressionStatement",
                  "src": "8424:39:28"
                }
              ]
            },
            "documentation": {
              "id": 5860,
              "nodeType": "StructuredDocumentation",
              "src": "8261:55:28",
              "text": " @dev See {IERC721-safeTransferFrom}."
            },
            "functionSelector": "42842e0e",
            "id": 5878,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5868,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8405:8:28"
            },
            "parameters": {
              "id": 5867,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5862,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 5878,
                  "src": "8347:12:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5861,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8347:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5864,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5878,
                  "src": "8361:10:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5863,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8361:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5866,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5878,
                  "src": "8373:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5865,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8373:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8346:43:28"
            },
            "returnParameters": {
              "id": 5869,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8414:0:28"
            },
            "scope": 6358,
            "src": "8321:149:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6500
            ],
            "body": {
              "id": 5907,
              "nodeType": "Block",
              "src": "8649:169:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 5893,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4312,
                              "src": "8686:10:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 5894,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8686:12:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "id": 5895,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5885,
                            "src": "8700:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5892,
                          "name": "_isApprovedOrOwner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5991,
                          "src": "8667:18:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) view returns (bool)"
                          }
                        },
                        "id": 5896,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8667:41:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564",
                        "id": 5897,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8710:51:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
                          "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
                        },
                        "value": "ERC721: transfer caller is not owner nor approved"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
                          "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
                        }
                      ],
                      "id": 5891,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "8659:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5898,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8659:103:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5899,
                  "nodeType": "ExpressionStatement",
                  "src": "8659:103:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5901,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5881,
                        "src": "8786:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5902,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5883,
                        "src": "8792:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5903,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5885,
                        "src": "8796:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 5904,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5887,
                        "src": "8805:5:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 5900,
                      "name": "_safeTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5937,
                      "src": "8772:13:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory)"
                      }
                    },
                    "id": 5905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8772:39:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5906,
                  "nodeType": "ExpressionStatement",
                  "src": "8772:39:28"
                }
              ]
            },
            "documentation": {
              "id": 5879,
              "nodeType": "StructuredDocumentation",
              "src": "8476:55:28",
              "text": " @dev See {IERC721-safeTransferFrom}."
            },
            "functionSelector": "b88d4fde",
            "id": 5908,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "safeTransferFrom",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 5889,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8640:8:28"
            },
            "parameters": {
              "id": 5888,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5881,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 5908,
                  "src": "8562:12:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5880,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8562:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5883,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5908,
                  "src": "8576:10:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5882,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8576:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5885,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5908,
                  "src": "8588:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5884,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8588:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5887,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5908,
                  "src": "8605:18:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5886,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8605:5:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8561:63:28"
            },
            "returnParameters": {
              "id": 5890,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8649:0:28"
            },
            "scope": 6358,
            "src": "8536:282:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 5936,
              "nodeType": "Block",
              "src": "9783:166:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5921,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5911,
                        "src": "9803:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5922,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5913,
                        "src": "9809:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 5923,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5915,
                        "src": "9813:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5920,
                      "name": "_transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6233,
                      "src": "9793:9:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 5924,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9793:28:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5925,
                  "nodeType": "ExpressionStatement",
                  "src": "9793:28:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 5928,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5911,
                            "src": "9862:4:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 5929,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5913,
                            "src": "9868:2:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 5930,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5915,
                            "src": "9872:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 5931,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5917,
                            "src": "9881:5:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 5927,
                          "name": "_checkOnERC721Received",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6324,
                          "src": "9839:22:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256,bytes memory) returns (bool)"
                          }
                        },
                        "id": 5932,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9839:48:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
                        "id": 5933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9889:52:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                          "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                        },
                        "value": "ERC721: transfer to non ERC721Receiver implementer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                          "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                        }
                      ],
                      "id": 5926,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "9831:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5934,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9831:111:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5935,
                  "nodeType": "ExpressionStatement",
                  "src": "9831:111:28"
                }
              ]
            },
            "documentation": {
              "id": 5909,
              "nodeType": "StructuredDocumentation",
              "src": "8824:851:28",
              "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC721 protocol to prevent tokens from being forever locked.\n `_data` is additional data, it has no specified format and it is sent in call to `to`.\n This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n implement alternative mechanisms to perform token transfer, such as signature-based.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
            },
            "id": 5937,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_safeTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5918,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5911,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 5937,
                  "src": "9703:12:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5910,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9703:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5913,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 5937,
                  "src": "9717:10:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5912,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9717:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5915,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5937,
                  "src": "9729:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5914,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9729:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5917,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 5937,
                  "src": "9746:18:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 5916,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9746:5:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9702:63:28"
            },
            "returnParameters": {
              "id": 5919,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9783:0:28"
            },
            "scope": 6358,
            "src": "9680:269:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5950,
              "nodeType": "Block",
              "src": "10315:54:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 5947,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5940,
                        "src": "10354:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 5945,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5475,
                        "src": "10332:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$7101_storage",
                          "typeString": "struct EnumerableMap.UintToAddressMap storage ref"
                        }
                      },
                      "id": 5946,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "contains",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7170,
                      "src": "10332:21:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_struct$_UintToAddressMap_$7101_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UintToAddressMap_$7101_storage_ptr_$",
                        "typeString": "function (struct EnumerableMap.UintToAddressMap storage pointer,uint256) view returns (bool)"
                      }
                    },
                    "id": 5948,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10332:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5944,
                  "id": 5949,
                  "nodeType": "Return",
                  "src": "10325:37:28"
                }
              ]
            },
            "documentation": {
              "id": 5938,
              "nodeType": "StructuredDocumentation",
              "src": "9955:292:28",
              "text": " @dev Returns whether `tokenId` exists.\n Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n Tokens start existing when they are minted (`_mint`),\n and stop existing when they are burned (`_burn`)."
            },
            "id": 5951,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_exists",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5940,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5951,
                  "src": "10269:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5939,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10269:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10268:17:28"
            },
            "returnParameters": {
              "id": 5944,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5943,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5951,
                  "src": "10309:4:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5942,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10309:4:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10308:6:28"
            },
            "scope": 6358,
            "src": "10252:117:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 5990,
              "nodeType": "Block",
              "src": "10618:238:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 5963,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5956,
                            "src": "10644:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 5962,
                          "name": "_exists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5951,
                          "src": "10636:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 5964,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10636:16:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                        "id": 5965,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10654:46:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c",
                          "typeString": "literal_string \"ERC721: operator query for nonexistent token\""
                        },
                        "value": "ERC721: operator query for nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c",
                          "typeString": "literal_string \"ERC721: operator query for nonexistent token\""
                        }
                      ],
                      "id": 5961,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "10628:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 5966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10628:73:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 5967,
                  "nodeType": "ExpressionStatement",
                  "src": "10628:73:28"
                },
                {
                  "assignments": [
                    5969
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 5969,
                      "mutability": "mutable",
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 5990,
                      "src": "10711:13:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 5968,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "10711:7:28",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 5973,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 5971,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5956,
                        "src": "10735:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 5970,
                      "name": "ownerOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5575,
                      "src": "10727:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view returns (address)"
                      }
                    },
                    "id": 5972,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10727:16:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10711:32:28"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 5987,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 5982,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 5976,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 5974,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5954,
                              "src": "10761:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 5975,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5969,
                              "src": "10772:5:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "10761:16:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "||",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 5981,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "id": 5978,
                                  "name": "tokenId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 5956,
                                  "src": "10793:7:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 5977,
                                "name": "getApproved",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 5780,
                                "src": "10781:11:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                                  "typeString": "function (uint256) view returns (address)"
                                }
                              },
                              "id": 5979,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10781:20:28",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "id": 5980,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5954,
                              "src": "10805:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "10781:31:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "10761:51:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 5984,
                              "name": "owner",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5969,
                              "src": "10833:5:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 5985,
                              "name": "spender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5954,
                              "src": "10840:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 5983,
                            "name": "isApprovedForAll",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5832,
                            "src": "10816:16:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address,address) view returns (bool)"
                            }
                          },
                          "id": 5986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10816:32:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "10761:87:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 5988,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "10760:89:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 5960,
                  "id": 5989,
                  "nodeType": "Return",
                  "src": "10753:96:28"
                }
              ]
            },
            "documentation": {
              "id": 5952,
              "nodeType": "StructuredDocumentation",
              "src": "10375:147:28",
              "text": " @dev Returns whether `spender` is allowed to manage `tokenId`.\n Requirements:\n - `tokenId` must exist."
            },
            "id": 5991,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isApprovedOrOwner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5954,
                  "mutability": "mutable",
                  "name": "spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 5991,
                  "src": "10555:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5953,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10555:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5956,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 5991,
                  "src": "10572:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5955,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10572:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10554:34:28"
            },
            "returnParameters": {
              "id": 5960,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5959,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 5991,
                  "src": "10612:4:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 5958,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10612:4:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10611:6:28"
            },
            "scope": 6358,
            "src": "10527:329:28",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6005,
              "nodeType": "Block",
              "src": "11252:43:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6000,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5994,
                        "src": "11272:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6001,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5996,
                        "src": "11276:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 6002,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11285:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 5999,
                      "name": "_safeMint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        6006,
                        6035
                      ],
                      "referencedDeclaration": 6035,
                      "src": "11262:9:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,bytes memory)"
                      }
                    },
                    "id": 6003,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11262:26:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6004,
                  "nodeType": "ExpressionStatement",
                  "src": "11262:26:28"
                }
              ]
            },
            "documentation": {
              "id": 5992,
              "nodeType": "StructuredDocumentation",
              "src": "10862:320:28",
              "text": " @dev Safely mints `tokenId` and transfers it to `to`.\n Requirements:\nd*\n - `tokenId` must not exist.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
            },
            "id": 6006,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_safeMint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 5997,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 5994,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 6006,
                  "src": "11206:10:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 5993,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11206:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 5996,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6006,
                  "src": "11218:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 5995,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11218:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11205:29:28"
            },
            "returnParameters": {
              "id": 5998,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11252:0:28"
            },
            "scope": 6358,
            "src": "11187:108:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6034,
              "nodeType": "Block",
              "src": "11601:162:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6017,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6009,
                        "src": "11617:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6018,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6011,
                        "src": "11621:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6016,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6094,
                      "src": "11611:5:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 6019,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11611:18:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6020,
                  "nodeType": "ExpressionStatement",
                  "src": "11611:18:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 6025,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11678:1:28",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                }
                              ],
                              "id": 6024,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "11670:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 6023,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "11670:7:28",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 6026,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11670:10:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "id": 6027,
                            "name": "to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6009,
                            "src": "11682:2:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 6028,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6011,
                            "src": "11686:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 6029,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6013,
                            "src": "11695:5:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 6022,
                          "name": "_checkOnERC721Received",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6324,
                          "src": "11647:22:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256,bytes memory) returns (bool)"
                          }
                        },
                        "id": 6030,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11647:54:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
                        "id": 6031,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11703:52:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                          "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                        },
                        "value": "ERC721: transfer to non ERC721Receiver implementer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                          "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                        }
                      ],
                      "id": 6021,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "11639:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11639:117:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6033,
                  "nodeType": "ExpressionStatement",
                  "src": "11639:117:28"
                }
              ]
            },
            "documentation": {
              "id": 6007,
              "nodeType": "StructuredDocumentation",
              "src": "11301:210:28",
              "text": " @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n forwarded in {IERC721Receiver-onERC721Received} to contract recipients."
            },
            "id": 6035,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_safeMint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6014,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6009,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 6035,
                  "src": "11535:10:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6008,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11535:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6011,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6035,
                  "src": "11547:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6010,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11547:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6013,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 6035,
                  "src": "11564:18:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6012,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11564:5:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11534:49:28"
            },
            "returnParameters": {
              "id": 6015,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11601:0:28"
            },
            "scope": 6358,
            "src": "11516:247:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6093,
              "nodeType": "Block",
              "src": "12146:332:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6049,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6044,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6038,
                          "src": "12164:2:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 6047,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12178:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6046,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12170:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 6045,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "12170:7:28",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6048,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12170:10:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "12164:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a206d696e7420746f20746865207a65726f2061646472657373",
                        "id": 6050,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12182:34:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6",
                          "typeString": "literal_string \"ERC721: mint to the zero address\""
                        },
                        "value": "ERC721: mint to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6",
                          "typeString": "literal_string \"ERC721: mint to the zero address\""
                        }
                      ],
                      "id": 6043,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "12156:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6051,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12156:61:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6052,
                  "nodeType": "ExpressionStatement",
                  "src": "12156:61:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6057,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "12235:17:28",
                        "subExpression": {
                          "arguments": [
                            {
                              "id": 6055,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6040,
                              "src": "12244:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6054,
                            "name": "_exists",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5951,
                            "src": "12236:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256) view returns (bool)"
                            }
                          },
                          "id": 6056,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12236:16:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a20746f6b656e20616c7265616479206d696e746564",
                        "id": 6058,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12254:30:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
                          "typeString": "literal_string \"ERC721: token already minted\""
                        },
                        "value": "ERC721: token already minted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
                          "typeString": "literal_string \"ERC721: token already minted\""
                        }
                      ],
                      "id": 6053,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "12227:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6059,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12227:58:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6060,
                  "nodeType": "ExpressionStatement",
                  "src": "12227:58:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 6064,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12325:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6063,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12317:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6062,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "12317:7:28",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 6065,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12317:10:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 6066,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6038,
                        "src": "12329:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6067,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6040,
                        "src": "12333:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6061,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6357,
                      "src": "12296:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 6068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12296:45:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6069,
                  "nodeType": "ExpressionStatement",
                  "src": "12296:45:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6074,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6040,
                        "src": "12374:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 6070,
                          "name": "_holderTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5473,
                          "src": "12352:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$7661_storage_$",
                            "typeString": "mapping(address => struct EnumerableSet.UintSet storage ref)"
                          }
                        },
                        "id": 6072,
                        "indexExpression": {
                          "id": 6071,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6038,
                          "src": "12366:2:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12352:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$7661_storage",
                          "typeString": "struct EnumerableSet.UintSet storage ref"
                        }
                      },
                      "id": 6073,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7681,
                      "src": "12352:21:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintSet_$7661_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UintSet_$7661_storage_ptr_$",
                        "typeString": "function (struct EnumerableSet.UintSet storage pointer,uint256) returns (bool)"
                      }
                    },
                    "id": 6075,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12352:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6076,
                  "nodeType": "ExpressionStatement",
                  "src": "12352:30:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6080,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6040,
                        "src": "12410:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6081,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6038,
                        "src": "12419:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 6077,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5475,
                        "src": "12393:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$7101_storage",
                          "typeString": "struct EnumerableMap.UintToAddressMap storage ref"
                        }
                      },
                      "id": 6079,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "set",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7130,
                      "src": "12393:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintToAddressMap_$7101_storage_ptr_$_t_uint256_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_UintToAddressMap_$7101_storage_ptr_$",
                        "typeString": "function (struct EnumerableMap.UintToAddressMap storage pointer,uint256,address) returns (bool)"
                      }
                    },
                    "id": 6082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12393:29:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6083,
                  "nodeType": "ExpressionStatement",
                  "src": "12393:29:28"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 6087,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12455:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6086,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12447:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6085,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "12447:7:28",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 6088,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12447:10:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 6089,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6038,
                        "src": "12459:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6090,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6040,
                        "src": "12463:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6084,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6400,
                      "src": "12438:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 6091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12438:33:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6092,
                  "nodeType": "EmitStatement",
                  "src": "12433:38:28"
                }
              ]
            },
            "documentation": {
              "id": 6036,
              "nodeType": "StructuredDocumentation",
              "src": "11769:311:28",
              "text": " @dev Mints `tokenId` and transfers it to `to`.\n WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n Requirements:\n - `tokenId` must not exist.\n - `to` cannot be the zero address.\n Emits a {Transfer} event."
            },
            "id": 6094,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6041,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6038,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 6094,
                  "src": "12100:10:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6037,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12100:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6040,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6094,
                  "src": "12112:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6039,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12112:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12099:29:28"
            },
            "returnParameters": {
              "id": 6042,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12146:0:28"
            },
            "scope": 6358,
            "src": "12085:393:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6161,
              "nodeType": "Block",
              "src": "12744:453:28",
              "statements": [
                {
                  "assignments": [
                    6101
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6101,
                      "mutability": "mutable",
                      "name": "owner",
                      "nodeType": "VariableDeclaration",
                      "scope": 6161,
                      "src": "12754:13:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 6100,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12754:7:28",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 6105,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 6103,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6097,
                        "src": "12778:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6102,
                      "name": "ownerOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5575,
                      "src": "12770:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view returns (address)"
                      }
                    },
                    "id": 6104,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12770:16:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12754:32:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6107,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6101,
                        "src": "12818:5:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 6110,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12833:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6109,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12825:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6108,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "12825:7:28",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 6111,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12825:10:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 6112,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6097,
                        "src": "12837:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6106,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6357,
                      "src": "12797:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 6113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12797:48:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6114,
                  "nodeType": "ExpressionStatement",
                  "src": "12797:48:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 6118,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12900:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6117,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12892:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6116,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "12892:7:28",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 6119,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12892:10:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 6120,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6097,
                        "src": "12904:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6115,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6346,
                      "src": "12883:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 6121,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12883:29:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6122,
                  "nodeType": "ExpressionStatement",
                  "src": "12883:29:28"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 6131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "baseExpression": {
                              "id": 6125,
                              "name": "_tokenURIs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5493,
                              "src": "12968:10:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                "typeString": "mapping(uint256 => string storage ref)"
                              }
                            },
                            "id": 6127,
                            "indexExpression": {
                              "id": 6126,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6097,
                              "src": "12979:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12968:19:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          ],
                          "id": 6124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12962:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                            "typeString": "type(bytes storage pointer)"
                          },
                          "typeName": {
                            "id": 6123,
                            "name": "bytes",
                            "nodeType": "ElementaryTypeName",
                            "src": "12962:5:28",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 6128,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12962:26:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes storage pointer"
                        }
                      },
                      "id": 6129,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "12962:33:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 6130,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "12999:1:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "12962:38:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6138,
                  "nodeType": "IfStatement",
                  "src": "12958:95:28",
                  "trueBody": {
                    "id": 6137,
                    "nodeType": "Block",
                    "src": "13002:51:28",
                    "statements": [
                      {
                        "expression": {
                          "id": 6135,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "13016:26:28",
                          "subExpression": {
                            "baseExpression": {
                              "id": 6132,
                              "name": "_tokenURIs",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 5493,
                              "src": "13023:10:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                                "typeString": "mapping(uint256 => string storage ref)"
                              }
                            },
                            "id": 6134,
                            "indexExpression": {
                              "id": 6133,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6097,
                              "src": "13034:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "13023:19:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_string_storage",
                              "typeString": "string storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 6136,
                        "nodeType": "ExpressionStatement",
                        "src": "13016:26:28"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6143,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6097,
                        "src": "13091:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 6139,
                          "name": "_holderTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5473,
                          "src": "13063:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$7661_storage_$",
                            "typeString": "mapping(address => struct EnumerableSet.UintSet storage ref)"
                          }
                        },
                        "id": 6141,
                        "indexExpression": {
                          "id": 6140,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6101,
                          "src": "13077:5:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "13063:20:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$7661_storage",
                          "typeString": "struct EnumerableSet.UintSet storage ref"
                        }
                      },
                      "id": 6142,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7701,
                      "src": "13063:27:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintSet_$7661_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UintSet_$7661_storage_ptr_$",
                        "typeString": "function (struct EnumerableSet.UintSet storage pointer,uint256) returns (bool)"
                      }
                    },
                    "id": 6144,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13063:36:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6145,
                  "nodeType": "ExpressionStatement",
                  "src": "13063:36:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6149,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6097,
                        "src": "13130:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 6146,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5475,
                        "src": "13110:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$7101_storage",
                          "typeString": "struct EnumerableMap.UintToAddressMap storage ref"
                        }
                      },
                      "id": 6148,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7150,
                      "src": "13110:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintToAddressMap_$7101_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UintToAddressMap_$7101_storage_ptr_$",
                        "typeString": "function (struct EnumerableMap.UintToAddressMap storage pointer,uint256) returns (bool)"
                      }
                    },
                    "id": 6150,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13110:28:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6151,
                  "nodeType": "ExpressionStatement",
                  "src": "13110:28:28"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 6153,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6101,
                        "src": "13163:5:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 6156,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13178:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6155,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13170:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6154,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "13170:7:28",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 6157,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13170:10:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 6158,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6097,
                        "src": "13182:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6152,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6400,
                      "src": "13154:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 6159,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13154:36:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6160,
                  "nodeType": "EmitStatement",
                  "src": "13149:41:28"
                }
              ]
            },
            "documentation": {
              "id": 6095,
              "nodeType": "StructuredDocumentation",
              "src": "12484:206:28",
              "text": " @dev Destroys `tokenId`.\n The approval is cleared when the token is burned.\n Requirements:\n - `tokenId` must exist.\n Emits a {Transfer} event."
            },
            "id": 6162,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6098,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6097,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6162,
                  "src": "12710:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6096,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12710:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12709:17:28"
            },
            "returnParameters": {
              "id": 6099,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12744:0:28"
            },
            "scope": 6358,
            "src": "12695:502:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6232,
              "nodeType": "Block",
              "src": "13600:480:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6177,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 6174,
                              "name": "tokenId",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 6169,
                              "src": "13626:7:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 6173,
                            "name": "ownerOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 5575,
                            "src": "13618:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view returns (address)"
                            }
                          },
                          "id": 6175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13618:16:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 6176,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6165,
                          "src": "13638:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "13618:24:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e",
                        "id": 6178,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13644:43:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950",
                          "typeString": "literal_string \"ERC721: transfer of token that is not own\""
                        },
                        "value": "ERC721: transfer of token that is not own"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950",
                          "typeString": "literal_string \"ERC721: transfer of token that is not own\""
                        }
                      ],
                      "id": 6172,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "13610:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6179,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13610:78:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6180,
                  "nodeType": "ExpressionStatement",
                  "src": "13610:78:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 6187,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6182,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6167,
                          "src": "13706:2:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 6185,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13720:1:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6184,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "13712:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 6183,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "13712:7:28",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 6186,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13712:10:28",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "13706:16:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e7366657220746f20746865207a65726f2061646472657373",
                        "id": 6188,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13724:38:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
                          "typeString": "literal_string \"ERC721: transfer to the zero address\""
                        },
                        "value": "ERC721: transfer to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
                          "typeString": "literal_string \"ERC721: transfer to the zero address\""
                        }
                      ],
                      "id": 6181,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "13698:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6189,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13698:65:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6190,
                  "nodeType": "ExpressionStatement",
                  "src": "13698:65:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6192,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6165,
                        "src": "13795:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6193,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6167,
                        "src": "13801:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6194,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6169,
                        "src": "13805:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6191,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6357,
                      "src": "13774:20:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 6195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13774:39:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6196,
                  "nodeType": "ExpressionStatement",
                  "src": "13774:39:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 6200,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13892:1:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 6199,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13884:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 6198,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "13884:7:28",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 6201,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13884:10:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 6202,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6169,
                        "src": "13896:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6197,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6346,
                      "src": "13875:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 6203,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13875:29:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6204,
                  "nodeType": "ExpressionStatement",
                  "src": "13875:29:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6209,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6169,
                        "src": "13942:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 6205,
                          "name": "_holderTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5473,
                          "src": "13915:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$7661_storage_$",
                            "typeString": "mapping(address => struct EnumerableSet.UintSet storage ref)"
                          }
                        },
                        "id": 6207,
                        "indexExpression": {
                          "id": 6206,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6165,
                          "src": "13929:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "13915:19:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$7661_storage",
                          "typeString": "struct EnumerableSet.UintSet storage ref"
                        }
                      },
                      "id": 6208,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "remove",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7701,
                      "src": "13915:26:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintSet_$7661_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UintSet_$7661_storage_ptr_$",
                        "typeString": "function (struct EnumerableSet.UintSet storage pointer,uint256) returns (bool)"
                      }
                    },
                    "id": 6210,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13915:35:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6211,
                  "nodeType": "ExpressionStatement",
                  "src": "13915:35:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6216,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6169,
                        "src": "13982:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "baseExpression": {
                          "id": 6212,
                          "name": "_holderTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5473,
                          "src": "13960:13:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_UintSet_$7661_storage_$",
                            "typeString": "mapping(address => struct EnumerableSet.UintSet storage ref)"
                          }
                        },
                        "id": 6214,
                        "indexExpression": {
                          "id": 6213,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6167,
                          "src": "13974:2:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "13960:17:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintSet_$7661_storage",
                          "typeString": "struct EnumerableSet.UintSet storage ref"
                        }
                      },
                      "id": 6215,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "add",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7681,
                      "src": "13960:21:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintSet_$7661_storage_ptr_$_t_uint256_$returns$_t_bool_$bound_to$_t_struct$_UintSet_$7661_storage_ptr_$",
                        "typeString": "function (struct EnumerableSet.UintSet storage pointer,uint256) returns (bool)"
                      }
                    },
                    "id": 6217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13960:30:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6218,
                  "nodeType": "ExpressionStatement",
                  "src": "13960:30:28"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 6222,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6169,
                        "src": "14018:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 6223,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6167,
                        "src": "14027:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 6219,
                        "name": "_tokenOwners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5475,
                        "src": "14001:12:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_UintToAddressMap_$7101_storage",
                          "typeString": "struct EnumerableMap.UintToAddressMap storage ref"
                        }
                      },
                      "id": 6221,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "set",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7130,
                      "src": "14001:16:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_UintToAddressMap_$7101_storage_ptr_$_t_uint256_$_t_address_$returns$_t_bool_$bound_to$_t_struct$_UintToAddressMap_$7101_storage_ptr_$",
                        "typeString": "function (struct EnumerableMap.UintToAddressMap storage pointer,uint256,address) returns (bool)"
                      }
                    },
                    "id": 6224,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14001:29:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6225,
                  "nodeType": "ExpressionStatement",
                  "src": "14001:29:28"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 6227,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6165,
                        "src": "14055:4:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6228,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6167,
                        "src": "14061:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6229,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6169,
                        "src": "14065:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6226,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6400,
                      "src": "14046:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 6230,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14046:27:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6231,
                  "nodeType": "EmitStatement",
                  "src": "14041:32:28"
                }
              ]
            },
            "documentation": {
              "id": 6163,
              "nodeType": "StructuredDocumentation",
              "src": "13203:313:28",
              "text": " @dev Transfers `tokenId` from `from` to `to`.\n  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n Requirements:\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n Emits a {Transfer} event."
            },
            "id": 6233,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6165,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 6233,
                  "src": "13540:12:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6164,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13540:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6167,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 6233,
                  "src": "13554:10:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6166,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13554:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6169,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6233,
                  "src": "13566:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6168,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13566:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13539:43:28"
            },
            "returnParameters": {
              "id": 6171,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13600:0:28"
            },
            "scope": 6358,
            "src": "13521:559:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6254,
              "nodeType": "Block",
              "src": "14308:131:28",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 6243,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6236,
                            "src": "14334:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 6242,
                          "name": "_exists",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5951,
                          "src": "14326:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (uint256) view returns (bool)"
                          }
                        },
                        "id": 6244,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14326:16:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e",
                        "id": 6245,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14344:46:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_94be4a260caaeac1b145f03ffa2e70bc612b64982d04f24073aaf3a5f9009978",
                          "typeString": "literal_string \"ERC721Metadata: URI set of nonexistent token\""
                        },
                        "value": "ERC721Metadata: URI set of nonexistent token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_94be4a260caaeac1b145f03ffa2e70bc612b64982d04f24073aaf3a5f9009978",
                          "typeString": "literal_string \"ERC721Metadata: URI set of nonexistent token\""
                        }
                      ],
                      "id": 6241,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "14318:7:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6246,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14318:73:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6247,
                  "nodeType": "ExpressionStatement",
                  "src": "14318:73:28"
                },
                {
                  "expression": {
                    "id": 6252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 6248,
                        "name": "_tokenURIs",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5493,
                        "src": "14401:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_string_storage_$",
                          "typeString": "mapping(uint256 => string storage ref)"
                        }
                      },
                      "id": 6250,
                      "indexExpression": {
                        "id": 6249,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6236,
                        "src": "14412:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14401:19:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 6251,
                      "name": "_tokenURI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6238,
                      "src": "14423:9:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "14401:31:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 6253,
                  "nodeType": "ExpressionStatement",
                  "src": "14401:31:28"
                }
              ]
            },
            "documentation": {
              "id": 6234,
              "nodeType": "StructuredDocumentation",
              "src": "14086:136:28",
              "text": " @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n Requirements:\n - `tokenId` must exist."
            },
            "id": 6255,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setTokenURI",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6236,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6255,
                  "src": "14249:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6235,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14249:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6238,
                  "mutability": "mutable",
                  "name": "_tokenURI",
                  "nodeType": "VariableDeclaration",
                  "scope": 6255,
                  "src": "14266:23:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 6237,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "14266:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14248:42:28"
            },
            "returnParameters": {
              "id": 6240,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14308:0:28"
            },
            "scope": 6358,
            "src": "14227:212:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6265,
              "nodeType": "Block",
              "src": "14724:36:28",
              "statements": [
                {
                  "expression": {
                    "id": 6263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 6261,
                      "name": "_baseURI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 5495,
                      "src": "14734:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 6262,
                      "name": "baseURI_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6258,
                      "src": "14745:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "14734:19:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 6264,
                  "nodeType": "ExpressionStatement",
                  "src": "14734:19:28"
                }
              ]
            },
            "documentation": {
              "id": 6256,
              "nodeType": "StructuredDocumentation",
              "src": "14445:212:28",
              "text": " @dev Internal function to set the base URI for all token IDs. It is\n automatically added as a prefix to the value returned in {tokenURI},\n or to the token ID if {tokenURI} is empty."
            },
            "id": 6266,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setBaseURI",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6259,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6258,
                  "mutability": "mutable",
                  "name": "baseURI_",
                  "nodeType": "VariableDeclaration",
                  "scope": 6266,
                  "src": "14683:22:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 6257,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "14683:6:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14682:24:28"
            },
            "returnParameters": {
              "id": 6260,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14724:0:28"
            },
            "scope": 6358,
            "src": "14662:98:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 6323,
              "nodeType": "Block",
              "src": "15443:459:28",
              "statements": [
                {
                  "condition": {
                    "id": 6283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "15457:16:28",
                    "subExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 6280,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6271,
                          "src": "15458:2:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 6281,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "isContract",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6597,
                        "src": "15458:13:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                          "typeString": "function (address) view returns (bool)"
                        }
                      },
                      "id": 6282,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15458:15:28",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 6287,
                  "nodeType": "IfStatement",
                  "src": "15453:58:28",
                  "trueBody": {
                    "id": 6286,
                    "nodeType": "Block",
                    "src": "15475:36:28",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 6284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15496:4:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 6279,
                        "id": 6285,
                        "nodeType": "Return",
                        "src": "15489:11:28"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    6289
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6289,
                      "mutability": "mutable",
                      "name": "returndata",
                      "nodeType": "VariableDeclaration",
                      "scope": 6323,
                      "src": "15520:23:28",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 6288,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "15520:5:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 6307,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 6295,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 6271,
                                    "src": "15614:2:28",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 6294,
                                  "name": "IERC721Receiver",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 6577,
                                  "src": "15598:15:28",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_IERC721Receiver_$6577_$",
                                    "typeString": "type(contract IERC721Receiver)"
                                  }
                                },
                                "id": 6296,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15598:19:28",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IERC721Receiver_$6577",
                                  "typeString": "contract IERC721Receiver"
                                }
                              },
                              "id": 6297,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "onERC721Received",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 6576,
                              "src": "15598:36:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                "typeString": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                              }
                            },
                            "id": 6298,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "selector",
                            "nodeType": "MemberAccess",
                            "src": "15598:45:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 6299,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4312,
                              "src": "15657:10:28",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 6300,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "15657:12:28",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          {
                            "id": 6301,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6269,
                            "src": "15683:4:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 6302,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6273,
                            "src": "15701:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 6303,
                            "name": "_data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6275,
                            "src": "15722:5:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            },
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "expression": {
                            "id": 6292,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "15562:3:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 6293,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodeWithSelector",
                          "nodeType": "MemberAccess",
                          "src": "15562:22:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function (bytes4) pure returns (bytes memory)"
                          }
                        },
                        "id": 6304,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15562:175:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
                        "id": 6305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15739:52:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                          "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                        },
                        "value": "ERC721: transfer to non ERC721Receiver implementer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                          "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                        }
                      ],
                      "expression": {
                        "id": 6290,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6271,
                        "src": "15546:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 6291,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "functionCall",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6668,
                      "src": "15546:15:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_address_$",
                        "typeString": "function (address,bytes memory,string memory) returns (bytes memory)"
                      }
                    },
                    "id": 6306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15546:246:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15520:272:28"
                },
                {
                  "assignments": [
                    6309
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 6309,
                      "mutability": "mutable",
                      "name": "retval",
                      "nodeType": "VariableDeclaration",
                      "scope": 6323,
                      "src": "15802:13:28",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes4",
                        "typeString": "bytes4"
                      },
                      "typeName": {
                        "id": 6308,
                        "name": "bytes4",
                        "nodeType": "ElementaryTypeName",
                        "src": "15802:6:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 6317,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 6312,
                        "name": "returndata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6289,
                        "src": "15829:10:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "components": [
                          {
                            "id": 6314,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "15842:6:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes4_$",
                              "typeString": "type(bytes4)"
                            },
                            "typeName": {
                              "id": 6313,
                              "name": "bytes4",
                              "nodeType": "ElementaryTypeName",
                              "src": "15842:6:28",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "id": 6315,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "15841:8:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes4_$",
                          "typeString": "type(bytes4)"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_type$_t_bytes4_$",
                          "typeString": "type(bytes4)"
                        }
                      ],
                      "expression": {
                        "id": 6310,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "15818:3:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 6311,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "decode",
                      "nodeType": "MemberAccess",
                      "src": "15818:10:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                        "typeString": "function () pure"
                      }
                    },
                    "id": 6316,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15818:32:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15802:48:28"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        },
                        "id": 6320,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 6318,
                          "name": "retval",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6309,
                          "src": "15868:6:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 6319,
                          "name": "_ERC721_RECEIVED",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5469,
                          "src": "15878:16:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "src": "15868:26:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 6321,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "15867:28:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6279,
                  "id": 6322,
                  "nodeType": "Return",
                  "src": "15860:35:28"
                }
              ]
            },
            "documentation": {
              "id": 6267,
              "nodeType": "StructuredDocumentation",
              "src": "14766:542:28",
              "text": " @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n The call is not executed if the target address is not a contract.\n @param from address representing the previous owner of the given token ID\n @param to target address that will receive the tokens\n @param tokenId uint256 ID of the token to be transferred\n @param _data bytes optional data to send along with the call\n @return bool whether the call correctly returned the expected magic value"
            },
            "id": 6324,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_checkOnERC721Received",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6269,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 6324,
                  "src": "15345:12:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6268,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15345:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6271,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 6324,
                  "src": "15359:10:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6270,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15359:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6273,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6324,
                  "src": "15371:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6272,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15371:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6275,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 6324,
                  "src": "15388:18:28",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 6274,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15388:5:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15344:63:28"
            },
            "returnParameters": {
              "id": 6279,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6278,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 6324,
                  "src": "15433:4:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6277,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "15433:4:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15432:6:28"
            },
            "scope": 6358,
            "src": "15313:589:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 6345,
              "nodeType": "Block",
              "src": "15963:100:28",
              "statements": [
                {
                  "expression": {
                    "id": 6335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 6331,
                        "name": "_tokenApprovals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5479,
                        "src": "15973:15:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_address_$",
                          "typeString": "mapping(uint256 => address)"
                        }
                      },
                      "id": 6333,
                      "indexExpression": {
                        "id": 6332,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6328,
                        "src": "15989:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15973:24:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 6334,
                      "name": "to",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6326,
                      "src": "16000:2:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15973:29:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 6336,
                  "nodeType": "ExpressionStatement",
                  "src": "15973:29:28"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 6339,
                            "name": "tokenId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6328,
                            "src": "16034:7:28",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 6338,
                          "name": "ownerOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 5575,
                          "src": "16026:7:28",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_address_$",
                            "typeString": "function (uint256) view returns (address)"
                          }
                        },
                        "id": 6340,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16026:16:28",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6341,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6326,
                        "src": "16044:2:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 6342,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6328,
                        "src": "16048:7:28",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 6337,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6409,
                      "src": "16017:8:28",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 6343,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16017:39:28",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6344,
                  "nodeType": "EmitStatement",
                  "src": "16012:44:28"
                }
              ]
            },
            "id": 6346,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_approve",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6329,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6326,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 6346,
                  "src": "15926:10:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6325,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15926:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6328,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6346,
                  "src": "15938:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6327,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15938:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15925:29:28"
            },
            "returnParameters": {
              "id": 6330,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15963:0:28"
            },
            "scope": 6358,
            "src": "15908:155:28",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 6356,
              "nodeType": "Block",
              "src": "16749:3:28",
              "statements": []
            },
            "documentation": {
              "id": 6347,
              "nodeType": "StructuredDocumentation",
              "src": "16069:585:28",
              "text": " @dev Hook that is called before any token transfer. This includes minting\n and burning.\n Calling conditions:\n - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n transferred to `to`.\n - When `from` is zero, `tokenId` will be minted for `to`.\n - When `to` is zero, ``from``'s `tokenId` will be burned.\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
            },
            "id": 6357,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_beforeTokenTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 6354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6349,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "scope": 6357,
                  "src": "16689:12:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6348,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16689:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6351,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "scope": 6357,
                  "src": "16703:10:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6350,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16703:7:28",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 6353,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 6357,
                  "src": "16715:15:28",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 6352,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16715:7:28",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16688:43:28"
            },
            "returnParameters": {
              "id": 6355,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16749:0:28"
            },
            "scope": 6358,
            "src": "16659:93:28",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 6359,
        "src": "569:16185:28"
      }
    ],
    "src": "33:16722:28"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "@openzeppelin/contracts/token/ERC721/ERC721.sol",
      "exportedSymbols": {
        "Address": [
          6821
        ],
        "Context": [
          4324
        ],
        "ERC165": [
          4381
        ],
        "ERC721": [
          6358
        ],
        "EnumerableMap": [
          7276
        ],
        "EnumerableSet": [
          7756
        ],
        "IERC165": [
          4393
        ],
        "IERC721": [
          6501
        ],
        "IERC721Enumerable": [
          6532
        ],
        "IERC721Metadata": [
          6559
        ],
        "IERC721Receiver": [
          6577
        ],
        "SafeMath": [
          4589
        ],
        "Strings": [
          7843
        ]
      },
      "license": "MIT"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            ">=",
            "0.6",
            ".0",
            "<",
            "0.8",
            ".0"
          ]
        },
        "id": 5429,
        "name": "PragmaDirective",
        "src": "33:31:28"
      },
      {
        "attributes": {
          "SourceUnit": 4325,
          "absolutePath": "@openzeppelin/contracts/GSN/Context.sol",
          "file": "../../GSN/Context.sol",
          "scope": 6359,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5430,
        "name": "ImportDirective",
        "src": "66:31:28"
      },
      {
        "attributes": {
          "SourceUnit": 6502,
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721.sol",
          "file": "./IERC721.sol",
          "scope": 6359,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5431,
        "name": "ImportDirective",
        "src": "98:23:28"
      },
      {
        "attributes": {
          "SourceUnit": 6560,
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol",
          "file": "./IERC721Metadata.sol",
          "scope": 6359,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5432,
        "name": "ImportDirective",
        "src": "122:31:28"
      },
      {
        "attributes": {
          "SourceUnit": 6533,
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol",
          "file": "./IERC721Enumerable.sol",
          "scope": 6359,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5433,
        "name": "ImportDirective",
        "src": "154:33:28"
      },
      {
        "attributes": {
          "SourceUnit": 6578,
          "absolutePath": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol",
          "file": "./IERC721Receiver.sol",
          "scope": 6359,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5434,
        "name": "ImportDirective",
        "src": "188:31:28"
      },
      {
        "attributes": {
          "SourceUnit": 4382,
          "absolutePath": "@openzeppelin/contracts/introspection/ERC165.sol",
          "file": "../../introspection/ERC165.sol",
          "scope": 6359,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5435,
        "name": "ImportDirective",
        "src": "220:40:28"
      },
      {
        "attributes": {
          "SourceUnit": 4590,
          "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
          "file": "../../math/SafeMath.sol",
          "scope": 6359,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5436,
        "name": "ImportDirective",
        "src": "261:33:28"
      },
      {
        "attributes": {
          "SourceUnit": 6822,
          "absolutePath": "@openzeppelin/contracts/utils/Address.sol",
          "file": "../../utils/Address.sol",
          "scope": 6359,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5437,
        "name": "ImportDirective",
        "src": "295:33:28"
      },
      {
        "attributes": {
          "SourceUnit": 7757,
          "absolutePath": "@openzeppelin/contracts/utils/EnumerableSet.sol",
          "file": "../../utils/EnumerableSet.sol",
          "scope": 6359,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5438,
        "name": "ImportDirective",
        "src": "329:39:28"
      },
      {
        "attributes": {
          "SourceUnit": 7277,
          "absolutePath": "@openzeppelin/contracts/utils/EnumerableMap.sol",
          "file": "../../utils/EnumerableMap.sol",
          "scope": 6359,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5439,
        "name": "ImportDirective",
        "src": "369:39:28"
      },
      {
        "attributes": {
          "SourceUnit": 7844,
          "absolutePath": "@openzeppelin/contracts/utils/Strings.sol",
          "file": "../../utils/Strings.sol",
          "scope": 6359,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 5440,
        "name": "ImportDirective",
        "src": "409:33:28"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            4324,
            4381,
            4393,
            6501,
            6532,
            6559
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            6358,
            6532,
            6559,
            6501,
            4381,
            4393,
            4324
          ],
          "name": "ERC721",
          "scope": 6359
        },
        "children": [
          {
            "attributes": {
              "text": " @title ERC721 Non-Fungible Token Standard basic implementation\n @dev see https://eips.ethereum.org/EIPS/eip-721"
            },
            "id": 5441,
            "name": "StructuredDocumentation",
            "src": "444:124:28"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "Context",
                  "referencedDeclaration": 4324,
                  "type": "contract Context"
                },
                "id": 5442,
                "name": "UserDefinedTypeName",
                "src": "588:7:28"
              }
            ],
            "id": 5443,
            "name": "InheritanceSpecifier",
            "src": "588:7:28"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "ERC165",
                  "referencedDeclaration": 4381,
                  "type": "contract ERC165"
                },
                "id": 5444,
                "name": "UserDefinedTypeName",
                "src": "597:6:28"
              }
            ],
            "id": 5445,
            "name": "InheritanceSpecifier",
            "src": "597:6:28"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "IERC721",
                  "referencedDeclaration": 6501,
                  "type": "contract IERC721"
                },
                "id": 5446,
                "name": "UserDefinedTypeName",
                "src": "605:7:28"
              }
            ],
            "id": 5447,
            "name": "InheritanceSpecifier",
            "src": "605:7:28"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "IERC721Metadata",
                  "referencedDeclaration": 6559,
                  "type": "contract IERC721Metadata"
                },
                "id": 5448,
                "name": "UserDefinedTypeName",
                "src": "614:15:28"
              }
            ],
            "id": 5449,
            "name": "InheritanceSpecifier",
            "src": "614:15:28"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "IERC721Enumerable",
                  "referencedDeclaration": 6532,
                  "type": "contract IERC721Enumerable"
                },
                "id": 5450,
                "name": "UserDefinedTypeName",
                "src": "631:17:28"
              }
            ],
            "id": 5451,
            "name": "InheritanceSpecifier",
            "src": "631:17:28"
          },
          {
            "children": [
              {
                "attributes": {
                  "name": "SafeMath",
                  "referencedDeclaration": 4589,
                  "type": "library SafeMath"
                },
                "id": 5452,
                "name": "UserDefinedTypeName",
                "src": "661:8:28"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 5453,
                "name": "ElementaryTypeName",
                "src": "674:7:28"
              }
            ],
            "id": 5454,
            "name": "UsingForDirective",
            "src": "655:27:28"
          },
          {
            "children": [
              {
                "attributes": {
                  "name": "Address",
                  "referencedDeclaration": 6821,
                  "type": "library Address"
                },
                "id": 5455,
                "name": "UserDefinedTypeName",
                "src": "693:7:28"
              },
              {
                "attributes": {
                  "name": "address",
                  "stateMutability": "nonpayable",
                  "type": "address"
                },
                "id": 5456,
                "name": "ElementaryTypeName",
                "src": "705:7:28"
              }
            ],
            "id": 5457,
            "name": "UsingForDirective",
            "src": "687:26:28"
          },
          {
            "children": [
              {
                "attributes": {
                  "name": "EnumerableSet",
                  "referencedDeclaration": 7756,
                  "type": "library EnumerableSet"
                },
                "id": 5458,
                "name": "UserDefinedTypeName",
                "src": "724:13:28"
              },
              {
                "attributes": {
                  "name": "EnumerableSet.UintSet",
                  "referencedDeclaration": 7661,
                  "type": "struct EnumerableSet.UintSet"
                },
                "id": 5459,
                "name": "UserDefinedTypeName",
                "src": "742:21:28"
              }
            ],
            "id": 5460,
            "name": "UsingForDirective",
            "src": "718:46:28"
          },
          {
            "children": [
              {
                "attributes": {
                  "name": "EnumerableMap",
                  "referencedDeclaration": 7276,
                  "type": "library EnumerableMap"
                },
                "id": 5461,
                "name": "UserDefinedTypeName",
                "src": "775:13:28"
              },
              {
                "attributes": {
                  "name": "EnumerableMap.UintToAddressMap",
                  "referencedDeclaration": 7101,
                  "type": "struct EnumerableMap.UintToAddressMap"
                },
                "id": 5462,
                "name": "UserDefinedTypeName",
                "src": "793:30:28"
              }
            ],
            "id": 5463,
            "name": "UsingForDirective",
            "src": "769:55:28"
          },
          {
            "children": [
              {
                "attributes": {
                  "name": "Strings",
                  "referencedDeclaration": 7843,
                  "type": "library Strings"
                },
                "id": 5464,
                "name": "UserDefinedTypeName",
                "src": "835:7:28"
              },
              {
                "attributes": {
                  "name": "uint256",
                  "type": "uint256"
                },
                "id": 5465,
                "name": "ElementaryTypeName",
                "src": "847:7:28"
              }
            ],
            "id": 5466,
            "name": "UsingForDirective",
            "src": "829:26:28"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "_ERC721_RECEIVED",
              "scope": 6358,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes4",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes4",
                  "type": "bytes4"
                },
                "id": 5467,
                "name": "ElementaryTypeName",
                "src": "1033:6:28"
              },
              {
                "attributes": {
                  "hexvalue": "30783135306237613032",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "token": "number",
                  "type": "int_const 353073666",
                  "value": "0x150b7a02"
                },
                "id": 5468,
                "name": "Literal",
                "src": "1076:10:28"
              }
            ],
            "id": 5469,
            "name": "VariableDeclaration",
            "src": "1033:53:28"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_holderTokens",
              "scope": 6358,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(address => struct EnumerableSet.UintSet)",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(address => struct EnumerableSet.UintSet)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 5470,
                    "name": "ElementaryTypeName",
                    "src": "1179:7:28"
                  },
                  {
                    "attributes": {
                      "name": "EnumerableSet.UintSet",
                      "referencedDeclaration": 7661,
                      "type": "struct EnumerableSet.UintSet"
                    },
                    "id": 5471,
                    "name": "UserDefinedTypeName",
                    "src": "1190:21:28"
                  }
                ],
                "id": 5472,
                "name": "Mapping",
                "src": "1170:42:28"
              }
            ],
            "id": 5473,
            "name": "VariableDeclaration",
            "src": "1170:64:28"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_tokenOwners",
              "scope": 6358,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "struct EnumerableMap.UintToAddressMap",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "EnumerableMap.UintToAddressMap",
                  "referencedDeclaration": 7101,
                  "type": "struct EnumerableMap.UintToAddressMap"
                },
                "id": 5474,
                "name": "UserDefinedTypeName",
                "src": "1298:30:28"
              }
            ],
            "id": 5475,
            "name": "VariableDeclaration",
            "src": "1298:51:28"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_tokenApprovals",
              "scope": 6358,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(uint256 => address)",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(uint256 => address)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 5476,
                    "name": "ElementaryTypeName",
                    "src": "1414:7:28"
                  },
                  {
                    "attributes": {
                      "name": "address",
                      "stateMutability": "nonpayable",
                      "type": "address"
                    },
                    "id": 5477,
                    "name": "ElementaryTypeName",
                    "src": "1425:7:28"
                  }
                ],
                "id": 5478,
                "name": "Mapping",
                "src": "1405:28:28"
              }
            ],
            "id": 5479,
            "name": "VariableDeclaration",
            "src": "1405:52:28"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_operatorApprovals",
              "scope": 6358,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(address => mapping(address => bool))",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(address => mapping(address => bool))"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 5480,
                    "name": "ElementaryTypeName",
                    "src": "1521:7:28"
                  },
                  {
                    "attributes": {
                      "type": "mapping(address => bool)"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 5481,
                        "name": "ElementaryTypeName",
                        "src": "1541:7:28"
                      },
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5482,
                        "name": "ElementaryTypeName",
                        "src": "1552:4:28"
                      }
                    ],
                    "id": 5483,
                    "name": "Mapping",
                    "src": "1532:25:28"
                  }
                ],
                "id": 5484,
                "name": "Mapping",
                "src": "1512:46:28"
              }
            ],
            "id": 5485,
            "name": "VariableDeclaration",
            "src": "1512:73:28"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_name",
              "scope": 6358,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "string",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "string",
                  "type": "string"
                },
                "id": 5486,
                "name": "ElementaryTypeName",
                "src": "1610:6:28"
              }
            ],
            "id": 5487,
            "name": "VariableDeclaration",
            "src": "1610:20:28"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_symbol",
              "scope": 6358,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "string",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "string",
                  "type": "string"
                },
                "id": 5488,
                "name": "ElementaryTypeName",
                "src": "1657:6:28"
              }
            ],
            "id": 5489,
            "name": "VariableDeclaration",
            "src": "1657:22:28"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_tokenURIs",
              "scope": 6358,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(uint256 => string)",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(uint256 => string)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 5490,
                    "name": "ElementaryTypeName",
                    "src": "1734:7:28"
                  },
                  {
                    "attributes": {
                      "name": "string",
                      "type": "string"
                    },
                    "id": 5491,
                    "name": "ElementaryTypeName",
                    "src": "1745:6:28"
                  }
                ],
                "id": 5492,
                "name": "Mapping",
                "src": "1725:27:28"
              }
            ],
            "id": 5493,
            "name": "VariableDeclaration",
            "src": "1725:46:28"
          },
          {
            "attributes": {
              "constant": false,
              "mutability": "mutable",
              "name": "_baseURI",
              "scope": 6358,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "string",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "string",
                  "type": "string"
                },
                "id": 5494,
                "name": "ElementaryTypeName",
                "src": "1794:6:28"
              }
            ],
            "id": 5495,
            "name": "VariableDeclaration",
            "src": "1794:23:28"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "_INTERFACE_ID_ERC721",
              "scope": 6358,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes4",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes4",
                  "type": "bytes4"
                },
                "id": 5496,
                "name": "ElementaryTypeName",
                "src": "2693:6:28"
              },
              {
                "attributes": {
                  "hexvalue": "30783830616335386364",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "token": "number",
                  "type": "int_const 2158778573",
                  "value": "0x80ac58cd"
                },
                "id": 5497,
                "name": "Literal",
                "src": "2740:10:28"
              }
            ],
            "id": 5498,
            "name": "VariableDeclaration",
            "src": "2693:57:28"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "_INTERFACE_ID_ERC721_METADATA",
              "scope": 6358,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes4",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes4",
                  "type": "bytes4"
                },
                "id": 5499,
                "name": "ElementaryTypeName",
                "src": "3016:6:28"
              },
              {
                "attributes": {
                  "hexvalue": "30783562356531333966",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "token": "number",
                  "type": "int_const 1532892063",
                  "value": "0x5b5e139f"
                },
                "id": 5500,
                "name": "Literal",
                "src": "3072:10:28"
              }
            ],
            "id": 5501,
            "name": "VariableDeclaration",
            "src": "3016:66:28"
          },
          {
            "attributes": {
              "constant": true,
              "mutability": "constant",
              "name": "_INTERFACE_ID_ERC721_ENUMERABLE",
              "scope": 6358,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "bytes4",
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "name": "bytes4",
                  "type": "bytes4"
                },
                "id": 5502,
                "name": "ElementaryTypeName",
                "src": "3387:6:28"
              },
              {
                "attributes": {
                  "hexvalue": "30783738306539643633",
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "lValueRequested": false,
                  "token": "number",
                  "type": "int_const 2014223715",
                  "value": "0x780e9d63"
                },
                "id": 5503,
                "name": "Literal",
                "src": "3445:10:28"
              }
            ],
            "id": 5504,
            "name": "VariableDeclaration",
            "src": "3387:68:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "modifiers": [
                null
              ],
              "name": "",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Initializes the contract by setting a `name` and a `symbol` to the token collection."
                },
                "id": 5505,
                "name": "StructuredDocumentation",
                "src": "3462:108:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "name_",
                      "scope": 5533,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "string",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string"
                        },
                        "id": 5506,
                        "name": "ElementaryTypeName",
                        "src": "3588:6:28"
                      }
                    ],
                    "id": 5507,
                    "name": "VariableDeclaration",
                    "src": "3588:19:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "symbol_",
                      "scope": 5533,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "string",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string"
                        },
                        "id": 5508,
                        "name": "ElementaryTypeName",
                        "src": "3609:6:28"
                      }
                    ],
                    "id": 5509,
                    "name": "VariableDeclaration",
                    "src": "3609:21:28"
                  }
                ],
                "id": 5510,
                "name": "ParameterList",
                "src": "3587:44:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5511,
                "name": "ParameterList",
                "src": "3639:0:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "string storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5487,
                              "type": "string storage ref",
                              "value": "_name"
                            },
                            "id": 5512,
                            "name": "Identifier",
                            "src": "3649:5:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5507,
                              "type": "string memory",
                              "value": "name_"
                            },
                            "id": 5513,
                            "name": "Identifier",
                            "src": "3657:5:28"
                          }
                        ],
                        "id": 5514,
                        "name": "Assignment",
                        "src": "3649:13:28"
                      }
                    ],
                    "id": 5515,
                    "name": "ExpressionStatement",
                    "src": "3649:13:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "string storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5489,
                              "type": "string storage ref",
                              "value": "_symbol"
                            },
                            "id": 5516,
                            "name": "Identifier",
                            "src": "3672:7:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5509,
                              "type": "string memory",
                              "value": "symbol_"
                            },
                            "id": 5517,
                            "name": "Identifier",
                            "src": "3682:7:28"
                          }
                        ],
                        "id": 5518,
                        "name": "Assignment",
                        "src": "3672:17:28"
                      }
                    ],
                    "id": 5519,
                    "name": "ExpressionStatement",
                    "src": "3672:17:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4380,
                              "type": "function (bytes4)",
                              "value": "_registerInterface"
                            },
                            "id": 5520,
                            "name": "Identifier",
                            "src": "3777:18:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5498,
                              "type": "bytes4",
                              "value": "_INTERFACE_ID_ERC721"
                            },
                            "id": 5521,
                            "name": "Identifier",
                            "src": "3796:20:28"
                          }
                        ],
                        "id": 5522,
                        "name": "FunctionCall",
                        "src": "3777:40:28"
                      }
                    ],
                    "id": 5523,
                    "name": "ExpressionStatement",
                    "src": "3777:40:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4380,
                              "type": "function (bytes4)",
                              "value": "_registerInterface"
                            },
                            "id": 5524,
                            "name": "Identifier",
                            "src": "3827:18:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5501,
                              "type": "bytes4",
                              "value": "_INTERFACE_ID_ERC721_METADATA"
                            },
                            "id": 5525,
                            "name": "Identifier",
                            "src": "3846:29:28"
                          }
                        ],
                        "id": 5526,
                        "name": "FunctionCall",
                        "src": "3827:49:28"
                      }
                    ],
                    "id": 5527,
                    "name": "ExpressionStatement",
                    "src": "3827:49:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes4",
                                  "typeString": "bytes4"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4380,
                              "type": "function (bytes4)",
                              "value": "_registerInterface"
                            },
                            "id": 5528,
                            "name": "Identifier",
                            "src": "3886:18:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5504,
                              "type": "bytes4",
                              "value": "_INTERFACE_ID_ERC721_ENUMERABLE"
                            },
                            "id": 5529,
                            "name": "Identifier",
                            "src": "3905:31:28"
                          }
                        ],
                        "id": 5530,
                        "name": "FunctionCall",
                        "src": "3886:51:28"
                      }
                    ],
                    "id": 5531,
                    "name": "ExpressionStatement",
                    "src": "3886:51:28"
                  }
                ],
                "id": 5532,
                "name": "Block",
                "src": "3639:305:28"
              }
            ],
            "id": 5533,
            "name": "FunctionDefinition",
            "src": "3575:369:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6426
              ],
              "functionSelector": "70a08231",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "balanceOf",
              "scope": 6358,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721-balanceOf}."
                },
                "id": 5534,
                "name": "StructuredDocumentation",
                "src": "3950:48:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5538,
                "name": "OverrideSpecifier",
                "src": "4049:8:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "owner",
                      "scope": 5559,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5535,
                        "name": "ElementaryTypeName",
                        "src": "4022:7:28"
                      }
                    ],
                    "id": 5536,
                    "name": "VariableDeclaration",
                    "src": "4022:13:28"
                  }
                ],
                "id": 5537,
                "name": "ParameterList",
                "src": "4021:15:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5559,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5539,
                        "name": "ElementaryTypeName",
                        "src": "4067:7:28"
                      }
                    ],
                    "id": 5540,
                    "name": "VariableDeclaration",
                    "src": "4067:7:28"
                  }
                ],
                "id": 5541,
                "name": "ParameterList",
                "src": "4066:9:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_7395d4d3901c50cdfcab223d072f9aa36241df5d883e62cbf147ee1b05a9e6ba",
                                  "typeString": "literal_string \"ERC721: balance query for the zero address\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 5542,
                            "name": "Identifier",
                            "src": "4086:7:28"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5536,
                                  "type": "address",
                                  "value": "owner"
                                },
                                "id": 5543,
                                "name": "Identifier",
                                "src": "4094:5:28"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address"
                                        },
                                        "id": 5544,
                                        "name": "ElementaryTypeName",
                                        "src": "4103:7:28"
                                      }
                                    ],
                                    "id": 5545,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "4103:7:28"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 5546,
                                    "name": "Literal",
                                    "src": "4111:1:28"
                                  }
                                ],
                                "id": 5547,
                                "name": "FunctionCall",
                                "src": "4103:10:28"
                              }
                            ],
                            "id": 5548,
                            "name": "BinaryOperation",
                            "src": "4094:19:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: balance query for the zero address\"",
                              "value": "ERC721: balance query for the zero address"
                            },
                            "id": 5549,
                            "name": "Literal",
                            "src": "4115:44:28"
                          }
                        ],
                        "id": 5550,
                        "name": "FunctionCall",
                        "src": "4086:74:28"
                      }
                    ],
                    "id": 5551,
                    "name": "ExpressionStatement",
                    "src": "4086:74:28"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5541
                    },
                    "children": [
                      {
                        "attributes": {
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": 7735,
                              "type": "function (struct EnumerableSet.UintSet storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct EnumerableSet.UintSet storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5473,
                                      "type": "mapping(address => struct EnumerableSet.UintSet storage ref)",
                                      "value": "_holderTokens"
                                    },
                                    "id": 5552,
                                    "name": "Identifier",
                                    "src": "4178:13:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5536,
                                      "type": "address",
                                      "value": "owner"
                                    },
                                    "id": 5553,
                                    "name": "Identifier",
                                    "src": "4192:5:28"
                                  }
                                ],
                                "id": 5554,
                                "name": "IndexAccess",
                                "src": "4178:20:28"
                              }
                            ],
                            "id": 5555,
                            "name": "MemberAccess",
                            "src": "4178:27:28"
                          }
                        ],
                        "id": 5556,
                        "name": "FunctionCall",
                        "src": "4178:29:28"
                      }
                    ],
                    "id": 5557,
                    "name": "Return",
                    "src": "4171:36:28"
                  }
                ],
                "id": 5558,
                "name": "Block",
                "src": "4076:138:28"
              }
            ],
            "id": 5559,
            "name": "FunctionDefinition",
            "src": "4003:211:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6434
              ],
              "functionSelector": "6352211e",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "ownerOf",
              "scope": 6358,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721-ownerOf}."
                },
                "id": 5560,
                "name": "StructuredDocumentation",
                "src": "4220:46:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5564,
                "name": "OverrideSpecifier",
                "src": "4317:8:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 5575,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5561,
                        "name": "ElementaryTypeName",
                        "src": "4288:7:28"
                      }
                    ],
                    "id": 5562,
                    "name": "VariableDeclaration",
                    "src": "4288:15:28"
                  }
                ],
                "id": 5563,
                "name": "ParameterList",
                "src": "4287:17:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5575,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5565,
                        "name": "ElementaryTypeName",
                        "src": "4335:7:28"
                      }
                    ],
                    "id": 5566,
                    "name": "VariableDeclaration",
                    "src": "4335:7:28"
                  }
                ],
                "id": 5567,
                "name": "ParameterList",
                "src": "4334:9:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5567
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_7481f3df2a424c0755a1ad2356614e9a5a358d461ea2eae1f89cb21cbad00397",
                                  "typeString": "literal_string \"ERC721: owner query for nonexistent token\""
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "get",
                              "referencedDeclaration": 7275,
                              "type": "function (struct EnumerableMap.UintToAddressMap storage pointer,uint256,string memory) view returns (address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5475,
                                  "type": "struct EnumerableMap.UintToAddressMap storage ref",
                                  "value": "_tokenOwners"
                                },
                                "id": 5568,
                                "name": "Identifier",
                                "src": "4361:12:28"
                              }
                            ],
                            "id": 5569,
                            "name": "MemberAccess",
                            "src": "4361:16:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5562,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 5570,
                            "name": "Identifier",
                            "src": "4378:7:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: owner query for nonexistent token\"",
                              "value": "ERC721: owner query for nonexistent token"
                            },
                            "id": 5571,
                            "name": "Literal",
                            "src": "4387:43:28"
                          }
                        ],
                        "id": 5572,
                        "name": "FunctionCall",
                        "src": "4361:70:28"
                      }
                    ],
                    "id": 5573,
                    "name": "Return",
                    "src": "4354:77:28"
                  }
                ],
                "id": 5574,
                "name": "Block",
                "src": "4344:94:28"
              }
            ],
            "id": 5575,
            "name": "FunctionDefinition",
            "src": "4271:167:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6544
              ],
              "functionSelector": "06fdde03",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "name",
              "scope": 6358,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721Metadata-name}."
                },
                "id": 5576,
                "name": "StructuredDocumentation",
                "src": "4444:51:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5578,
                "name": "OverrideSpecifier",
                "src": "4528:8:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5577,
                "name": "ParameterList",
                "src": "4513:2:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5585,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "string",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string"
                        },
                        "id": 5579,
                        "name": "ElementaryTypeName",
                        "src": "4546:6:28"
                      }
                    ],
                    "id": 5580,
                    "name": "VariableDeclaration",
                    "src": "4546:13:28"
                  }
                ],
                "id": 5581,
                "name": "ParameterList",
                "src": "4545:15:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5581
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 5487,
                          "type": "string storage ref",
                          "value": "_name"
                        },
                        "id": 5582,
                        "name": "Identifier",
                        "src": "4578:5:28"
                      }
                    ],
                    "id": 5583,
                    "name": "Return",
                    "src": "4571:12:28"
                  }
                ],
                "id": 5584,
                "name": "Block",
                "src": "4561:29:28"
              }
            ],
            "id": 5585,
            "name": "FunctionDefinition",
            "src": "4500:90:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6550
              ],
              "functionSelector": "95d89b41",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "symbol",
              "scope": 6358,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721Metadata-symbol}."
                },
                "id": 5586,
                "name": "StructuredDocumentation",
                "src": "4596:53:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5588,
                "name": "OverrideSpecifier",
                "src": "4684:8:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5587,
                "name": "ParameterList",
                "src": "4669:2:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5595,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "string",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string"
                        },
                        "id": 5589,
                        "name": "ElementaryTypeName",
                        "src": "4702:6:28"
                      }
                    ],
                    "id": 5590,
                    "name": "VariableDeclaration",
                    "src": "4702:13:28"
                  }
                ],
                "id": 5591,
                "name": "ParameterList",
                "src": "4701:15:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5591
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 5489,
                          "type": "string storage ref",
                          "value": "_symbol"
                        },
                        "id": 5592,
                        "name": "Identifier",
                        "src": "4734:7:28"
                      }
                    ],
                    "id": 5593,
                    "name": "Return",
                    "src": "4727:14:28"
                  }
                ],
                "id": 5594,
                "name": "Block",
                "src": "4717:31:28"
              }
            ],
            "id": 5595,
            "name": "FunctionDefinition",
            "src": "4654:94:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6558
              ],
              "functionSelector": "c87b56dd",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "tokenURI",
              "scope": 6358,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721Metadata-tokenURI}."
                },
                "id": 5596,
                "name": "StructuredDocumentation",
                "src": "4754:55:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5600,
                "name": "OverrideSpecifier",
                "src": "4861:8:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 5658,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5597,
                        "name": "ElementaryTypeName",
                        "src": "4832:7:28"
                      }
                    ],
                    "id": 5598,
                    "name": "VariableDeclaration",
                    "src": "4832:15:28"
                  }
                ],
                "id": 5599,
                "name": "ParameterList",
                "src": "4831:17:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5658,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "string",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string"
                        },
                        "id": 5601,
                        "name": "ElementaryTypeName",
                        "src": "4879:6:28"
                      }
                    ],
                    "id": 5602,
                    "name": "VariableDeclaration",
                    "src": "4879:13:28"
                  }
                ],
                "id": 5603,
                "name": "ParameterList",
                "src": "4878:15:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_a2d45c0fba603d40d82d590051761ca952d1ab9d78cca6d0d464d7b6e961a9cb",
                                  "typeString": "literal_string \"ERC721Metadata: URI query for nonexistent token\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 5604,
                            "name": "Identifier",
                            "src": "4904:7:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5951,
                                  "type": "function (uint256) view returns (bool)",
                                  "value": "_exists"
                                },
                                "id": 5605,
                                "name": "Identifier",
                                "src": "4912:7:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5598,
                                  "type": "uint256",
                                  "value": "tokenId"
                                },
                                "id": 5606,
                                "name": "Identifier",
                                "src": "4920:7:28"
                              }
                            ],
                            "id": 5607,
                            "name": "FunctionCall",
                            "src": "4912:16:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721Metadata: URI query for nonexistent token\"",
                              "value": "ERC721Metadata: URI query for nonexistent token"
                            },
                            "id": 5608,
                            "name": "Literal",
                            "src": "4930:49:28"
                          }
                        ],
                        "id": 5609,
                        "name": "FunctionCall",
                        "src": "4904:76:28"
                      }
                    ],
                    "id": 5610,
                    "name": "ExpressionStatement",
                    "src": "4904:76:28"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5612
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "_tokenURI",
                          "scope": 5657,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "string",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "string",
                              "type": "string"
                            },
                            "id": 5611,
                            "name": "ElementaryTypeName",
                            "src": "4991:6:28"
                          }
                        ],
                        "id": 5612,
                        "name": "VariableDeclaration",
                        "src": "4991:23:28"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "string storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5493,
                              "type": "mapping(uint256 => string storage ref)",
                              "value": "_tokenURIs"
                            },
                            "id": 5613,
                            "name": "Identifier",
                            "src": "5017:10:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5598,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 5614,
                            "name": "Identifier",
                            "src": "5028:7:28"
                          }
                        ],
                        "id": 5615,
                        "name": "IndexAccess",
                        "src": "5017:19:28"
                      }
                    ],
                    "id": 5616,
                    "name": "VariableDeclarationStatement",
                    "src": "4991:45:28"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bytes storage pointer",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_string_storage",
                                          "typeString": "string storage ref"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes storage pointer)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "bytes"
                                        },
                                        "id": 5617,
                                        "name": "ElementaryTypeName",
                                        "src": "5109:5:28"
                                      }
                                    ],
                                    "id": 5618,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "5109:5:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5495,
                                      "type": "string storage ref",
                                      "value": "_baseURI"
                                    },
                                    "id": 5619,
                                    "name": "Identifier",
                                    "src": "5115:8:28"
                                  }
                                ],
                                "id": 5620,
                                "name": "FunctionCall",
                                "src": "5109:15:28"
                              }
                            ],
                            "id": 5621,
                            "name": "MemberAccess",
                            "src": "5109:22:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 5622,
                            "name": "Literal",
                            "src": "5135:1:28"
                          }
                        ],
                        "id": 5623,
                        "name": "BinaryOperation",
                        "src": "5109:27:28"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 5603
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5612,
                                  "type": "string memory",
                                  "value": "_tokenURI"
                                },
                                "id": 5624,
                                "name": "Identifier",
                                "src": "5159:9:28"
                              }
                            ],
                            "id": 5625,
                            "name": "Return",
                            "src": "5152:16:28"
                          }
                        ],
                        "id": 5626,
                        "name": "Block",
                        "src": "5138:41:28"
                      }
                    ],
                    "id": 5627,
                    "name": "IfStatement",
                    "src": "5105:74:28"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": ">",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bytes memory",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_string_memory_ptr",
                                          "typeString": "string memory"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes storage pointer)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "bytes"
                                        },
                                        "id": 5628,
                                        "name": "ElementaryTypeName",
                                        "src": "5281:5:28"
                                      }
                                    ],
                                    "id": 5629,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "5281:5:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5612,
                                      "type": "string memory",
                                      "value": "_tokenURI"
                                    },
                                    "id": 5630,
                                    "name": "Identifier",
                                    "src": "5287:9:28"
                                  }
                                ],
                                "id": 5631,
                                "name": "FunctionCall",
                                "src": "5281:16:28"
                              }
                            ],
                            "id": 5632,
                            "name": "MemberAccess",
                            "src": "5281:23:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 5633,
                            "name": "Literal",
                            "src": "5307:1:28"
                          }
                        ],
                        "id": 5634,
                        "name": "BinaryOperation",
                        "src": "5281:27:28"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 5603
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "string memory",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes_memory_ptr",
                                          "typeString": "bytes memory"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(string storage pointer)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "string"
                                        },
                                        "id": 5635,
                                        "name": "ElementaryTypeName",
                                        "src": "5331:6:28"
                                      }
                                    ],
                                    "id": 5636,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "5331:6:28"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "bytes memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_string_storage",
                                              "typeString": "string storage ref"
                                            },
                                            {
                                              "typeIdentifier": "t_string_memory_ptr",
                                              "typeString": "string memory"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "member_name": "encodePacked",
                                          "type": "function () pure returns (bytes memory)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 4294967295,
                                              "type": "abi",
                                              "value": "abi"
                                            },
                                            "id": 5637,
                                            "name": "Identifier",
                                            "src": "5338:3:28"
                                          }
                                        ],
                                        "id": 5638,
                                        "name": "MemberAccess",
                                        "src": "5338:16:28"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5495,
                                          "type": "string storage ref",
                                          "value": "_baseURI"
                                        },
                                        "id": 5639,
                                        "name": "Identifier",
                                        "src": "5355:8:28"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5612,
                                          "type": "string memory",
                                          "value": "_tokenURI"
                                        },
                                        "id": 5640,
                                        "name": "Identifier",
                                        "src": "5365:9:28"
                                      }
                                    ],
                                    "id": 5641,
                                    "name": "FunctionCall",
                                    "src": "5338:37:28"
                                  }
                                ],
                                "id": 5642,
                                "name": "FunctionCall",
                                "src": "5331:45:28"
                              }
                            ],
                            "id": 5643,
                            "name": "Return",
                            "src": "5324:52:28"
                          }
                        ],
                        "id": 5644,
                        "name": "Block",
                        "src": "5310:77:28"
                      }
                    ],
                    "id": 5645,
                    "name": "IfStatement",
                    "src": "5277:110:28"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5603
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "string memory",
                          "type_conversion": true
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(string storage pointer)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "name": "string"
                                },
                                "id": 5646,
                                "name": "ElementaryTypeName",
                                "src": "5493:6:28"
                              }
                            ],
                            "id": 5647,
                            "name": "ElementaryTypeNameExpression",
                            "src": "5493:6:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_storage",
                                      "typeString": "string storage ref"
                                    },
                                    {
                                      "typeIdentifier": "t_string_memory_ptr",
                                      "typeString": "string memory"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "encodePacked",
                                  "type": "function () pure returns (bytes memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4294967295,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 5648,
                                    "name": "Identifier",
                                    "src": "5500:3:28"
                                  }
                                ],
                                "id": 5649,
                                "name": "MemberAccess",
                                "src": "5500:16:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5495,
                                  "type": "string storage ref",
                                  "value": "_baseURI"
                                },
                                "id": 5650,
                                "name": "Identifier",
                                "src": "5517:8:28"
                              },
                              {
                                "attributes": {
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "string memory",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "toString",
                                      "referencedDeclaration": 7842,
                                      "type": "function (uint256) pure returns (string memory)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5598,
                                          "type": "uint256",
                                          "value": "tokenId"
                                        },
                                        "id": 5651,
                                        "name": "Identifier",
                                        "src": "5527:7:28"
                                      }
                                    ],
                                    "id": 5652,
                                    "name": "MemberAccess",
                                    "src": "5527:16:28"
                                  }
                                ],
                                "id": 5653,
                                "name": "FunctionCall",
                                "src": "5527:18:28"
                              }
                            ],
                            "id": 5654,
                            "name": "FunctionCall",
                            "src": "5500:46:28"
                          }
                        ],
                        "id": 5655,
                        "name": "FunctionCall",
                        "src": "5493:54:28"
                      }
                    ],
                    "id": 5656,
                    "name": "Return",
                    "src": "5486:61:28"
                  }
                ],
                "id": 5657,
                "name": "Block",
                "src": "4894:660:28"
              }
            ],
            "id": 5658,
            "name": "FunctionDefinition",
            "src": "4814:740:28"
          },
          {
            "attributes": {
              "functionSelector": "6c0360eb",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "baseURI",
              "scope": 6358,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Returns the base URI set via {_setBaseURI}. This will be\n automatically added as a prefix in {tokenURI} to each token's URI, or\n to the token ID if no specific URI is set for that token ID."
                },
                "id": 5659,
                "name": "StructuredDocumentation",
                "src": "5560:221:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5660,
                "name": "ParameterList",
                "src": "5802:2:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5667,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "string",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string"
                        },
                        "id": 5661,
                        "name": "ElementaryTypeName",
                        "src": "5826:6:28"
                      }
                    ],
                    "id": 5662,
                    "name": "VariableDeclaration",
                    "src": "5826:13:28"
                  }
                ],
                "id": 5663,
                "name": "ParameterList",
                "src": "5825:15:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5663
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 5495,
                          "type": "string storage ref",
                          "value": "_baseURI"
                        },
                        "id": 5664,
                        "name": "Identifier",
                        "src": "5858:8:28"
                      }
                    ],
                    "id": 5665,
                    "name": "Return",
                    "src": "5851:15:28"
                  }
                ],
                "id": 5666,
                "name": "Block",
                "src": "5841:32:28"
              }
            ],
            "id": 5667,
            "name": "FunctionDefinition",
            "src": "5786:87:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6523
              ],
              "functionSelector": "2f745c59",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "tokenOfOwnerByIndex",
              "scope": 6358,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721Enumerable-tokenOfOwnerByIndex}."
                },
                "id": 5668,
                "name": "StructuredDocumentation",
                "src": "5879:68:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5674,
                "name": "OverrideSpecifier",
                "src": "6023:8:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "owner",
                      "scope": 5686,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5669,
                        "name": "ElementaryTypeName",
                        "src": "5981:7:28"
                      }
                    ],
                    "id": 5670,
                    "name": "VariableDeclaration",
                    "src": "5981:13:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "index",
                      "scope": 5686,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5671,
                        "name": "ElementaryTypeName",
                        "src": "5996:7:28"
                      }
                    ],
                    "id": 5672,
                    "name": "VariableDeclaration",
                    "src": "5996:13:28"
                  }
                ],
                "id": 5673,
                "name": "ParameterList",
                "src": "5980:30:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5686,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5675,
                        "name": "ElementaryTypeName",
                        "src": "6041:7:28"
                      }
                    ],
                    "id": 5676,
                    "name": "VariableDeclaration",
                    "src": "6041:7:28"
                  }
                ],
                "id": 5677,
                "name": "ParameterList",
                "src": "6040:9:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5677
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "at",
                              "referencedDeclaration": 7755,
                              "type": "function (struct EnumerableSet.UintSet storage pointer,uint256) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct EnumerableSet.UintSet storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5473,
                                      "type": "mapping(address => struct EnumerableSet.UintSet storage ref)",
                                      "value": "_holderTokens"
                                    },
                                    "id": 5678,
                                    "name": "Identifier",
                                    "src": "6067:13:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5670,
                                      "type": "address",
                                      "value": "owner"
                                    },
                                    "id": 5679,
                                    "name": "Identifier",
                                    "src": "6081:5:28"
                                  }
                                ],
                                "id": 5680,
                                "name": "IndexAccess",
                                "src": "6067:20:28"
                              }
                            ],
                            "id": 5681,
                            "name": "MemberAccess",
                            "src": "6067:23:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5672,
                              "type": "uint256",
                              "value": "index"
                            },
                            "id": 5682,
                            "name": "Identifier",
                            "src": "6091:5:28"
                          }
                        ],
                        "id": 5683,
                        "name": "FunctionCall",
                        "src": "6067:30:28"
                      }
                    ],
                    "id": 5684,
                    "name": "Return",
                    "src": "6060:37:28"
                  }
                ],
                "id": 5685,
                "name": "Block",
                "src": "6050:54:28"
              }
            ],
            "id": 5686,
            "name": "FunctionDefinition",
            "src": "5952:152:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6513
              ],
              "functionSelector": "18160ddd",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "totalSupply",
              "scope": 6358,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721Enumerable-totalSupply}."
                },
                "id": 5687,
                "name": "StructuredDocumentation",
                "src": "6110:60:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5689,
                "name": "OverrideSpecifier",
                "src": "6210:8:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5688,
                "name": "ParameterList",
                "src": "6195:2:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5698,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5690,
                        "name": "ElementaryTypeName",
                        "src": "6228:7:28"
                      }
                    ],
                    "id": 5691,
                    "name": "VariableDeclaration",
                    "src": "6228:7:28"
                  }
                ],
                "id": 5692,
                "name": "ParameterList",
                "src": "6227:9:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5692
                    },
                    "children": [
                      {
                        "attributes": {
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": 7184,
                              "type": "function (struct EnumerableMap.UintToAddressMap storage pointer) view returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5475,
                                  "type": "struct EnumerableMap.UintToAddressMap storage ref",
                                  "value": "_tokenOwners"
                                },
                                "id": 5693,
                                "name": "Identifier",
                                "src": "6347:12:28"
                              }
                            ],
                            "id": 5694,
                            "name": "MemberAccess",
                            "src": "6347:19:28"
                          }
                        ],
                        "id": 5695,
                        "name": "FunctionCall",
                        "src": "6347:21:28"
                      }
                    ],
                    "id": 5696,
                    "name": "Return",
                    "src": "6340:28:28"
                  }
                ],
                "id": 5697,
                "name": "Block",
                "src": "6237:138:28"
              }
            ],
            "id": 5698,
            "name": "FunctionDefinition",
            "src": "6175:200:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6531
              ],
              "functionSelector": "4f6ccce7",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "tokenByIndex",
              "scope": 6358,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721Enumerable-tokenByIndex}."
                },
                "id": 5699,
                "name": "StructuredDocumentation",
                "src": "6381:61:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5703,
                "name": "OverrideSpecifier",
                "src": "6496:8:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "index",
                      "scope": 5717,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5700,
                        "name": "ElementaryTypeName",
                        "src": "6469:7:28"
                      }
                    ],
                    "id": 5701,
                    "name": "VariableDeclaration",
                    "src": "6469:13:28"
                  }
                ],
                "id": 5702,
                "name": "ParameterList",
                "src": "6468:15:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5717,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5704,
                        "name": "ElementaryTypeName",
                        "src": "6514:7:28"
                      }
                    ],
                    "id": 5705,
                    "name": "VariableDeclaration",
                    "src": "6514:7:28"
                  }
                ],
                "id": 5706,
                "name": "ParameterList",
                "src": "6513:9:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        5708,
                        null
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "tokenId",
                          "scope": 5716,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 5707,
                            "name": "ElementaryTypeName",
                            "src": "6534:7:28"
                          }
                        ],
                        "id": 5708,
                        "name": "VariableDeclaration",
                        "src": "6534:15:28"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple(uint256,address)",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "at",
                              "referencedDeclaration": 7220,
                              "type": "function (struct EnumerableMap.UintToAddressMap storage pointer,uint256) view returns (uint256,address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5475,
                                  "type": "struct EnumerableMap.UintToAddressMap storage ref",
                                  "value": "_tokenOwners"
                                },
                                "id": 5709,
                                "name": "Identifier",
                                "src": "6555:12:28"
                              }
                            ],
                            "id": 5710,
                            "name": "MemberAccess",
                            "src": "6555:15:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5701,
                              "type": "uint256",
                              "value": "index"
                            },
                            "id": 5711,
                            "name": "Identifier",
                            "src": "6571:5:28"
                          }
                        ],
                        "id": 5712,
                        "name": "FunctionCall",
                        "src": "6555:22:28"
                      }
                    ],
                    "id": 5713,
                    "name": "VariableDeclarationStatement",
                    "src": "6533:44:28"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5706
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 5708,
                          "type": "uint256",
                          "value": "tokenId"
                        },
                        "id": 5714,
                        "name": "Identifier",
                        "src": "6594:7:28"
                      }
                    ],
                    "id": 5715,
                    "name": "Return",
                    "src": "6587:14:28"
                  }
                ],
                "id": 5716,
                "name": "Block",
                "src": "6523:85:28"
              }
            ],
            "id": 5717,
            "name": "FunctionDefinition",
            "src": "6447:161:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6462
              ],
              "functionSelector": "095ea7b3",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "approve",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721-approve}."
                },
                "id": 5718,
                "name": "StructuredDocumentation",
                "src": "6614:46:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5724,
                "name": "OverrideSpecifier",
                "src": "6726:8:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "scope": 5759,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5719,
                        "name": "ElementaryTypeName",
                        "src": "6682:7:28"
                      }
                    ],
                    "id": 5720,
                    "name": "VariableDeclaration",
                    "src": "6682:10:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 5759,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5721,
                        "name": "ElementaryTypeName",
                        "src": "6694:7:28"
                      }
                    ],
                    "id": 5722,
                    "name": "VariableDeclaration",
                    "src": "6694:15:28"
                  }
                ],
                "id": 5723,
                "name": "ParameterList",
                "src": "6681:29:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5725,
                "name": "ParameterList",
                "src": "6735:0:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        5727
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "owner",
                          "scope": 5758,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 5726,
                            "name": "ElementaryTypeName",
                            "src": "6745:7:28"
                          }
                        ],
                        "id": 5727,
                        "name": "VariableDeclaration",
                        "src": "6745:13:28"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5575,
                              "type": "function (uint256) view returns (address)",
                              "value": "ownerOf"
                            },
                            "id": 5728,
                            "name": "Identifier",
                            "src": "6761:7:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5722,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 5729,
                            "name": "Identifier",
                            "src": "6769:7:28"
                          }
                        ],
                        "id": 5730,
                        "name": "FunctionCall",
                        "src": "6761:16:28"
                      }
                    ],
                    "id": 5731,
                    "name": "VariableDeclarationStatement",
                    "src": "6745:32:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_b51b4875eede07862961e8f9365c6749f5fe55c6ee5d7a9e42b6912ad0b15942",
                                  "typeString": "literal_string \"ERC721: approval to current owner\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 5732,
                            "name": "Identifier",
                            "src": "6787:7:28"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5720,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 5733,
                                "name": "Identifier",
                                "src": "6795:2:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5727,
                                  "type": "address",
                                  "value": "owner"
                                },
                                "id": 5734,
                                "name": "Identifier",
                                "src": "6801:5:28"
                              }
                            ],
                            "id": 5735,
                            "name": "BinaryOperation",
                            "src": "6795:11:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a20617070726f76616c20746f2063757272656e74206f776e6572",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: approval to current owner\"",
                              "value": "ERC721: approval to current owner"
                            },
                            "id": 5736,
                            "name": "Literal",
                            "src": "6808:35:28"
                          }
                        ],
                        "id": 5737,
                        "name": "FunctionCall",
                        "src": "6787:57:28"
                      }
                    ],
                    "id": 5738,
                    "name": "ExpressionStatement",
                    "src": "6787:57:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_6d83cef3e0cb19b8320a9c5feb26b56bbb08f152a8e61b12eca3302d8d68b23d",
                                  "typeString": "literal_string \"ERC721: approve caller is not owner nor approved for all\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 5739,
                            "name": "Identifier",
                            "src": "6855:7:28"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "||",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "==",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address payable",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4312,
                                          "type": "function () view returns (address payable)",
                                          "value": "_msgSender"
                                        },
                                        "id": 5740,
                                        "name": "Identifier",
                                        "src": "6863:10:28"
                                      }
                                    ],
                                    "id": 5741,
                                    "name": "FunctionCall",
                                    "src": "6863:12:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5727,
                                      "type": "address",
                                      "value": "owner"
                                    },
                                    "id": 5742,
                                    "name": "Identifier",
                                    "src": "6879:5:28"
                                  }
                                ],
                                "id": 5743,
                                "name": "BinaryOperation",
                                "src": "6863:21:28"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address_payable",
                                          "typeString": "address payable"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5832,
                                      "type": "function (address,address) view returns (bool)",
                                      "value": "isApprovedForAll"
                                    },
                                    "id": 5744,
                                    "name": "Identifier",
                                    "src": "6888:16:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5727,
                                      "type": "address",
                                      "value": "owner"
                                    },
                                    "id": 5745,
                                    "name": "Identifier",
                                    "src": "6905:5:28"
                                  },
                                  {
                                    "attributes": {
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address payable",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4312,
                                          "type": "function () view returns (address payable)",
                                          "value": "_msgSender"
                                        },
                                        "id": 5746,
                                        "name": "Identifier",
                                        "src": "6912:10:28"
                                      }
                                    ],
                                    "id": 5747,
                                    "name": "FunctionCall",
                                    "src": "6912:12:28"
                                  }
                                ],
                                "id": 5748,
                                "name": "FunctionCall",
                                "src": "6888:37:28"
                              }
                            ],
                            "id": 5749,
                            "name": "BinaryOperation",
                            "src": "6863:62:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: approve caller is not owner nor approved for all\"",
                              "value": "ERC721: approve caller is not owner nor approved for all"
                            },
                            "id": 5750,
                            "name": "Literal",
                            "src": "6939:58:28"
                          }
                        ],
                        "id": 5751,
                        "name": "FunctionCall",
                        "src": "6855:152:28"
                      }
                    ],
                    "id": 5752,
                    "name": "ExpressionStatement",
                    "src": "6855:152:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6346,
                              "type": "function (address,uint256)",
                              "value": "_approve"
                            },
                            "id": 5753,
                            "name": "Identifier",
                            "src": "7018:8:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5720,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 5754,
                            "name": "Identifier",
                            "src": "7027:2:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5722,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 5755,
                            "name": "Identifier",
                            "src": "7031:7:28"
                          }
                        ],
                        "id": 5756,
                        "name": "FunctionCall",
                        "src": "7018:21:28"
                      }
                    ],
                    "id": 5757,
                    "name": "ExpressionStatement",
                    "src": "7018:21:28"
                  }
                ],
                "id": 5758,
                "name": "Block",
                "src": "6735:311:28"
              }
            ],
            "id": 5759,
            "name": "FunctionDefinition",
            "src": "6665:381:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6470
              ],
              "functionSelector": "081812fc",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "getApproved",
              "scope": 6358,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721-getApproved}."
                },
                "id": 5760,
                "name": "StructuredDocumentation",
                "src": "7052:50:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5764,
                "name": "OverrideSpecifier",
                "src": "7157:8:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 5780,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5761,
                        "name": "ElementaryTypeName",
                        "src": "7128:7:28"
                      }
                    ],
                    "id": 5762,
                    "name": "VariableDeclaration",
                    "src": "7128:15:28"
                  }
                ],
                "id": 5763,
                "name": "ParameterList",
                "src": "7127:17:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5780,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5765,
                        "name": "ElementaryTypeName",
                        "src": "7175:7:28"
                      }
                    ],
                    "id": 5766,
                    "name": "VariableDeclaration",
                    "src": "7175:7:28"
                  }
                ],
                "id": 5767,
                "name": "ParameterList",
                "src": "7174:9:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_9291e0f44949204f2e9b40e6be090924979d6047b2365868f4e9f027722eb89d",
                                  "typeString": "literal_string \"ERC721: approved query for nonexistent token\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 5768,
                            "name": "Identifier",
                            "src": "7194:7:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5951,
                                  "type": "function (uint256) view returns (bool)",
                                  "value": "_exists"
                                },
                                "id": 5769,
                                "name": "Identifier",
                                "src": "7202:7:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5762,
                                  "type": "uint256",
                                  "value": "tokenId"
                                },
                                "id": 5770,
                                "name": "Identifier",
                                "src": "7210:7:28"
                              }
                            ],
                            "id": 5771,
                            "name": "FunctionCall",
                            "src": "7202:16:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: approved query for nonexistent token\"",
                              "value": "ERC721: approved query for nonexistent token"
                            },
                            "id": 5772,
                            "name": "Literal",
                            "src": "7220:46:28"
                          }
                        ],
                        "id": 5773,
                        "name": "FunctionCall",
                        "src": "7194:73:28"
                      }
                    ],
                    "id": 5774,
                    "name": "ExpressionStatement",
                    "src": "7194:73:28"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5767
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5479,
                              "type": "mapping(uint256 => address)",
                              "value": "_tokenApprovals"
                            },
                            "id": 5775,
                            "name": "Identifier",
                            "src": "7285:15:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5762,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 5776,
                            "name": "Identifier",
                            "src": "7301:7:28"
                          }
                        ],
                        "id": 5777,
                        "name": "IndexAccess",
                        "src": "7285:24:28"
                      }
                    ],
                    "id": 5778,
                    "name": "Return",
                    "src": "7278:31:28"
                  }
                ],
                "id": 5779,
                "name": "Block",
                "src": "7184:132:28"
              }
            ],
            "id": 5780,
            "name": "FunctionDefinition",
            "src": "7107:209:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6478
              ],
              "functionSelector": "a22cb465",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "setApprovalForAll",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721-setApprovalForAll}."
                },
                "id": 5781,
                "name": "StructuredDocumentation",
                "src": "7322:56:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5787,
                "name": "OverrideSpecifier",
                "src": "7458:8:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "operator",
                      "scope": 5814,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5782,
                        "name": "ElementaryTypeName",
                        "src": "7410:7:28"
                      }
                    ],
                    "id": 5783,
                    "name": "VariableDeclaration",
                    "src": "7410:16:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "approved",
                      "scope": 5814,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5784,
                        "name": "ElementaryTypeName",
                        "src": "7428:4:28"
                      }
                    ],
                    "id": 5785,
                    "name": "VariableDeclaration",
                    "src": "7428:13:28"
                  }
                ],
                "id": 5786,
                "name": "ParameterList",
                "src": "7409:33:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5788,
                "name": "ParameterList",
                "src": "7467:0:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_45fe4329685be5ecd250fd0e6a25aea0ea4d0e30fb6a73c118b95749e6d70d05",
                                  "typeString": "literal_string \"ERC721: approve to caller\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 5789,
                            "name": "Identifier",
                            "src": "7477:7:28"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5783,
                                  "type": "address",
                                  "value": "operator"
                                },
                                "id": 5790,
                                "name": "Identifier",
                                "src": "7485:8:28"
                              },
                              {
                                "attributes": {
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4312,
                                      "type": "function () view returns (address payable)",
                                      "value": "_msgSender"
                                    },
                                    "id": 5791,
                                    "name": "Identifier",
                                    "src": "7497:10:28"
                                  }
                                ],
                                "id": 5792,
                                "name": "FunctionCall",
                                "src": "7497:12:28"
                              }
                            ],
                            "id": 5793,
                            "name": "BinaryOperation",
                            "src": "7485:24:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a20617070726f766520746f2063616c6c6572",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: approve to caller\"",
                              "value": "ERC721: approve to caller"
                            },
                            "id": 5794,
                            "name": "Literal",
                            "src": "7511:27:28"
                          }
                        ],
                        "id": 5795,
                        "name": "FunctionCall",
                        "src": "7477:62:28"
                      }
                    ],
                    "id": 5796,
                    "name": "ExpressionStatement",
                    "src": "7477:62:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "mapping(address => bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5485,
                                      "type": "mapping(address => mapping(address => bool))",
                                      "value": "_operatorApprovals"
                                    },
                                    "id": 5797,
                                    "name": "Identifier",
                                    "src": "7550:18:28"
                                  },
                                  {
                                    "attributes": {
                                      "arguments": [
                                        null
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "address payable",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            null
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4312,
                                          "type": "function () view returns (address payable)",
                                          "value": "_msgSender"
                                        },
                                        "id": 5798,
                                        "name": "Identifier",
                                        "src": "7569:10:28"
                                      }
                                    ],
                                    "id": 5799,
                                    "name": "FunctionCall",
                                    "src": "7569:12:28"
                                  }
                                ],
                                "id": 5801,
                                "name": "IndexAccess",
                                "src": "7550:32:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5783,
                                  "type": "address",
                                  "value": "operator"
                                },
                                "id": 5800,
                                "name": "Identifier",
                                "src": "7583:8:28"
                              }
                            ],
                            "id": 5802,
                            "name": "IndexAccess",
                            "src": "7550:42:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5785,
                              "type": "bool",
                              "value": "approved"
                            },
                            "id": 5803,
                            "name": "Identifier",
                            "src": "7595:8:28"
                          }
                        ],
                        "id": 5804,
                        "name": "Assignment",
                        "src": "7550:53:28"
                      }
                    ],
                    "id": 5805,
                    "name": "ExpressionStatement",
                    "src": "7550:53:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6418,
                              "type": "function (address,address,bool)",
                              "value": "ApprovalForAll"
                            },
                            "id": 5806,
                            "name": "Identifier",
                            "src": "7618:14:28"
                          },
                          {
                            "attributes": {
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4312,
                                  "type": "function () view returns (address payable)",
                                  "value": "_msgSender"
                                },
                                "id": 5807,
                                "name": "Identifier",
                                "src": "7633:10:28"
                              }
                            ],
                            "id": 5808,
                            "name": "FunctionCall",
                            "src": "7633:12:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5783,
                              "type": "address",
                              "value": "operator"
                            },
                            "id": 5809,
                            "name": "Identifier",
                            "src": "7647:8:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5785,
                              "type": "bool",
                              "value": "approved"
                            },
                            "id": 5810,
                            "name": "Identifier",
                            "src": "7657:8:28"
                          }
                        ],
                        "id": 5811,
                        "name": "FunctionCall",
                        "src": "7618:48:28"
                      }
                    ],
                    "id": 5812,
                    "name": "EmitStatement",
                    "src": "7613:53:28"
                  }
                ],
                "id": 5813,
                "name": "Block",
                "src": "7467:206:28"
              }
            ],
            "id": 5814,
            "name": "FunctionDefinition",
            "src": "7383:290:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6488
              ],
              "functionSelector": "e985e9c5",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "isApprovedForAll",
              "scope": 6358,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721-isApprovedForAll}."
                },
                "id": 5815,
                "name": "StructuredDocumentation",
                "src": "7679:55:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5821,
                "name": "OverrideSpecifier",
                "src": "7810:8:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "owner",
                      "scope": 5832,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5816,
                        "name": "ElementaryTypeName",
                        "src": "7765:7:28"
                      }
                    ],
                    "id": 5817,
                    "name": "VariableDeclaration",
                    "src": "7765:13:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "operator",
                      "scope": 5832,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5818,
                        "name": "ElementaryTypeName",
                        "src": "7780:7:28"
                      }
                    ],
                    "id": 5819,
                    "name": "VariableDeclaration",
                    "src": "7780:16:28"
                  }
                ],
                "id": 5820,
                "name": "ParameterList",
                "src": "7764:33:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5832,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5822,
                        "name": "ElementaryTypeName",
                        "src": "7828:4:28"
                      }
                    ],
                    "id": 5823,
                    "name": "VariableDeclaration",
                    "src": "7828:4:28"
                  }
                ],
                "id": 5824,
                "name": "ParameterList",
                "src": "7827:6:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5824
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "mapping(address => bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5485,
                                  "type": "mapping(address => mapping(address => bool))",
                                  "value": "_operatorApprovals"
                                },
                                "id": 5825,
                                "name": "Identifier",
                                "src": "7851:18:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5817,
                                  "type": "address",
                                  "value": "owner"
                                },
                                "id": 5826,
                                "name": "Identifier",
                                "src": "7870:5:28"
                              }
                            ],
                            "id": 5827,
                            "name": "IndexAccess",
                            "src": "7851:25:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5819,
                              "type": "address",
                              "value": "operator"
                            },
                            "id": 5828,
                            "name": "Identifier",
                            "src": "7877:8:28"
                          }
                        ],
                        "id": 5829,
                        "name": "IndexAccess",
                        "src": "7851:35:28"
                      }
                    ],
                    "id": 5830,
                    "name": "Return",
                    "src": "7844:42:28"
                  }
                ],
                "id": 5831,
                "name": "Block",
                "src": "7834:59:28"
              }
            ],
            "id": 5832,
            "name": "FunctionDefinition",
            "src": "7739:154:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6454
              ],
              "functionSelector": "23b872dd",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "transferFrom",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721-transferFrom}."
                },
                "id": 5833,
                "name": "StructuredDocumentation",
                "src": "7899:51:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5841,
                "name": "OverrideSpecifier",
                "src": "8035:8:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "from",
                      "scope": 5859,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5834,
                        "name": "ElementaryTypeName",
                        "src": "7977:7:28"
                      }
                    ],
                    "id": 5835,
                    "name": "VariableDeclaration",
                    "src": "7977:12:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "scope": 5859,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5836,
                        "name": "ElementaryTypeName",
                        "src": "7991:7:28"
                      }
                    ],
                    "id": 5837,
                    "name": "VariableDeclaration",
                    "src": "7991:10:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 5859,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5838,
                        "name": "ElementaryTypeName",
                        "src": "8003:7:28"
                      }
                    ],
                    "id": 5839,
                    "name": "VariableDeclaration",
                    "src": "8003:15:28"
                  }
                ],
                "id": 5840,
                "name": "ParameterList",
                "src": "7976:43:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5842,
                "name": "ParameterList",
                "src": "8044:0:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
                                  "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 5843,
                            "name": "Identifier",
                            "src": "8106:7:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5991,
                                  "type": "function (address,uint256) view returns (bool)",
                                  "value": "_isApprovedOrOwner"
                                },
                                "id": 5844,
                                "name": "Identifier",
                                "src": "8114:18:28"
                              },
                              {
                                "attributes": {
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4312,
                                      "type": "function () view returns (address payable)",
                                      "value": "_msgSender"
                                    },
                                    "id": 5845,
                                    "name": "Identifier",
                                    "src": "8133:10:28"
                                  }
                                ],
                                "id": 5846,
                                "name": "FunctionCall",
                                "src": "8133:12:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5839,
                                  "type": "uint256",
                                  "value": "tokenId"
                                },
                                "id": 5847,
                                "name": "Identifier",
                                "src": "8147:7:28"
                              }
                            ],
                            "id": 5848,
                            "name": "FunctionCall",
                            "src": "8114:41:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: transfer caller is not owner nor approved\"",
                              "value": "ERC721: transfer caller is not owner nor approved"
                            },
                            "id": 5849,
                            "name": "Literal",
                            "src": "8157:51:28"
                          }
                        ],
                        "id": 5850,
                        "name": "FunctionCall",
                        "src": "8106:103:28"
                      }
                    ],
                    "id": 5851,
                    "name": "ExpressionStatement",
                    "src": "8106:103:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6233,
                              "type": "function (address,address,uint256)",
                              "value": "_transfer"
                            },
                            "id": 5852,
                            "name": "Identifier",
                            "src": "8220:9:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5835,
                              "type": "address",
                              "value": "from"
                            },
                            "id": 5853,
                            "name": "Identifier",
                            "src": "8230:4:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5837,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 5854,
                            "name": "Identifier",
                            "src": "8236:2:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5839,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 5855,
                            "name": "Identifier",
                            "src": "8240:7:28"
                          }
                        ],
                        "id": 5856,
                        "name": "FunctionCall",
                        "src": "8220:28:28"
                      }
                    ],
                    "id": 5857,
                    "name": "ExpressionStatement",
                    "src": "8220:28:28"
                  }
                ],
                "id": 5858,
                "name": "Block",
                "src": "8044:211:28"
              }
            ],
            "id": 5859,
            "name": "FunctionDefinition",
            "src": "7955:300:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6444
              ],
              "functionSelector": "42842e0e",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "safeTransferFrom",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721-safeTransferFrom}."
                },
                "id": 5860,
                "name": "StructuredDocumentation",
                "src": "8261:55:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5868,
                "name": "OverrideSpecifier",
                "src": "8405:8:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "from",
                      "scope": 5878,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5861,
                        "name": "ElementaryTypeName",
                        "src": "8347:7:28"
                      }
                    ],
                    "id": 5862,
                    "name": "VariableDeclaration",
                    "src": "8347:12:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "scope": 5878,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5863,
                        "name": "ElementaryTypeName",
                        "src": "8361:7:28"
                      }
                    ],
                    "id": 5864,
                    "name": "VariableDeclaration",
                    "src": "8361:10:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 5878,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5865,
                        "name": "ElementaryTypeName",
                        "src": "8373:7:28"
                      }
                    ],
                    "id": 5866,
                    "name": "VariableDeclaration",
                    "src": "8373:15:28"
                  }
                ],
                "id": 5867,
                "name": "ParameterList",
                "src": "8346:43:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5869,
                "name": "ParameterList",
                "src": "8414:0:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "overloadedDeclarations": [
                                5878,
                                5908
                              ],
                              "referencedDeclaration": 5908,
                              "type": "function (address,address,uint256,bytes memory)",
                              "value": "safeTransferFrom"
                            },
                            "id": 5870,
                            "name": "Identifier",
                            "src": "8424:16:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5862,
                              "type": "address",
                              "value": "from"
                            },
                            "id": 5871,
                            "name": "Identifier",
                            "src": "8441:4:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5864,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 5872,
                            "name": "Identifier",
                            "src": "8447:2:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5866,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 5873,
                            "name": "Identifier",
                            "src": "8451:7:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"\"",
                              "value": ""
                            },
                            "id": 5874,
                            "name": "Literal",
                            "src": "8460:2:28"
                          }
                        ],
                        "id": 5875,
                        "name": "FunctionCall",
                        "src": "8424:39:28"
                      }
                    ],
                    "id": 5876,
                    "name": "ExpressionStatement",
                    "src": "8424:39:28"
                  }
                ],
                "id": 5877,
                "name": "Block",
                "src": "8414:56:28"
              }
            ],
            "id": 5878,
            "name": "FunctionDefinition",
            "src": "8321:149:28"
          },
          {
            "attributes": {
              "baseFunctions": [
                6500
              ],
              "functionSelector": "b88d4fde",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "safeTransferFrom",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev See {IERC721-safeTransferFrom}."
                },
                "id": 5879,
                "name": "StructuredDocumentation",
                "src": "8476:55:28"
              },
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 5889,
                "name": "OverrideSpecifier",
                "src": "8640:8:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "from",
                      "scope": 5908,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5880,
                        "name": "ElementaryTypeName",
                        "src": "8562:7:28"
                      }
                    ],
                    "id": 5881,
                    "name": "VariableDeclaration",
                    "src": "8562:12:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "scope": 5908,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5882,
                        "name": "ElementaryTypeName",
                        "src": "8576:7:28"
                      }
                    ],
                    "id": 5883,
                    "name": "VariableDeclaration",
                    "src": "8576:10:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 5908,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5884,
                        "name": "ElementaryTypeName",
                        "src": "8588:7:28"
                      }
                    ],
                    "id": 5885,
                    "name": "VariableDeclaration",
                    "src": "8588:15:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_data",
                      "scope": 5908,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 5886,
                        "name": "ElementaryTypeName",
                        "src": "8605:5:28"
                      }
                    ],
                    "id": 5887,
                    "name": "VariableDeclaration",
                    "src": "8605:18:28"
                  }
                ],
                "id": 5888,
                "name": "ParameterList",
                "src": "8561:63:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5890,
                "name": "ParameterList",
                "src": "8649:0:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_c8682f3ad98807db59a6ec6bb812b72fed0a66e3150fa8239699ee83885247f2",
                                  "typeString": "literal_string \"ERC721: transfer caller is not owner nor approved\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 5891,
                            "name": "Identifier",
                            "src": "8659:7:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5991,
                                  "type": "function (address,uint256) view returns (bool)",
                                  "value": "_isApprovedOrOwner"
                                },
                                "id": 5892,
                                "name": "Identifier",
                                "src": "8667:18:28"
                              },
                              {
                                "attributes": {
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4312,
                                      "type": "function () view returns (address payable)",
                                      "value": "_msgSender"
                                    },
                                    "id": 5893,
                                    "name": "Identifier",
                                    "src": "8686:10:28"
                                  }
                                ],
                                "id": 5894,
                                "name": "FunctionCall",
                                "src": "8686:12:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5885,
                                  "type": "uint256",
                                  "value": "tokenId"
                                },
                                "id": 5895,
                                "name": "Identifier",
                                "src": "8700:7:28"
                              }
                            ],
                            "id": 5896,
                            "name": "FunctionCall",
                            "src": "8667:41:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: transfer caller is not owner nor approved\"",
                              "value": "ERC721: transfer caller is not owner nor approved"
                            },
                            "id": 5897,
                            "name": "Literal",
                            "src": "8710:51:28"
                          }
                        ],
                        "id": 5898,
                        "name": "FunctionCall",
                        "src": "8659:103:28"
                      }
                    ],
                    "id": 5899,
                    "name": "ExpressionStatement",
                    "src": "8659:103:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5937,
                              "type": "function (address,address,uint256,bytes memory)",
                              "value": "_safeTransfer"
                            },
                            "id": 5900,
                            "name": "Identifier",
                            "src": "8772:13:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5881,
                              "type": "address",
                              "value": "from"
                            },
                            "id": 5901,
                            "name": "Identifier",
                            "src": "8786:4:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5883,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 5902,
                            "name": "Identifier",
                            "src": "8792:2:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5885,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 5903,
                            "name": "Identifier",
                            "src": "8796:7:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5887,
                              "type": "bytes memory",
                              "value": "_data"
                            },
                            "id": 5904,
                            "name": "Identifier",
                            "src": "8805:5:28"
                          }
                        ],
                        "id": 5905,
                        "name": "FunctionCall",
                        "src": "8772:39:28"
                      }
                    ],
                    "id": 5906,
                    "name": "ExpressionStatement",
                    "src": "8772:39:28"
                  }
                ],
                "id": 5907,
                "name": "Block",
                "src": "8649:169:28"
              }
            ],
            "id": 5908,
            "name": "FunctionDefinition",
            "src": "8536:282:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_safeTransfer",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n are aware of the ERC721 protocol to prevent tokens from being forever locked.\n `_data` is additional data, it has no specified format and it is sent in call to `to`.\n This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n implement alternative mechanisms to perform token transfer, such as signature-based.\n Requirements:\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n - `tokenId` token must exist and be owned by `from`.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
                },
                "id": 5909,
                "name": "StructuredDocumentation",
                "src": "8824:851:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "from",
                      "scope": 5937,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5910,
                        "name": "ElementaryTypeName",
                        "src": "9703:7:28"
                      }
                    ],
                    "id": 5911,
                    "name": "VariableDeclaration",
                    "src": "9703:12:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "scope": 5937,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5912,
                        "name": "ElementaryTypeName",
                        "src": "9717:7:28"
                      }
                    ],
                    "id": 5913,
                    "name": "VariableDeclaration",
                    "src": "9717:10:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 5937,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5914,
                        "name": "ElementaryTypeName",
                        "src": "9729:7:28"
                      }
                    ],
                    "id": 5915,
                    "name": "VariableDeclaration",
                    "src": "9729:15:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_data",
                      "scope": 5937,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 5916,
                        "name": "ElementaryTypeName",
                        "src": "9746:5:28"
                      }
                    ],
                    "id": 5917,
                    "name": "VariableDeclaration",
                    "src": "9746:18:28"
                  }
                ],
                "id": 5918,
                "name": "ParameterList",
                "src": "9702:63:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5919,
                "name": "ParameterList",
                "src": "9783:0:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6233,
                              "type": "function (address,address,uint256)",
                              "value": "_transfer"
                            },
                            "id": 5920,
                            "name": "Identifier",
                            "src": "9793:9:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5911,
                              "type": "address",
                              "value": "from"
                            },
                            "id": 5921,
                            "name": "Identifier",
                            "src": "9803:4:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5913,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 5922,
                            "name": "Identifier",
                            "src": "9809:2:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5915,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 5923,
                            "name": "Identifier",
                            "src": "9813:7:28"
                          }
                        ],
                        "id": 5924,
                        "name": "FunctionCall",
                        "src": "9793:28:28"
                      }
                    ],
                    "id": 5925,
                    "name": "ExpressionStatement",
                    "src": "9793:28:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                                  "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 5926,
                            "name": "Identifier",
                            "src": "9831:7:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6324,
                                  "type": "function (address,address,uint256,bytes memory) returns (bool)",
                                  "value": "_checkOnERC721Received"
                                },
                                "id": 5927,
                                "name": "Identifier",
                                "src": "9839:22:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5911,
                                  "type": "address",
                                  "value": "from"
                                },
                                "id": 5928,
                                "name": "Identifier",
                                "src": "9862:4:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5913,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 5929,
                                "name": "Identifier",
                                "src": "9868:2:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5915,
                                  "type": "uint256",
                                  "value": "tokenId"
                                },
                                "id": 5930,
                                "name": "Identifier",
                                "src": "9872:7:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5917,
                                  "type": "bytes memory",
                                  "value": "_data"
                                },
                                "id": 5931,
                                "name": "Identifier",
                                "src": "9881:5:28"
                              }
                            ],
                            "id": 5932,
                            "name": "FunctionCall",
                            "src": "9839:48:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\"",
                              "value": "ERC721: transfer to non ERC721Receiver implementer"
                            },
                            "id": 5933,
                            "name": "Literal",
                            "src": "9889:52:28"
                          }
                        ],
                        "id": 5934,
                        "name": "FunctionCall",
                        "src": "9831:111:28"
                      }
                    ],
                    "id": 5935,
                    "name": "ExpressionStatement",
                    "src": "9831:111:28"
                  }
                ],
                "id": 5936,
                "name": "Block",
                "src": "9783:166:28"
              }
            ],
            "id": 5937,
            "name": "FunctionDefinition",
            "src": "9680:269:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_exists",
              "scope": 6358,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Returns whether `tokenId` exists.\n Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n Tokens start existing when they are minted (`_mint`),\n and stop existing when they are burned (`_burn`)."
                },
                "id": 5938,
                "name": "StructuredDocumentation",
                "src": "9955:292:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 5951,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5939,
                        "name": "ElementaryTypeName",
                        "src": "10269:7:28"
                      }
                    ],
                    "id": 5940,
                    "name": "VariableDeclaration",
                    "src": "10269:15:28"
                  }
                ],
                "id": 5941,
                "name": "ParameterList",
                "src": "10268:17:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5951,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5942,
                        "name": "ElementaryTypeName",
                        "src": "10309:4:28"
                      }
                    ],
                    "id": 5943,
                    "name": "VariableDeclaration",
                    "src": "10309:4:28"
                  }
                ],
                "id": 5944,
                "name": "ParameterList",
                "src": "10308:6:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 5944
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "contains",
                              "referencedDeclaration": 7170,
                              "type": "function (struct EnumerableMap.UintToAddressMap storage pointer,uint256) view returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5475,
                                  "type": "struct EnumerableMap.UintToAddressMap storage ref",
                                  "value": "_tokenOwners"
                                },
                                "id": 5945,
                                "name": "Identifier",
                                "src": "10332:12:28"
                              }
                            ],
                            "id": 5946,
                            "name": "MemberAccess",
                            "src": "10332:21:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5940,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 5947,
                            "name": "Identifier",
                            "src": "10354:7:28"
                          }
                        ],
                        "id": 5948,
                        "name": "FunctionCall",
                        "src": "10332:30:28"
                      }
                    ],
                    "id": 5949,
                    "name": "Return",
                    "src": "10325:37:28"
                  }
                ],
                "id": 5950,
                "name": "Block",
                "src": "10315:54:28"
              }
            ],
            "id": 5951,
            "name": "FunctionDefinition",
            "src": "10252:117:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_isApprovedOrOwner",
              "scope": 6358,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Returns whether `spender` is allowed to manage `tokenId`.\n Requirements:\n - `tokenId` must exist."
                },
                "id": 5952,
                "name": "StructuredDocumentation",
                "src": "10375:147:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "spender",
                      "scope": 5991,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5953,
                        "name": "ElementaryTypeName",
                        "src": "10555:7:28"
                      }
                    ],
                    "id": 5954,
                    "name": "VariableDeclaration",
                    "src": "10555:15:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 5991,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5955,
                        "name": "ElementaryTypeName",
                        "src": "10572:7:28"
                      }
                    ],
                    "id": 5956,
                    "name": "VariableDeclaration",
                    "src": "10572:15:28"
                  }
                ],
                "id": 5957,
                "name": "ParameterList",
                "src": "10554:34:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 5991,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 5958,
                        "name": "ElementaryTypeName",
                        "src": "10612:4:28"
                      }
                    ],
                    "id": 5959,
                    "name": "VariableDeclaration",
                    "src": "10612:4:28"
                  }
                ],
                "id": 5960,
                "name": "ParameterList",
                "src": "10611:6:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_5797d1ccb08b83980dd0c07ea40d8f6a64d35fff736a19bdd17522954cb0899c",
                                  "typeString": "literal_string \"ERC721: operator query for nonexistent token\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 5961,
                            "name": "Identifier",
                            "src": "10628:7:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5951,
                                  "type": "function (uint256) view returns (bool)",
                                  "value": "_exists"
                                },
                                "id": 5962,
                                "name": "Identifier",
                                "src": "10636:7:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5956,
                                  "type": "uint256",
                                  "value": "tokenId"
                                },
                                "id": 5963,
                                "name": "Identifier",
                                "src": "10644:7:28"
                              }
                            ],
                            "id": 5964,
                            "name": "FunctionCall",
                            "src": "10636:16:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: operator query for nonexistent token\"",
                              "value": "ERC721: operator query for nonexistent token"
                            },
                            "id": 5965,
                            "name": "Literal",
                            "src": "10654:46:28"
                          }
                        ],
                        "id": 5966,
                        "name": "FunctionCall",
                        "src": "10628:73:28"
                      }
                    ],
                    "id": 5967,
                    "name": "ExpressionStatement",
                    "src": "10628:73:28"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        5969
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "owner",
                          "scope": 5990,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 5968,
                            "name": "ElementaryTypeName",
                            "src": "10711:7:28"
                          }
                        ],
                        "id": 5969,
                        "name": "VariableDeclaration",
                        "src": "10711:13:28"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5575,
                              "type": "function (uint256) view returns (address)",
                              "value": "ownerOf"
                            },
                            "id": 5970,
                            "name": "Identifier",
                            "src": "10727:7:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5956,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 5971,
                            "name": "Identifier",
                            "src": "10735:7:28"
                          }
                        ],
                        "id": 5972,
                        "name": "FunctionCall",
                        "src": "10727:16:28"
                      }
                    ],
                    "id": 5973,
                    "name": "VariableDeclarationStatement",
                    "src": "10711:32:28"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 5960
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "||",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "||",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "==",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5954,
                                          "type": "address",
                                          "value": "spender"
                                        },
                                        "id": 5974,
                                        "name": "Identifier",
                                        "src": "10761:7:28"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5969,
                                          "type": "address",
                                          "value": "owner"
                                        },
                                        "id": 5975,
                                        "name": "Identifier",
                                        "src": "10772:5:28"
                                      }
                                    ],
                                    "id": 5976,
                                    "name": "BinaryOperation",
                                    "src": "10761:16:28"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "==",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "address",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5780,
                                              "type": "function (uint256) view returns (address)",
                                              "value": "getApproved"
                                            },
                                            "id": 5977,
                                            "name": "Identifier",
                                            "src": "10781:11:28"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 5956,
                                              "type": "uint256",
                                              "value": "tokenId"
                                            },
                                            "id": 5978,
                                            "name": "Identifier",
                                            "src": "10793:7:28"
                                          }
                                        ],
                                        "id": 5979,
                                        "name": "FunctionCall",
                                        "src": "10781:20:28"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5954,
                                          "type": "address",
                                          "value": "spender"
                                        },
                                        "id": 5980,
                                        "name": "Identifier",
                                        "src": "10805:7:28"
                                      }
                                    ],
                                    "id": 5981,
                                    "name": "BinaryOperation",
                                    "src": "10781:31:28"
                                  }
                                ],
                                "id": 5982,
                                "name": "BinaryOperation",
                                "src": "10761:51:28"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5832,
                                      "type": "function (address,address) view returns (bool)",
                                      "value": "isApprovedForAll"
                                    },
                                    "id": 5983,
                                    "name": "Identifier",
                                    "src": "10816:16:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5969,
                                      "type": "address",
                                      "value": "owner"
                                    },
                                    "id": 5984,
                                    "name": "Identifier",
                                    "src": "10833:5:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5954,
                                      "type": "address",
                                      "value": "spender"
                                    },
                                    "id": 5985,
                                    "name": "Identifier",
                                    "src": "10840:7:28"
                                  }
                                ],
                                "id": 5986,
                                "name": "FunctionCall",
                                "src": "10816:32:28"
                              }
                            ],
                            "id": 5987,
                            "name": "BinaryOperation",
                            "src": "10761:87:28"
                          }
                        ],
                        "id": 5988,
                        "name": "TupleExpression",
                        "src": "10760:89:28"
                      }
                    ],
                    "id": 5989,
                    "name": "Return",
                    "src": "10753:96:28"
                  }
                ],
                "id": 5990,
                "name": "Block",
                "src": "10618:238:28"
              }
            ],
            "id": 5991,
            "name": "FunctionDefinition",
            "src": "10527:329:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_safeMint",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Safely mints `tokenId` and transfers it to `to`.\n Requirements:\nd*\n - `tokenId` must not exist.\n - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n Emits a {Transfer} event."
                },
                "id": 5992,
                "name": "StructuredDocumentation",
                "src": "10862:320:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "scope": 6006,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 5993,
                        "name": "ElementaryTypeName",
                        "src": "11206:7:28"
                      }
                    ],
                    "id": 5994,
                    "name": "VariableDeclaration",
                    "src": "11206:10:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 6006,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 5995,
                        "name": "ElementaryTypeName",
                        "src": "11218:7:28"
                      }
                    ],
                    "id": 5996,
                    "name": "VariableDeclaration",
                    "src": "11218:15:28"
                  }
                ],
                "id": 5997,
                "name": "ParameterList",
                "src": "11205:29:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 5998,
                "name": "ParameterList",
                "src": "11252:0:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "overloadedDeclarations": [
                                6006,
                                6035
                              ],
                              "referencedDeclaration": 6035,
                              "type": "function (address,uint256,bytes memory)",
                              "value": "_safeMint"
                            },
                            "id": 5999,
                            "name": "Identifier",
                            "src": "11262:9:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5994,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 6000,
                            "name": "Identifier",
                            "src": "11272:2:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5996,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6001,
                            "name": "Identifier",
                            "src": "11276:7:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"\"",
                              "value": ""
                            },
                            "id": 6002,
                            "name": "Literal",
                            "src": "11285:2:28"
                          }
                        ],
                        "id": 6003,
                        "name": "FunctionCall",
                        "src": "11262:26:28"
                      }
                    ],
                    "id": 6004,
                    "name": "ExpressionStatement",
                    "src": "11262:26:28"
                  }
                ],
                "id": 6005,
                "name": "Block",
                "src": "11252:43:28"
              }
            ],
            "id": 6006,
            "name": "FunctionDefinition",
            "src": "11187:108:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_safeMint",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n forwarded in {IERC721Receiver-onERC721Received} to contract recipients."
                },
                "id": 6007,
                "name": "StructuredDocumentation",
                "src": "11301:210:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "scope": 6035,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6008,
                        "name": "ElementaryTypeName",
                        "src": "11535:7:28"
                      }
                    ],
                    "id": 6009,
                    "name": "VariableDeclaration",
                    "src": "11535:10:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 6035,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 6010,
                        "name": "ElementaryTypeName",
                        "src": "11547:7:28"
                      }
                    ],
                    "id": 6011,
                    "name": "VariableDeclaration",
                    "src": "11547:15:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_data",
                      "scope": 6035,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 6012,
                        "name": "ElementaryTypeName",
                        "src": "11564:5:28"
                      }
                    ],
                    "id": 6013,
                    "name": "VariableDeclaration",
                    "src": "11564:18:28"
                  }
                ],
                "id": 6014,
                "name": "ParameterList",
                "src": "11534:49:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 6015,
                "name": "ParameterList",
                "src": "11601:0:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6094,
                              "type": "function (address,uint256)",
                              "value": "_mint"
                            },
                            "id": 6016,
                            "name": "Identifier",
                            "src": "11611:5:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6009,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 6017,
                            "name": "Identifier",
                            "src": "11617:2:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6011,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6018,
                            "name": "Identifier",
                            "src": "11621:7:28"
                          }
                        ],
                        "id": 6019,
                        "name": "FunctionCall",
                        "src": "11611:18:28"
                      }
                    ],
                    "id": 6020,
                    "name": "ExpressionStatement",
                    "src": "11611:18:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                                  "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 6021,
                            "name": "Identifier",
                            "src": "11639:7:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6324,
                                  "type": "function (address,address,uint256,bytes memory) returns (bool)",
                                  "value": "_checkOnERC721Received"
                                },
                                "id": 6022,
                                "name": "Identifier",
                                "src": "11647:22:28"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address"
                                        },
                                        "id": 6023,
                                        "name": "ElementaryTypeName",
                                        "src": "11670:7:28"
                                      }
                                    ],
                                    "id": 6024,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "11670:7:28"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 6025,
                                    "name": "Literal",
                                    "src": "11678:1:28"
                                  }
                                ],
                                "id": 6026,
                                "name": "FunctionCall",
                                "src": "11670:10:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6009,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 6027,
                                "name": "Identifier",
                                "src": "11682:2:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6011,
                                  "type": "uint256",
                                  "value": "tokenId"
                                },
                                "id": 6028,
                                "name": "Identifier",
                                "src": "11686:7:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6013,
                                  "type": "bytes memory",
                                  "value": "_data"
                                },
                                "id": 6029,
                                "name": "Identifier",
                                "src": "11695:5:28"
                              }
                            ],
                            "id": 6030,
                            "name": "FunctionCall",
                            "src": "11647:54:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\"",
                              "value": "ERC721: transfer to non ERC721Receiver implementer"
                            },
                            "id": 6031,
                            "name": "Literal",
                            "src": "11703:52:28"
                          }
                        ],
                        "id": 6032,
                        "name": "FunctionCall",
                        "src": "11639:117:28"
                      }
                    ],
                    "id": 6033,
                    "name": "ExpressionStatement",
                    "src": "11639:117:28"
                  }
                ],
                "id": 6034,
                "name": "Block",
                "src": "11601:162:28"
              }
            ],
            "id": 6035,
            "name": "FunctionDefinition",
            "src": "11516:247:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_mint",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Mints `tokenId` and transfers it to `to`.\n WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n Requirements:\n - `tokenId` must not exist.\n - `to` cannot be the zero address.\n Emits a {Transfer} event."
                },
                "id": 6036,
                "name": "StructuredDocumentation",
                "src": "11769:311:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "scope": 6094,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6037,
                        "name": "ElementaryTypeName",
                        "src": "12100:7:28"
                      }
                    ],
                    "id": 6038,
                    "name": "VariableDeclaration",
                    "src": "12100:10:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 6094,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 6039,
                        "name": "ElementaryTypeName",
                        "src": "12112:7:28"
                      }
                    ],
                    "id": 6040,
                    "name": "VariableDeclaration",
                    "src": "12112:15:28"
                  }
                ],
                "id": 6041,
                "name": "ParameterList",
                "src": "12099:29:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 6042,
                "name": "ParameterList",
                "src": "12146:0:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_8a66f4bb6512ffbfcc3db9b42318eb65f26ac15163eaa9a1e5cfa7bee9d1c7c6",
                                  "typeString": "literal_string \"ERC721: mint to the zero address\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 6043,
                            "name": "Identifier",
                            "src": "12156:7:28"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6038,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 6044,
                                "name": "Identifier",
                                "src": "12164:2:28"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address"
                                        },
                                        "id": 6045,
                                        "name": "ElementaryTypeName",
                                        "src": "12170:7:28"
                                      }
                                    ],
                                    "id": 6046,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "12170:7:28"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 6047,
                                    "name": "Literal",
                                    "src": "12178:1:28"
                                  }
                                ],
                                "id": 6048,
                                "name": "FunctionCall",
                                "src": "12170:10:28"
                              }
                            ],
                            "id": 6049,
                            "name": "BinaryOperation",
                            "src": "12164:16:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a206d696e7420746f20746865207a65726f2061646472657373",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: mint to the zero address\"",
                              "value": "ERC721: mint to the zero address"
                            },
                            "id": 6050,
                            "name": "Literal",
                            "src": "12182:34:28"
                          }
                        ],
                        "id": 6051,
                        "name": "FunctionCall",
                        "src": "12156:61:28"
                      }
                    ],
                    "id": 6052,
                    "name": "ExpressionStatement",
                    "src": "12156:61:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_2a63ce106ef95058ed21fd07c42a10f11dc5c32ac13a4e847923f7759f635d57",
                                  "typeString": "literal_string \"ERC721: token already minted\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 6053,
                            "name": "Identifier",
                            "src": "12227:7:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!",
                              "prefix": true,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5951,
                                      "type": "function (uint256) view returns (bool)",
                                      "value": "_exists"
                                    },
                                    "id": 6054,
                                    "name": "Identifier",
                                    "src": "12236:7:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6040,
                                      "type": "uint256",
                                      "value": "tokenId"
                                    },
                                    "id": 6055,
                                    "name": "Identifier",
                                    "src": "12244:7:28"
                                  }
                                ],
                                "id": 6056,
                                "name": "FunctionCall",
                                "src": "12236:16:28"
                              }
                            ],
                            "id": 6057,
                            "name": "UnaryOperation",
                            "src": "12235:17:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a20746f6b656e20616c7265616479206d696e746564",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: token already minted\"",
                              "value": "ERC721: token already minted"
                            },
                            "id": 6058,
                            "name": "Literal",
                            "src": "12254:30:28"
                          }
                        ],
                        "id": 6059,
                        "name": "FunctionCall",
                        "src": "12227:58:28"
                      }
                    ],
                    "id": 6060,
                    "name": "ExpressionStatement",
                    "src": "12227:58:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6357,
                              "type": "function (address,address,uint256)",
                              "value": "_beforeTokenTransfer"
                            },
                            "id": 6061,
                            "name": "Identifier",
                            "src": "12296:20:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 6062,
                                    "name": "ElementaryTypeName",
                                    "src": "12317:7:28"
                                  }
                                ],
                                "id": 6063,
                                "name": "ElementaryTypeNameExpression",
                                "src": "12317:7:28"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 6064,
                                "name": "Literal",
                                "src": "12325:1:28"
                              }
                            ],
                            "id": 6065,
                            "name": "FunctionCall",
                            "src": "12317:10:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6038,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 6066,
                            "name": "Identifier",
                            "src": "12329:2:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6040,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6067,
                            "name": "Identifier",
                            "src": "12333:7:28"
                          }
                        ],
                        "id": 6068,
                        "name": "FunctionCall",
                        "src": "12296:45:28"
                      }
                    ],
                    "id": 6069,
                    "name": "ExpressionStatement",
                    "src": "12296:45:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "add",
                              "referencedDeclaration": 7681,
                              "type": "function (struct EnumerableSet.UintSet storage pointer,uint256) returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct EnumerableSet.UintSet storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5473,
                                      "type": "mapping(address => struct EnumerableSet.UintSet storage ref)",
                                      "value": "_holderTokens"
                                    },
                                    "id": 6070,
                                    "name": "Identifier",
                                    "src": "12352:13:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6038,
                                      "type": "address",
                                      "value": "to"
                                    },
                                    "id": 6071,
                                    "name": "Identifier",
                                    "src": "12366:2:28"
                                  }
                                ],
                                "id": 6072,
                                "name": "IndexAccess",
                                "src": "12352:17:28"
                              }
                            ],
                            "id": 6073,
                            "name": "MemberAccess",
                            "src": "12352:21:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6040,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6074,
                            "name": "Identifier",
                            "src": "12374:7:28"
                          }
                        ],
                        "id": 6075,
                        "name": "FunctionCall",
                        "src": "12352:30:28"
                      }
                    ],
                    "id": 6076,
                    "name": "ExpressionStatement",
                    "src": "12352:30:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "set",
                              "referencedDeclaration": 7130,
                              "type": "function (struct EnumerableMap.UintToAddressMap storage pointer,uint256,address) returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5475,
                                  "type": "struct EnumerableMap.UintToAddressMap storage ref",
                                  "value": "_tokenOwners"
                                },
                                "id": 6077,
                                "name": "Identifier",
                                "src": "12393:12:28"
                              }
                            ],
                            "id": 6079,
                            "name": "MemberAccess",
                            "src": "12393:16:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6040,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6080,
                            "name": "Identifier",
                            "src": "12410:7:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6038,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 6081,
                            "name": "Identifier",
                            "src": "12419:2:28"
                          }
                        ],
                        "id": 6082,
                        "name": "FunctionCall",
                        "src": "12393:29:28"
                      }
                    ],
                    "id": 6083,
                    "name": "ExpressionStatement",
                    "src": "12393:29:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6400,
                              "type": "function (address,address,uint256)",
                              "value": "Transfer"
                            },
                            "id": 6084,
                            "name": "Identifier",
                            "src": "12438:8:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 6085,
                                    "name": "ElementaryTypeName",
                                    "src": "12447:7:28"
                                  }
                                ],
                                "id": 6086,
                                "name": "ElementaryTypeNameExpression",
                                "src": "12447:7:28"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 6087,
                                "name": "Literal",
                                "src": "12455:1:28"
                              }
                            ],
                            "id": 6088,
                            "name": "FunctionCall",
                            "src": "12447:10:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6038,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 6089,
                            "name": "Identifier",
                            "src": "12459:2:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6040,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6090,
                            "name": "Identifier",
                            "src": "12463:7:28"
                          }
                        ],
                        "id": 6091,
                        "name": "FunctionCall",
                        "src": "12438:33:28"
                      }
                    ],
                    "id": 6092,
                    "name": "EmitStatement",
                    "src": "12433:38:28"
                  }
                ],
                "id": 6093,
                "name": "Block",
                "src": "12146:332:28"
              }
            ],
            "id": 6094,
            "name": "FunctionDefinition",
            "src": "12085:393:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_burn",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Destroys `tokenId`.\n The approval is cleared when the token is burned.\n Requirements:\n - `tokenId` must exist.\n Emits a {Transfer} event."
                },
                "id": 6095,
                "name": "StructuredDocumentation",
                "src": "12484:206:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 6162,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 6096,
                        "name": "ElementaryTypeName",
                        "src": "12710:7:28"
                      }
                    ],
                    "id": 6097,
                    "name": "VariableDeclaration",
                    "src": "12710:15:28"
                  }
                ],
                "id": 6098,
                "name": "ParameterList",
                "src": "12709:17:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 6099,
                "name": "ParameterList",
                "src": "12744:0:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        6101
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "owner",
                          "scope": 6161,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 6100,
                            "name": "ElementaryTypeName",
                            "src": "12754:7:28"
                          }
                        ],
                        "id": 6101,
                        "name": "VariableDeclaration",
                        "src": "12754:13:28"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5575,
                              "type": "function (uint256) view returns (address)",
                              "value": "ownerOf"
                            },
                            "id": 6102,
                            "name": "Identifier",
                            "src": "12770:7:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6097,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6103,
                            "name": "Identifier",
                            "src": "12778:7:28"
                          }
                        ],
                        "id": 6104,
                        "name": "FunctionCall",
                        "src": "12770:16:28"
                      }
                    ],
                    "id": 6105,
                    "name": "VariableDeclarationStatement",
                    "src": "12754:32:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6357,
                              "type": "function (address,address,uint256)",
                              "value": "_beforeTokenTransfer"
                            },
                            "id": 6106,
                            "name": "Identifier",
                            "src": "12797:20:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6101,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 6107,
                            "name": "Identifier",
                            "src": "12818:5:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 6108,
                                    "name": "ElementaryTypeName",
                                    "src": "12825:7:28"
                                  }
                                ],
                                "id": 6109,
                                "name": "ElementaryTypeNameExpression",
                                "src": "12825:7:28"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 6110,
                                "name": "Literal",
                                "src": "12833:1:28"
                              }
                            ],
                            "id": 6111,
                            "name": "FunctionCall",
                            "src": "12825:10:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6097,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6112,
                            "name": "Identifier",
                            "src": "12837:7:28"
                          }
                        ],
                        "id": 6113,
                        "name": "FunctionCall",
                        "src": "12797:48:28"
                      }
                    ],
                    "id": 6114,
                    "name": "ExpressionStatement",
                    "src": "12797:48:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6346,
                              "type": "function (address,uint256)",
                              "value": "_approve"
                            },
                            "id": 6115,
                            "name": "Identifier",
                            "src": "12883:8:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 6116,
                                    "name": "ElementaryTypeName",
                                    "src": "12892:7:28"
                                  }
                                ],
                                "id": 6117,
                                "name": "ElementaryTypeNameExpression",
                                "src": "12892:7:28"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 6118,
                                "name": "Literal",
                                "src": "12900:1:28"
                              }
                            ],
                            "id": 6119,
                            "name": "FunctionCall",
                            "src": "12892:10:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6097,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6120,
                            "name": "Identifier",
                            "src": "12904:7:28"
                          }
                        ],
                        "id": 6121,
                        "name": "FunctionCall",
                        "src": "12883:29:28"
                      }
                    ],
                    "id": 6122,
                    "name": "ExpressionStatement",
                    "src": "12883:29:28"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!=",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bytes storage pointer",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_string_storage",
                                          "typeString": "string storage ref"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes storage pointer)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "bytes"
                                        },
                                        "id": 6123,
                                        "name": "ElementaryTypeName",
                                        "src": "12962:5:28"
                                      }
                                    ],
                                    "id": 6124,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "12962:5:28"
                                  },
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "string storage ref"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5493,
                                          "type": "mapping(uint256 => string storage ref)",
                                          "value": "_tokenURIs"
                                        },
                                        "id": 6125,
                                        "name": "Identifier",
                                        "src": "12968:10:28"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 6097,
                                          "type": "uint256",
                                          "value": "tokenId"
                                        },
                                        "id": 6126,
                                        "name": "Identifier",
                                        "src": "12979:7:28"
                                      }
                                    ],
                                    "id": 6127,
                                    "name": "IndexAccess",
                                    "src": "12968:19:28"
                                  }
                                ],
                                "id": 6128,
                                "name": "FunctionCall",
                                "src": "12962:26:28"
                              }
                            ],
                            "id": 6129,
                            "name": "MemberAccess",
                            "src": "12962:33:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 6130,
                            "name": "Literal",
                            "src": "12999:1:28"
                          }
                        ],
                        "id": 6131,
                        "name": "BinaryOperation",
                        "src": "12962:38:28"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "delete",
                                  "prefix": true,
                                  "type": "tuple()"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "type": "string storage ref"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 5493,
                                          "type": "mapping(uint256 => string storage ref)",
                                          "value": "_tokenURIs"
                                        },
                                        "id": 6132,
                                        "name": "Identifier",
                                        "src": "13023:10:28"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 6097,
                                          "type": "uint256",
                                          "value": "tokenId"
                                        },
                                        "id": 6133,
                                        "name": "Identifier",
                                        "src": "13034:7:28"
                                      }
                                    ],
                                    "id": 6134,
                                    "name": "IndexAccess",
                                    "src": "13023:19:28"
                                  }
                                ],
                                "id": 6135,
                                "name": "UnaryOperation",
                                "src": "13016:26:28"
                              }
                            ],
                            "id": 6136,
                            "name": "ExpressionStatement",
                            "src": "13016:26:28"
                          }
                        ],
                        "id": 6137,
                        "name": "Block",
                        "src": "13002:51:28"
                      }
                    ],
                    "id": 6138,
                    "name": "IfStatement",
                    "src": "12958:95:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "remove",
                              "referencedDeclaration": 7701,
                              "type": "function (struct EnumerableSet.UintSet storage pointer,uint256) returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct EnumerableSet.UintSet storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5473,
                                      "type": "mapping(address => struct EnumerableSet.UintSet storage ref)",
                                      "value": "_holderTokens"
                                    },
                                    "id": 6139,
                                    "name": "Identifier",
                                    "src": "13063:13:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6101,
                                      "type": "address",
                                      "value": "owner"
                                    },
                                    "id": 6140,
                                    "name": "Identifier",
                                    "src": "13077:5:28"
                                  }
                                ],
                                "id": 6141,
                                "name": "IndexAccess",
                                "src": "13063:20:28"
                              }
                            ],
                            "id": 6142,
                            "name": "MemberAccess",
                            "src": "13063:27:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6097,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6143,
                            "name": "Identifier",
                            "src": "13091:7:28"
                          }
                        ],
                        "id": 6144,
                        "name": "FunctionCall",
                        "src": "13063:36:28"
                      }
                    ],
                    "id": 6145,
                    "name": "ExpressionStatement",
                    "src": "13063:36:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "remove",
                              "referencedDeclaration": 7150,
                              "type": "function (struct EnumerableMap.UintToAddressMap storage pointer,uint256) returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5475,
                                  "type": "struct EnumerableMap.UintToAddressMap storage ref",
                                  "value": "_tokenOwners"
                                },
                                "id": 6146,
                                "name": "Identifier",
                                "src": "13110:12:28"
                              }
                            ],
                            "id": 6148,
                            "name": "MemberAccess",
                            "src": "13110:19:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6097,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6149,
                            "name": "Identifier",
                            "src": "13130:7:28"
                          }
                        ],
                        "id": 6150,
                        "name": "FunctionCall",
                        "src": "13110:28:28"
                      }
                    ],
                    "id": 6151,
                    "name": "ExpressionStatement",
                    "src": "13110:28:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6400,
                              "type": "function (address,address,uint256)",
                              "value": "Transfer"
                            },
                            "id": 6152,
                            "name": "Identifier",
                            "src": "13154:8:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6101,
                              "type": "address",
                              "value": "owner"
                            },
                            "id": 6153,
                            "name": "Identifier",
                            "src": "13163:5:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 6154,
                                    "name": "ElementaryTypeName",
                                    "src": "13170:7:28"
                                  }
                                ],
                                "id": 6155,
                                "name": "ElementaryTypeNameExpression",
                                "src": "13170:7:28"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 6156,
                                "name": "Literal",
                                "src": "13178:1:28"
                              }
                            ],
                            "id": 6157,
                            "name": "FunctionCall",
                            "src": "13170:10:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6097,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6158,
                            "name": "Identifier",
                            "src": "13182:7:28"
                          }
                        ],
                        "id": 6159,
                        "name": "FunctionCall",
                        "src": "13154:36:28"
                      }
                    ],
                    "id": 6160,
                    "name": "EmitStatement",
                    "src": "13149:41:28"
                  }
                ],
                "id": 6161,
                "name": "Block",
                "src": "12744:453:28"
              }
            ],
            "id": 6162,
            "name": "FunctionDefinition",
            "src": "12695:502:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_transfer",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Transfers `tokenId` from `from` to `to`.\n  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n Requirements:\n - `to` cannot be the zero address.\n - `tokenId` token must be owned by `from`.\n Emits a {Transfer} event."
                },
                "id": 6163,
                "name": "StructuredDocumentation",
                "src": "13203:313:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "from",
                      "scope": 6233,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6164,
                        "name": "ElementaryTypeName",
                        "src": "13540:7:28"
                      }
                    ],
                    "id": 6165,
                    "name": "VariableDeclaration",
                    "src": "13540:12:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "scope": 6233,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6166,
                        "name": "ElementaryTypeName",
                        "src": "13554:7:28"
                      }
                    ],
                    "id": 6167,
                    "name": "VariableDeclaration",
                    "src": "13554:10:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 6233,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 6168,
                        "name": "ElementaryTypeName",
                        "src": "13566:7:28"
                      }
                    ],
                    "id": 6169,
                    "name": "VariableDeclaration",
                    "src": "13566:15:28"
                  }
                ],
                "id": 6170,
                "name": "ParameterList",
                "src": "13539:43:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 6171,
                "name": "ParameterList",
                "src": "13600:0:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_a01073130a885d6c1c1af6ac75fc3b1c4f9403c235362962bbf528e2bd87d950",
                                  "typeString": "literal_string \"ERC721: transfer of token that is not own\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 6172,
                            "name": "Identifier",
                            "src": "13610:7:28"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5575,
                                      "type": "function (uint256) view returns (address)",
                                      "value": "ownerOf"
                                    },
                                    "id": 6173,
                                    "name": "Identifier",
                                    "src": "13618:7:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6169,
                                      "type": "uint256",
                                      "value": "tokenId"
                                    },
                                    "id": 6174,
                                    "name": "Identifier",
                                    "src": "13626:7:28"
                                  }
                                ],
                                "id": 6175,
                                "name": "FunctionCall",
                                "src": "13618:16:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6165,
                                  "type": "address",
                                  "value": "from"
                                },
                                "id": 6176,
                                "name": "Identifier",
                                "src": "13638:4:28"
                              }
                            ],
                            "id": 6177,
                            "name": "BinaryOperation",
                            "src": "13618:24:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: transfer of token that is not own\"",
                              "value": "ERC721: transfer of token that is not own"
                            },
                            "id": 6178,
                            "name": "Literal",
                            "src": "13644:43:28"
                          }
                        ],
                        "id": 6179,
                        "name": "FunctionCall",
                        "src": "13610:78:28"
                      }
                    ],
                    "id": 6180,
                    "name": "ExpressionStatement",
                    "src": "13610:78:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_455fea98ea03c32d7dd1a6f1426917d80529bf47b3ccbde74e7206e889e709f4",
                                  "typeString": "literal_string \"ERC721: transfer to the zero address\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 6181,
                            "name": "Identifier",
                            "src": "13698:7:28"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6167,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 6182,
                                "name": "Identifier",
                                "src": "13706:2:28"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "name": "address"
                                        },
                                        "id": 6183,
                                        "name": "ElementaryTypeName",
                                        "src": "13712:7:28"
                                      }
                                    ],
                                    "id": 6184,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "13712:7:28"
                                  },
                                  {
                                    "attributes": {
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 6185,
                                    "name": "Literal",
                                    "src": "13720:1:28"
                                  }
                                ],
                                "id": 6186,
                                "name": "FunctionCall",
                                "src": "13712:10:28"
                              }
                            ],
                            "id": 6187,
                            "name": "BinaryOperation",
                            "src": "13706:16:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a207472616e7366657220746f20746865207a65726f2061646472657373",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: transfer to the zero address\"",
                              "value": "ERC721: transfer to the zero address"
                            },
                            "id": 6188,
                            "name": "Literal",
                            "src": "13724:38:28"
                          }
                        ],
                        "id": 6189,
                        "name": "FunctionCall",
                        "src": "13698:65:28"
                      }
                    ],
                    "id": 6190,
                    "name": "ExpressionStatement",
                    "src": "13698:65:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6357,
                              "type": "function (address,address,uint256)",
                              "value": "_beforeTokenTransfer"
                            },
                            "id": 6191,
                            "name": "Identifier",
                            "src": "13774:20:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6165,
                              "type": "address",
                              "value": "from"
                            },
                            "id": 6192,
                            "name": "Identifier",
                            "src": "13795:4:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6167,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 6193,
                            "name": "Identifier",
                            "src": "13801:2:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6169,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6194,
                            "name": "Identifier",
                            "src": "13805:7:28"
                          }
                        ],
                        "id": 6195,
                        "name": "FunctionCall",
                        "src": "13774:39:28"
                      }
                    ],
                    "id": 6196,
                    "name": "ExpressionStatement",
                    "src": "13774:39:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6346,
                              "type": "function (address,uint256)",
                              "value": "_approve"
                            },
                            "id": 6197,
                            "name": "Identifier",
                            "src": "13875:8:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 6198,
                                    "name": "ElementaryTypeName",
                                    "src": "13884:7:28"
                                  }
                                ],
                                "id": 6199,
                                "name": "ElementaryTypeNameExpression",
                                "src": "13884:7:28"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 6200,
                                "name": "Literal",
                                "src": "13892:1:28"
                              }
                            ],
                            "id": 6201,
                            "name": "FunctionCall",
                            "src": "13884:10:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6169,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6202,
                            "name": "Identifier",
                            "src": "13896:7:28"
                          }
                        ],
                        "id": 6203,
                        "name": "FunctionCall",
                        "src": "13875:29:28"
                      }
                    ],
                    "id": 6204,
                    "name": "ExpressionStatement",
                    "src": "13875:29:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "remove",
                              "referencedDeclaration": 7701,
                              "type": "function (struct EnumerableSet.UintSet storage pointer,uint256) returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct EnumerableSet.UintSet storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5473,
                                      "type": "mapping(address => struct EnumerableSet.UintSet storage ref)",
                                      "value": "_holderTokens"
                                    },
                                    "id": 6205,
                                    "name": "Identifier",
                                    "src": "13915:13:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6165,
                                      "type": "address",
                                      "value": "from"
                                    },
                                    "id": 6206,
                                    "name": "Identifier",
                                    "src": "13929:4:28"
                                  }
                                ],
                                "id": 6207,
                                "name": "IndexAccess",
                                "src": "13915:19:28"
                              }
                            ],
                            "id": 6208,
                            "name": "MemberAccess",
                            "src": "13915:26:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6169,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6209,
                            "name": "Identifier",
                            "src": "13942:7:28"
                          }
                        ],
                        "id": 6210,
                        "name": "FunctionCall",
                        "src": "13915:35:28"
                      }
                    ],
                    "id": 6211,
                    "name": "ExpressionStatement",
                    "src": "13915:35:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "add",
                              "referencedDeclaration": 7681,
                              "type": "function (struct EnumerableSet.UintSet storage pointer,uint256) returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct EnumerableSet.UintSet storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 5473,
                                      "type": "mapping(address => struct EnumerableSet.UintSet storage ref)",
                                      "value": "_holderTokens"
                                    },
                                    "id": 6212,
                                    "name": "Identifier",
                                    "src": "13960:13:28"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6167,
                                      "type": "address",
                                      "value": "to"
                                    },
                                    "id": 6213,
                                    "name": "Identifier",
                                    "src": "13974:2:28"
                                  }
                                ],
                                "id": 6214,
                                "name": "IndexAccess",
                                "src": "13960:17:28"
                              }
                            ],
                            "id": 6215,
                            "name": "MemberAccess",
                            "src": "13960:21:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6169,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6216,
                            "name": "Identifier",
                            "src": "13982:7:28"
                          }
                        ],
                        "id": 6217,
                        "name": "FunctionCall",
                        "src": "13960:30:28"
                      }
                    ],
                    "id": 6218,
                    "name": "ExpressionStatement",
                    "src": "13960:30:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "set",
                              "referencedDeclaration": 7130,
                              "type": "function (struct EnumerableMap.UintToAddressMap storage pointer,uint256,address) returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5475,
                                  "type": "struct EnumerableMap.UintToAddressMap storage ref",
                                  "value": "_tokenOwners"
                                },
                                "id": 6219,
                                "name": "Identifier",
                                "src": "14001:12:28"
                              }
                            ],
                            "id": 6221,
                            "name": "MemberAccess",
                            "src": "14001:16:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6169,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6222,
                            "name": "Identifier",
                            "src": "14018:7:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6167,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 6223,
                            "name": "Identifier",
                            "src": "14027:2:28"
                          }
                        ],
                        "id": 6224,
                        "name": "FunctionCall",
                        "src": "14001:29:28"
                      }
                    ],
                    "id": 6225,
                    "name": "ExpressionStatement",
                    "src": "14001:29:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6400,
                              "type": "function (address,address,uint256)",
                              "value": "Transfer"
                            },
                            "id": 6226,
                            "name": "Identifier",
                            "src": "14046:8:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6165,
                              "type": "address",
                              "value": "from"
                            },
                            "id": 6227,
                            "name": "Identifier",
                            "src": "14055:4:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6167,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 6228,
                            "name": "Identifier",
                            "src": "14061:2:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6169,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6229,
                            "name": "Identifier",
                            "src": "14065:7:28"
                          }
                        ],
                        "id": 6230,
                        "name": "FunctionCall",
                        "src": "14046:27:28"
                      }
                    ],
                    "id": 6231,
                    "name": "EmitStatement",
                    "src": "14041:32:28"
                  }
                ],
                "id": 6232,
                "name": "Block",
                "src": "13600:480:28"
              }
            ],
            "id": 6233,
            "name": "FunctionDefinition",
            "src": "13521:559:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_setTokenURI",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n Requirements:\n - `tokenId` must exist."
                },
                "id": 6234,
                "name": "StructuredDocumentation",
                "src": "14086:136:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 6255,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 6235,
                        "name": "ElementaryTypeName",
                        "src": "14249:7:28"
                      }
                    ],
                    "id": 6236,
                    "name": "VariableDeclaration",
                    "src": "14249:15:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_tokenURI",
                      "scope": 6255,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "string",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string"
                        },
                        "id": 6237,
                        "name": "ElementaryTypeName",
                        "src": "14266:6:28"
                      }
                    ],
                    "id": 6238,
                    "name": "VariableDeclaration",
                    "src": "14266:23:28"
                  }
                ],
                "id": 6239,
                "name": "ParameterList",
                "src": "14248:42:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 6240,
                "name": "ParameterList",
                "src": "14308:0:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_94be4a260caaeac1b145f03ffa2e70bc612b64982d04f24073aaf3a5f9009978",
                                  "typeString": "literal_string \"ERC721Metadata: URI set of nonexistent token\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 6241,
                            "name": "Identifier",
                            "src": "14318:7:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5951,
                                  "type": "function (uint256) view returns (bool)",
                                  "value": "_exists"
                                },
                                "id": 6242,
                                "name": "Identifier",
                                "src": "14326:7:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6236,
                                  "type": "uint256",
                                  "value": "tokenId"
                                },
                                "id": 6243,
                                "name": "Identifier",
                                "src": "14334:7:28"
                              }
                            ],
                            "id": 6244,
                            "name": "FunctionCall",
                            "src": "14326:16:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721Metadata: URI set of nonexistent token\"",
                              "value": "ERC721Metadata: URI set of nonexistent token"
                            },
                            "id": 6245,
                            "name": "Literal",
                            "src": "14344:46:28"
                          }
                        ],
                        "id": 6246,
                        "name": "FunctionCall",
                        "src": "14318:73:28"
                      }
                    ],
                    "id": 6247,
                    "name": "ExpressionStatement",
                    "src": "14318:73:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "string storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "string storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5493,
                                  "type": "mapping(uint256 => string storage ref)",
                                  "value": "_tokenURIs"
                                },
                                "id": 6248,
                                "name": "Identifier",
                                "src": "14401:10:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6236,
                                  "type": "uint256",
                                  "value": "tokenId"
                                },
                                "id": 6249,
                                "name": "Identifier",
                                "src": "14412:7:28"
                              }
                            ],
                            "id": 6250,
                            "name": "IndexAccess",
                            "src": "14401:19:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6238,
                              "type": "string memory",
                              "value": "_tokenURI"
                            },
                            "id": 6251,
                            "name": "Identifier",
                            "src": "14423:9:28"
                          }
                        ],
                        "id": 6252,
                        "name": "Assignment",
                        "src": "14401:31:28"
                      }
                    ],
                    "id": 6253,
                    "name": "ExpressionStatement",
                    "src": "14401:31:28"
                  }
                ],
                "id": 6254,
                "name": "Block",
                "src": "14308:131:28"
              }
            ],
            "id": 6255,
            "name": "FunctionDefinition",
            "src": "14227:212:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_setBaseURI",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Internal function to set the base URI for all token IDs. It is\n automatically added as a prefix to the value returned in {tokenURI},\n or to the token ID if {tokenURI} is empty."
                },
                "id": 6256,
                "name": "StructuredDocumentation",
                "src": "14445:212:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "baseURI_",
                      "scope": 6266,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "string",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string"
                        },
                        "id": 6257,
                        "name": "ElementaryTypeName",
                        "src": "14683:6:28"
                      }
                    ],
                    "id": 6258,
                    "name": "VariableDeclaration",
                    "src": "14683:22:28"
                  }
                ],
                "id": 6259,
                "name": "ParameterList",
                "src": "14682:24:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 6260,
                "name": "ParameterList",
                "src": "14724:0:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "string storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 5495,
                              "type": "string storage ref",
                              "value": "_baseURI"
                            },
                            "id": 6261,
                            "name": "Identifier",
                            "src": "14734:8:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6258,
                              "type": "string memory",
                              "value": "baseURI_"
                            },
                            "id": 6262,
                            "name": "Identifier",
                            "src": "14745:8:28"
                          }
                        ],
                        "id": 6263,
                        "name": "Assignment",
                        "src": "14734:19:28"
                      }
                    ],
                    "id": 6264,
                    "name": "ExpressionStatement",
                    "src": "14734:19:28"
                  }
                ],
                "id": 6265,
                "name": "Block",
                "src": "14724:36:28"
              }
            ],
            "id": 6266,
            "name": "FunctionDefinition",
            "src": "14662:98:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_checkOnERC721Received",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n The call is not executed if the target address is not a contract.\n @param from address representing the previous owner of the given token ID\n @param to target address that will receive the tokens\n @param tokenId uint256 ID of the token to be transferred\n @param _data bytes optional data to send along with the call\n @return bool whether the call correctly returned the expected magic value"
                },
                "id": 6267,
                "name": "StructuredDocumentation",
                "src": "14766:542:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "from",
                      "scope": 6324,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6268,
                        "name": "ElementaryTypeName",
                        "src": "15345:7:28"
                      }
                    ],
                    "id": 6269,
                    "name": "VariableDeclaration",
                    "src": "15345:12:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "scope": 6324,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6270,
                        "name": "ElementaryTypeName",
                        "src": "15359:7:28"
                      }
                    ],
                    "id": 6271,
                    "name": "VariableDeclaration",
                    "src": "15359:10:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 6324,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 6272,
                        "name": "ElementaryTypeName",
                        "src": "15371:7:28"
                      }
                    ],
                    "id": 6273,
                    "name": "VariableDeclaration",
                    "src": "15371:15:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_data",
                      "scope": 6324,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 6274,
                        "name": "ElementaryTypeName",
                        "src": "15388:5:28"
                      }
                    ],
                    "id": 6275,
                    "name": "VariableDeclaration",
                    "src": "15388:18:28"
                  }
                ],
                "id": 6276,
                "name": "ParameterList",
                "src": "15344:63:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 6324,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 6277,
                        "name": "ElementaryTypeName",
                        "src": "15433:4:28"
                      }
                    ],
                    "id": 6278,
                    "name": "VariableDeclaration",
                    "src": "15433:4:28"
                  }
                ],
                "id": 6279,
                "name": "ParameterList",
                "src": "15432:6:28"
              },
              {
                "children": [
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!",
                          "prefix": true,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "isContract",
                                  "referencedDeclaration": 6597,
                                  "type": "function (address) view returns (bool)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 6271,
                                      "type": "address",
                                      "value": "to"
                                    },
                                    "id": 6280,
                                    "name": "Identifier",
                                    "src": "15458:2:28"
                                  }
                                ],
                                "id": 6281,
                                "name": "MemberAccess",
                                "src": "15458:13:28"
                              }
                            ],
                            "id": 6282,
                            "name": "FunctionCall",
                            "src": "15458:15:28"
                          }
                        ],
                        "id": 6283,
                        "name": "UnaryOperation",
                        "src": "15457:16:28"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 6279
                            },
                            "children": [
                              {
                                "attributes": {
                                  "hexvalue": "74727565",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "true"
                                },
                                "id": 6284,
                                "name": "Literal",
                                "src": "15496:4:28"
                              }
                            ],
                            "id": 6285,
                            "name": "Return",
                            "src": "15489:11:28"
                          }
                        ],
                        "id": 6286,
                        "name": "Block",
                        "src": "15475:36:28"
                      }
                    ],
                    "id": 6287,
                    "name": "IfStatement",
                    "src": "15453:58:28"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        6289
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "returndata",
                          "scope": 6323,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "bytes",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes",
                              "type": "bytes"
                            },
                            "id": 6288,
                            "name": "ElementaryTypeName",
                            "src": "15520:5:28"
                          }
                        ],
                        "id": 6289,
                        "name": "VariableDeclaration",
                        "src": "15520:23:28"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes memory",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_1e766a06da43a53d0f4c380e06e5a342e14d5af1bf8501996c844905530ca84e",
                                  "typeString": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\""
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "functionCall",
                              "referencedDeclaration": 6668,
                              "type": "function (address,bytes memory,string memory) returns (bytes memory)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6271,
                                  "type": "address",
                                  "value": "to"
                                },
                                "id": 6290,
                                "name": "Identifier",
                                "src": "15546:2:28"
                              }
                            ],
                            "id": 6291,
                            "name": "MemberAccess",
                            "src": "15546:15:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "bytes memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes4",
                                      "typeString": "bytes4"
                                    },
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "member_name": "encodeWithSelector",
                                  "type": "function (bytes4) pure returns (bytes memory)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4294967295,
                                      "type": "abi",
                                      "value": "abi"
                                    },
                                    "id": 6292,
                                    "name": "Identifier",
                                    "src": "15562:3:28"
                                  }
                                ],
                                "id": 6293,
                                "name": "MemberAccess",
                                "src": "15562:22:28"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "selector",
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "onERC721Received",
                                      "referencedDeclaration": 6576,
                                      "type": "function (address,address,uint256,bytes memory) external returns (bytes4)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "contract IERC721Receiver",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_address",
                                                  "typeString": "address"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 6577,
                                              "type": "type(contract IERC721Receiver)",
                                              "value": "IERC721Receiver"
                                            },
                                            "id": 6294,
                                            "name": "Identifier",
                                            "src": "15598:15:28"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 6271,
                                              "type": "address",
                                              "value": "to"
                                            },
                                            "id": 6295,
                                            "name": "Identifier",
                                            "src": "15614:2:28"
                                          }
                                        ],
                                        "id": 6296,
                                        "name": "FunctionCall",
                                        "src": "15598:19:28"
                                      }
                                    ],
                                    "id": 6297,
                                    "name": "MemberAccess",
                                    "src": "15598:36:28"
                                  }
                                ],
                                "id": 6298,
                                "name": "MemberAccess",
                                "src": "15598:45:28"
                              },
                              {
                                "attributes": {
                                  "arguments": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address payable",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        null
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4312,
                                      "type": "function () view returns (address payable)",
                                      "value": "_msgSender"
                                    },
                                    "id": 6299,
                                    "name": "Identifier",
                                    "src": "15657:10:28"
                                  }
                                ],
                                "id": 6300,
                                "name": "FunctionCall",
                                "src": "15657:12:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6269,
                                  "type": "address",
                                  "value": "from"
                                },
                                "id": 6301,
                                "name": "Identifier",
                                "src": "15683:4:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6273,
                                  "type": "uint256",
                                  "value": "tokenId"
                                },
                                "id": 6302,
                                "name": "Identifier",
                                "src": "15701:7:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6275,
                                  "type": "bytes memory",
                                  "value": "_data"
                                },
                                "id": 6303,
                                "name": "Identifier",
                                "src": "15722:5:28"
                              }
                            ],
                            "id": 6304,
                            "name": "FunctionCall",
                            "src": "15562:175:28"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"ERC721: transfer to non ERC721Receiver implementer\"",
                              "value": "ERC721: transfer to non ERC721Receiver implementer"
                            },
                            "id": 6305,
                            "name": "Literal",
                            "src": "15739:52:28"
                          }
                        ],
                        "id": 6306,
                        "name": "FunctionCall",
                        "src": "15546:246:28"
                      }
                    ],
                    "id": 6307,
                    "name": "VariableDeclarationStatement",
                    "src": "15520:272:28"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        6309
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "retval",
                          "scope": 6323,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "bytes4",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes4",
                              "type": "bytes4"
                            },
                            "id": 6308,
                            "name": "ElementaryTypeName",
                            "src": "15802:6:28"
                          }
                        ],
                        "id": 6309,
                        "name": "VariableDeclaration",
                        "src": "15802:13:28"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "bytes4",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                },
                                {
                                  "typeIdentifier": "t_type$_t_bytes4_$",
                                  "typeString": "type(bytes4)"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "member_name": "decode",
                              "type": "function () pure"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294967295,
                                  "type": "abi",
                                  "value": "abi"
                                },
                                "id": 6310,
                                "name": "Identifier",
                                "src": "15818:3:28"
                              }
                            ],
                            "id": 6311,
                            "name": "MemberAccess",
                            "src": "15818:10:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6289,
                              "type": "bytes memory",
                              "value": "returndata"
                            },
                            "id": 6312,
                            "name": "Identifier",
                            "src": "15829:10:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "type": "type(bytes4)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes4)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes4"
                                    },
                                    "id": 6313,
                                    "name": "ElementaryTypeName",
                                    "src": "15842:6:28"
                                  }
                                ],
                                "id": 6314,
                                "name": "ElementaryTypeNameExpression",
                                "src": "15842:6:28"
                              }
                            ],
                            "id": 6315,
                            "name": "TupleExpression",
                            "src": "15841:8:28"
                          }
                        ],
                        "id": 6316,
                        "name": "FunctionCall",
                        "src": "15818:32:28"
                      }
                    ],
                    "id": 6317,
                    "name": "VariableDeclarationStatement",
                    "src": "15802:48:28"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 6279
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6309,
                                  "type": "bytes4",
                                  "value": "retval"
                                },
                                "id": 6318,
                                "name": "Identifier",
                                "src": "15868:6:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5469,
                                  "type": "bytes4",
                                  "value": "_ERC721_RECEIVED"
                                },
                                "id": 6319,
                                "name": "Identifier",
                                "src": "15878:16:28"
                              }
                            ],
                            "id": 6320,
                            "name": "BinaryOperation",
                            "src": "15868:26:28"
                          }
                        ],
                        "id": 6321,
                        "name": "TupleExpression",
                        "src": "15867:28:28"
                      }
                    ],
                    "id": 6322,
                    "name": "Return",
                    "src": "15860:35:28"
                  }
                ],
                "id": 6323,
                "name": "Block",
                "src": "15443:459:28"
              }
            ],
            "id": 6324,
            "name": "FunctionDefinition",
            "src": "15313:589:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_approve",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "private"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "scope": 6346,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6325,
                        "name": "ElementaryTypeName",
                        "src": "15926:7:28"
                      }
                    ],
                    "id": 6326,
                    "name": "VariableDeclaration",
                    "src": "15926:10:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 6346,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 6327,
                        "name": "ElementaryTypeName",
                        "src": "15938:7:28"
                      }
                    ],
                    "id": 6328,
                    "name": "VariableDeclaration",
                    "src": "15938:15:28"
                  }
                ],
                "id": 6329,
                "name": "ParameterList",
                "src": "15925:29:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 6330,
                "name": "ParameterList",
                "src": "15963:0:28"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5479,
                                  "type": "mapping(uint256 => address)",
                                  "value": "_tokenApprovals"
                                },
                                "id": 6331,
                                "name": "Identifier",
                                "src": "15973:15:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6328,
                                  "type": "uint256",
                                  "value": "tokenId"
                                },
                                "id": 6332,
                                "name": "Identifier",
                                "src": "15989:7:28"
                              }
                            ],
                            "id": 6333,
                            "name": "IndexAccess",
                            "src": "15973:24:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6326,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 6334,
                            "name": "Identifier",
                            "src": "16000:2:28"
                          }
                        ],
                        "id": 6335,
                        "name": "Assignment",
                        "src": "15973:29:28"
                      }
                    ],
                    "id": 6336,
                    "name": "ExpressionStatement",
                    "src": "15973:29:28"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6409,
                              "type": "function (address,address,uint256)",
                              "value": "Approval"
                            },
                            "id": 6337,
                            "name": "Identifier",
                            "src": "16017:8:28"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 5575,
                                  "type": "function (uint256) view returns (address)",
                                  "value": "ownerOf"
                                },
                                "id": 6338,
                                "name": "Identifier",
                                "src": "16026:7:28"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 6328,
                                  "type": "uint256",
                                  "value": "tokenId"
                                },
                                "id": 6339,
                                "name": "Identifier",
                                "src": "16034:7:28"
                              }
                            ],
                            "id": 6340,
                            "name": "FunctionCall",
                            "src": "16026:16:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6326,
                              "type": "address",
                              "value": "to"
                            },
                            "id": 6341,
                            "name": "Identifier",
                            "src": "16044:2:28"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 6328,
                              "type": "uint256",
                              "value": "tokenId"
                            },
                            "id": 6342,
                            "name": "Identifier",
                            "src": "16048:7:28"
                          }
                        ],
                        "id": 6343,
                        "name": "FunctionCall",
                        "src": "16017:39:28"
                      }
                    ],
                    "id": 6344,
                    "name": "EmitStatement",
                    "src": "16012:44:28"
                  }
                ],
                "id": 6345,
                "name": "Block",
                "src": "15963:100:28"
              }
            ],
            "id": 6346,
            "name": "FunctionDefinition",
            "src": "15908:155:28"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_beforeTokenTransfer",
              "scope": 6358,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": " @dev Hook that is called before any token transfer. This includes minting\n and burning.\n Calling conditions:\n - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n transferred to `to`.\n - When `from` is zero, `tokenId` will be minted for `to`.\n - When `to` is zero, ``from``'s `tokenId` will be burned.\n - `from` cannot be the zero address.\n - `to` cannot be the zero address.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
                },
                "id": 6347,
                "name": "StructuredDocumentation",
                "src": "16069:585:28"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "from",
                      "scope": 6357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6348,
                        "name": "ElementaryTypeName",
                        "src": "16689:7:28"
                      }
                    ],
                    "id": 6349,
                    "name": "VariableDeclaration",
                    "src": "16689:12:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "to",
                      "scope": 6357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 6350,
                        "name": "ElementaryTypeName",
                        "src": "16703:7:28"
                      }
                    ],
                    "id": 6351,
                    "name": "VariableDeclaration",
                    "src": "16703:10:28"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "tokenId",
                      "scope": 6357,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 6352,
                        "name": "ElementaryTypeName",
                        "src": "16715:7:28"
                      }
                    ],
                    "id": 6353,
                    "name": "VariableDeclaration",
                    "src": "16715:15:28"
                  }
                ],
                "id": 6354,
                "name": "ParameterList",
                "src": "16688:43:28"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 6355,
                "name": "ParameterList",
                "src": "16749:0:28"
              },
              {
                "attributes": {
                  "statements": [
                    null
                  ]
                },
                "children": [],
                "id": 6356,
                "name": "Block",
                "src": "16749:3:28"
              }
            ],
            "id": 6357,
            "name": "FunctionDefinition",
            "src": "16659:93:28"
          }
        ],
        "id": 6358,
        "name": "ContractDefinition",
        "src": "569:16185:28"
      }
    ],
    "id": 6359,
    "name": "SourceUnit",
    "src": "33:16722:28"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.6+commit.7338295f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.1",
  "updatedAt": "2021-06-03T23:56:22.349Z",
  "devdoc": {
    "details": "see https://eips.ethereum.org/EIPS/eip-721",
    "kind": "dev",
    "methods": {
      "approve(address,uint256)": {
        "details": "See {IERC721-approve}."
      },
      "balanceOf(address)": {
        "details": "See {IERC721-balanceOf}."
      },
      "baseURI()": {
        "details": "Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID."
      },
      "constructor": {
        "details": "Initializes the contract by setting a `name` and a `symbol` to the token collection."
      },
      "getApproved(uint256)": {
        "details": "See {IERC721-getApproved}."
      },
      "isApprovedForAll(address,address)": {
        "details": "See {IERC721-isApprovedForAll}."
      },
      "name()": {
        "details": "See {IERC721Metadata-name}."
      },
      "ownerOf(uint256)": {
        "details": "See {IERC721-ownerOf}."
      },
      "safeTransferFrom(address,address,uint256)": {
        "details": "See {IERC721-safeTransferFrom}."
      },
      "safeTransferFrom(address,address,uint256,bytes)": {
        "details": "See {IERC721-safeTransferFrom}."
      },
      "setApprovalForAll(address,bool)": {
        "details": "See {IERC721-setApprovalForAll}."
      },
      "supportsInterface(bytes4)": {
        "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas."
      },
      "symbol()": {
        "details": "See {IERC721Metadata-symbol}."
      },
      "tokenByIndex(uint256)": {
        "details": "See {IERC721Enumerable-tokenByIndex}."
      },
      "tokenOfOwnerByIndex(address,uint256)": {
        "details": "See {IERC721Enumerable-tokenOfOwnerByIndex}."
      },
      "tokenURI(uint256)": {
        "details": "See {IERC721Metadata-tokenURI}."
      },
      "totalSupply()": {
        "details": "See {IERC721Enumerable-totalSupply}."
      },
      "transferFrom(address,address,uint256)": {
        "details": "See {IERC721-transferFrom}."
      }
    },
    "title": "ERC721 Non-Fungible Token Standard basic implementation",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}