{
  "contractName": "ERC721Handler",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "bridgeAddress",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "ContractAddressNotWhitelisted",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "actual",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expected",
          "type": "uint256"
        }
      ],
      "name": "UnexpectedValue",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "_bridgeAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "_resourceIDToTokenContractAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "_tokenContractAddressToTokenProperties",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "isWhitelisted",
          "type": "bool"
        },
        {
          "internalType": "bool",
          "name": "isBurnable",
          "type": "bool"
        },
        {
          "components": [
            {
              "internalType": "bool",
              "name": "isSet",
              "type": "bool"
            },
            {
              "internalType": "uint8",
              "name": "externalDecimals",
              "type": "uint8"
            }
          ],
          "internalType": "struct ERCHandlerHelpers.Decimals",
          "name": "decimals",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [],
      "name": "defaultDecimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function",
      "constant": true
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "setBurnable",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "depositor",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "deposit",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "metaData",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "executeProposal",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "resourceID",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "args",
          "type": "bytes"
        }
      ],
      "name": "setResource",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.11+commit.d7f03943\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"ContractAddressNotWhitelisted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"}],\"name\":\"UnexpectedValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"_bridgeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"_resourceIDToTokenContractAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_tokenContractAddressToTokenProperties\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"isWhitelisted\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isBurnable\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"externalDecimals\",\"type\":\"uint8\"}],\"internalType\":\"struct ERCHandlerHelpers.Decimals\",\"name\":\"decimals\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"depositor\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"metaData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"executeProposal\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"setBurnable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"resourceID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"args\",\"type\":\"bytes\"}],\"name\":\"setResource\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"ChainSafe Systems.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"bridgeAddress\":\"Contract address of previously deployed Bridge.\"}},\"deposit(bytes32,address,bytes)\":{\"details\":\"Depending if the corresponding {tokenAddress} for the parsed {resourceID} is marked true in {_tokenContractAddressToTokenProperties[tokenAddress].isBurnable}, deposited tokens will be burned, if not, they will be locked.\",\"params\":{\"data\":\"Consists of {tokenID} padded to 32 bytes.\",\"depositor\":\"Address of account making the deposit in the Bridge contract.\",\"resourceID\":\"ResourceID used to find address of token to be used for deposit.\"},\"returns\":{\"metaData\":\": the deposited token metadata acquired by calling a {tokenURI} method in the token contract.\"}},\"executeProposal(bytes32,bytes)\":{\"params\":{\"data\":\"Consists of {tokenID}, {resourceID}, {lenDestinationRecipientAddress}, {destinationRecipientAddress}, {lenMeta}, and {metaData} all padded to 32 bytes.\",\"resourceID\":\"ResourceID to be used when making deposits.\"}},\"setBurnable(address)\":{\"params\":{\"contractAddress\":\"Address of contract to be used when making or executing deposits.\"}},\"setResource(bytes32,address,bytes)\":{\"params\":{\"args\":\"Additional data to be passed to specified handler.\",\"contractAddress\":\"Address of contract to be called when a deposit is made and a deposited is executed.\",\"resourceID\":\"ResourceID to be used when making deposits.\"}},\"withdraw(bytes)\":{\"params\":{\"data\":\"Consists of {tokenAddress}, {recipient}, and {tokenID} all padded to 32 bytes.\"}}},\"title\":\"Handles ERC721 deposits and deposit executions.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"_resourceIDToTokenContractAddress(bytes32)\":{\"notice\":\"Exposing getter for {_resourceIDToTokenContractAddress}.\"},\"deposit(bytes32,address,bytes)\":{\"notice\":\"A deposit is initiated by making a deposit in the Bridge contract.Data passed into the function should be constructed as follows: tokenID                                     uint256    bytes    0  - 32 destinationRecipientAddress     length      uint256    bytes    32 - 64 destinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress)) metadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32) metadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - ENDIf the corresponding {tokenAddress} for the parsed {resourceID} supports {_INTERFACE_ERC721_METADATA}, then {metaData} will be set according to the {tokenURI} method in the token contract.\"},\"executeProposal(bytes32,bytes)\":{\"notice\":\"Proposal execution should be initiated when a proposal is finalized in the Bridge contract. by a relayer on the deposit's destination chain.Data passed into the function should be constructed as follows: tokenID                                     uint256    bytes    0  - 32 destinationRecipientAddress     length      uint256    bytes    32 - 64 destinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress)) metadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32) metadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - END\"},\"setBurnable(address)\":{\"notice\":\"First verifies {contractAddress} is whitelisted, then sets {_tokenContractAddressToTokenProperties[contractAddress].isBurnable} to true.\"},\"setResource(bytes32,address,bytes)\":{\"notice\":\"Sets {_resourceIDToContractAddress} with {contractAddress}, {_tokenContractAddressToTokenProperties[tokenAddress].resourceID} with {resourceID} and {_tokenContractAddressToTokenProperties[tokenAddress].isWhitelisted} to true for {contractAddress} in ERCHandlerHelpers contract.\"},\"withdraw(bytes)\":{\"notice\":\"Used to manually release ERC721 tokens from ERC721Safe.Data passed into the function should be constructed as follows: tokenAddress                           address     bytes  0 - 32 recipient                              address     bytes  32 - 64 tokenID                                uint        bytes  64 - 96\"}},\"notice\":\"This contract is intended to be used with the Bridge contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/handlers/ERC721Handler.sol\":\"ERC721Handler\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/Pausable.sol\":{\"keccak256\":\"0xe68ed7fb8766ed1e888291f881e36b616037f852b37d96877045319ad298ba87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1d491a2ca79dbf44bc02e876e21a5847a2cbcc011188532ad8662cdc1c134a4e\",\"dweb:/ipfs/QmUQXhSV8ZvHLzfdG89ZNSh1nLrAYyjnNBLznJGwGcwVk8\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x11b84bb56dc112a6590bfe3e0efa118aa1b5891132342200d04c4ef544cb93de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cbc4803332d45dff58f865ed21c942fe4668e47cc7196c8dfe84102040b1d70f\",\"dweb:/ipfs/QmXhZLsocznRWCSyhjo3vo66Z1VsuuNptAVb6ASPYsWtGx\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x516a22876c1fab47f49b1bc22b4614491cd05338af8bd2e7b382da090a079990\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a439187f7126d31add4557f82d8aed6be0162007cd7182c48fd934dbab8f3849\",\"dweb:/ipfs/QmRPLguRFvrRJS7r6F1bcLvsx6q1VrgjEpZafyeL8D7xZh\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xd5fa74b4fb323776fa4a8158800fec9d5ac0fec0d6dd046dd93798632ada265f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33017a30a99cc5411a9e376622c31fc4a55cfc6a335e2f57f00cbf24a817ff3f\",\"dweb:/ipfs/QmWNQtWTPhA7Lo8nbxbc8KFMvZwbFYB8fSeEQ3vuapSV4a\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Burnable.sol\":{\"keccak256\":\"0x1f16f9737853b988865ab819d1ebf8b5009defe981c75bc9079e0f40ed2a2e57\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://05e50f827969ca93b0d7bad1e022aa3147c8f390e9f91bb814752e8fbbbe621c\",\"dweb:/ipfs/QmdR2fJ2a3HM7FyC9pGD4JeKF9z6bxqU9FbhMyQfH1sDJH\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721Pausable.sol\":{\"keccak256\":\"0xa2695a4c7b192f34b98a3875dfce54c8c6c4976b898a5598b1ce0355ce2e6c56\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a9eed1168b7794c22eb3ef76ac6d8c523cfb453c5113e3314781dadb5d0de4b\",\"dweb:/ipfs/QmcoTzSK56c3tUN9zsD66YpTjoxguuo76BdrDs5ZSSaJMp\"]},\"@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol\":{\"keccak256\":\"0x1cbe42915bc66227970fe99bc0f783eb1de30f2b48f984af01ad45edb9658698\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2baa08eb67d9da46e6c4c049f17b7684a1c68c5268d0f466cfa0eb23ce2bf9b0\",\"dweb:/ipfs/Qmdnj8zj4PfErB2HM2eKmDt7FrqrhggsZ6Qd8MpD593tgj\"]},\"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\":{\"keccak256\":\"0x75b829ff2f26c14355d1cba20e16fe7b29ca58eb5fef665ede48bc0f9c6c74b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0a107160525724f9e1bbbab031defc2f298296dd9e331f16a6f7130cec32146\",\"dweb:/ipfs/QmemujxSd7gX8A9M8UwmNbz4Ms3U9FG9QfudUgxwvTmPWf\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x2ccf9d2313a313d41a791505f2b5abfdc62191b5d4334f7f7a82691c088a1c87\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a57d0854b2fdce6ebff933a48dca2445643d1eccfc27f00292e937f26c6a58\",\"dweb:/ipfs/QmW45rZooS9TqR4YXUbjRbtf2Bpb5ouSarBvfW1LdGprvV\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts/utils/Counters.sol\":{\"keccak256\":\"0xf0018c2440fbe238dd3a8732fa8e17a0f9dce84d31451dc8a32f6d62b349c9f1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59e1c62884d55b70f3ae5432b44bb3166ad71ae3acd19c57ab6ddc3c87c325ee\",\"dweb:/ipfs/QmezuXg5GK5oeA4F91EZhozBFekhq5TD966bHPH18cCqhu\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x32c202bd28995dd20c4347b7c6467a6d3241c74c8ad3edcbb610cd9205916c45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8179c356adb19e70d6b31a1eedc8c5c7f0c00e669e2540f4099e3844c6074d30\",\"dweb:/ipfs/QmWFbivarEobbqhS1go64ootVuHfVohBseerYy9FTEd1W2\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\":{\"keccak256\":\"0xf7291d7213336b00ee7edbf7cd5034778dd7b0bda2a7489e664f1e5cacc6c24e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a3671a157cfdc73f334fc9e584862e1b3b48e8b771cde69d79834b03dc5c2826\",\"dweb:/ipfs/QmVJnMc3FLyYzJFktqwinaZes3pnRPuU1wKmBGvGRfh4rc\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"@openzeppelin/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9772845c886f87a3aab315f8d6b68aa599027c20f441b131cd4afaf65b588900\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad2f29a9c17a4f746416c9e254e17671f43c409dbfa6e4d7d76c3e4a83212d31\",\"dweb:/ipfs/QmTqU65L6iu6yqmXKzcNLPioR8etzKPWycpDJCm17ifVdS\"]},\"project:/contracts/ERC721MinterBurnerPauser.sol\":{\"keccak256\":\"0xa16b62f44dcc80597b2920a4368b4d15cf6702a137cf0a49b0578495971baf20\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://52232c4448b18a4d793217ef9bb386397bbccab7b0903d34c7382ef4a826fb4f\",\"dweb:/ipfs/QmbTUqJVx154DPS7ReWjsWtruoTpFgJcSfSmtp5yHsbE4t\"]},\"project:/contracts/ERC721Safe.sol\":{\"keccak256\":\"0x07c5d83b4f955f0681de5934fe9bfd8fbf4f87632aa98e4728e0807186282ad8\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://0122a5b1e431e9f2d724bc5c9c14b62157199adffea1e037ddd902889b133a0a\",\"dweb:/ipfs/QmVsBN5KqDGTwzec68nMJmiHkGdUcSrWiEMLNUZs44MGGj\"]},\"project:/contracts/handlers/ERC721Handler.sol\":{\"keccak256\":\"0xfc02d6e53aad9e80d70f98ce5ffed5928a3fc08cdc46c531e99c719539eb454b\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://2ea8cd43a56cd9a0b8db4273378d8d2e74bf1eb296b4ee2672cc2f43dc578c29\",\"dweb:/ipfs/QmdVwgk5LFZjPYiy6AxNCf3NbbH8oGF6bn4JxxfQyUG1Wg\"]},\"project:/contracts/handlers/ERCHandlerHelpers.sol\":{\"keccak256\":\"0xd70404586cae33b8ff8d3cc4557a570cd1d05c5ef1aac7af392941bd01430828\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://3bb0e917a0d8bf33de6579f33a258040ee9515584ff840d3755acbb87ed6192f\",\"dweb:/ipfs/Qmcvx29x8c1wGrxAx8h8XQxsNUW9UKdvE76PxKufQv4LHP\"]},\"project:/contracts/interfaces/IERCHandler.sol\":{\"keccak256\":\"0xf360099ea5a64a9ba351b0807e0bf376c432239af1cc314ef2e44b157afe56fd\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://3b05bd76975b1d128c7b1c8ed93cf35c532737b84807605320a41f193c0e00ef\",\"dweb:/ipfs/QmNQLZWyPb2Nd3JmPaDN5rPyvFzcMtuW9xgp8a7hmgPsUo\"]},\"project:/contracts/interfaces/IHandler.sol\":{\"keccak256\":\"0x6ff2c7a2a169c519a9ebd670069c8dc902e09cf9dccd52ce87a110799d3dfd2e\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://73eacb1eaa4de346d24fd3174fb21d2b16f1350b9599813f1bb292eecbce806d\",\"dweb:/ipfs/QmTGT3orocKxkJ3wud312TFB4CSVYJeGiTHGZie8vkNKxM\"]},\"project:/contracts/utils/AccessControl.sol\":{\"keccak256\":\"0x46ee81e56b1cca67473670a3f59fb02ec8abda297fac02c79d705a3442588499\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40869a99895bc5f746f8b55ab7d20eb4fce323e50540d2d0944e1930f5eea334\",\"dweb:/ipfs/QmVaCmqGRywSFyqPj1auXmDYQzDFy4uywknXTB3QMLCzkm\"]},\"project:/contracts/utils/SanityChecks.sol\":{\"keccak256\":\"0xe0a497950a5f1f9e127a5684c6c562e6fb0fa72dcde056b8c6da933e6bf8afc2\",\"license\":\"LGPL-3.0-only\",\"urls\":[\"bzz-raw://47e5918856c922f1408cd15660d451062820121bd1ef3057d1dccad9f9785241\",\"dweb:/ipfs/QmZUEfFPEtiRKnfAUGhN6HoWCyLLUs9XgJbmqEq7pbABHq\"]}},\"version\":1}",
  "bytecode": "0x60a060405234801561001057600080fd5b50604051610fcd380380610fcd83398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b608051610f3b6100926000396000818161012501526106750152610f3b6000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063318c136e11610066578063318c136e14610120578063ac607c2114610147578063b07e54bb146101dc578063e248cff2146101fc578063fa8675b01461020f57600080fd5b806307b7ed99146100985780630968f264146100ad5780630a6d55d8146100c057806330f08abd14610106575b600080fd5b6100ab6100a6366004610acf565b610222565b005b6100ab6100bb366004610b62565b610236565b6100e96100ce366004610be2565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61010e601281565b60405160ff90911681526020016100fd565b6100e97f000000000000000000000000000000000000000000000000000000000000000081565b6101a4610155366004610acf565b600160208181526000928352604092839020805492810154845180860190955260029091015460ff81811615158652610100918290048116938601939093529293828216939091049091169084565b6040805194855292151560208086019190915291151592840192909252815115156060840152015160ff16608082015260a0016100fd565b6101ef6101ea366004610c44565b610283565b6040516100fd9190610cf8565b6101ef61020a366004610d0b565b6103d7565b6100ab61021d366004610c44565b610603565b61022a61066a565b610233816106e4565b50565b61023e61066a565b6000806000838060200190518101906102579190610d57565b919450925090506102706001600160a01b038316610756565b5061027d83308484610783565b50505050565b606061028d61066a565b600061029b83850185610be2565b600087815260208181526040808320546001600160a01b0316808452600192839052922001549192509060ff166102f5576040516325df77c560e11b81526001600160a01b03821660048201526024015b60405180910390fd5b61030f6001600160a01b038216635b5e139f60e01b6107f8565b156103875760405163c87b56dd60e01b81526004810183905281906001600160a01b0382169063c87b56dd90602401600060405180830381865afa15801561035b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103839190810190610d9a565b9350505b6001600160a01b03811660009081526001602081905260409091200154610100900460ff16156103c1576103bc81878461081d565b6103cd565b6103cd81873085610783565b5050949350505050565b60606103e161066a565b60008060608180826103f5888a018a610e11565b9096509450610405856014610939565b50605492506104178360408a8c610e33565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092965061045d92508a9150859050818c610e33565b81019061046a9190610be2565b91508888610479856020610e5d565b9084610486876020610e5d565b6104909190610e5d565b9261049d93929190610e33565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905060006020850151905060008060008d815260200190815260200160002060009054906101000a90046001600160a01b0316905060016000826001600160a01b03166001600160a01b0316815260200190815260200160002060010160009054906101000a900460ff16610573576040516325df77c560e11b81526001600160a01b03821660048201526024016102ec565b6001600160a01b03811660009081526001602081905260409091200154610100900460ff16156105b1576105ac818360601c8a8661096c565b6105c0565b6105c081308460601c8b610783565b604080516001600160a01b03929092166020830152606092831c828201528282019890985287518082039092018252608001909652509398975050505050505050565b61060b61066a565b61061d836001600160a01b0316610756565b5060008481526020818152604080832080546001600160a01b0319166001600160a01b03881690811790915583526001918290529091208581558101805461ffff1916909117905561027d565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106e25760405162461bcd60e51b815260206004820152601e60248201527f73656e646572206d7573742062652062726964676520636f6e7472616374000060448201526064016102ec565b565b6001600160a01b0381166000908152600160208190526040909120015460ff1661072c576040516325df77c560e11b81526001600160a01b03821660048201526024016102ec565b6001600160a01b0316600090815260016020819052604090912001805461ff001916610100179055565b60006001600160a01b03821661077f5760405163d92e233d60e01b815260040160405180910390fd5b5090565b6040516323b872dd60e01b81526001600160a01b0384811660048301528381166024830152604482018390528591908216906323b872dd906064015b600060405180830381600087803b1580156107d957600080fd5b505af11580156107ed573d6000803e3d6000fd5b505050505050505050565b60006108038361099e565b8015610814575061081483836109d1565b90505b92915050565b6040516331a9108f60e11b81526004810182905283906001600160a01b038481169190831690636352211e90602401602060405180830381865afa158015610869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088d9190610e83565b6001600160a01b0316146108d95760405162461bcd60e51b8152602060048201526013602482015272213ab937103737ba10333937b69037bbb732b960691b60448201526064016102ec565b604051630852cd8d60e31b8152600481018390526001600160a01b038216906342966c6890602401600060405180830381600087803b15801561091b57600080fd5b505af115801561092f573d6000803e3d6000fd5b5050505050505050565b60008183146109655760405163c230690360e01b815260048101849052602481018390526044016102ec565b5090919050565b6040516334ff261960e21b815284906001600160a01b0382169063d3fc9864906107bf90879087908790600401610ea0565b60006109b1826301ffc9a760e01b6109d1565b801561081757506109ca826001600160e01b03196109d1565b1592915050565b604080516001600160e01b0319831660248083019190915282518083039091018152604490910182526020810180516001600160e01b03166301ffc9a760e01b179052905160009190829081906001600160a01b0387169061753090610a38908690610ec7565b6000604051808303818686fa925050503d8060008114610a74576040519150601f19603f3d011682016040523d82523d6000602084013e610a79565b606091505b5091509150602081511015610a945760009350505050610817565b818015610ab0575080806020019051810190610ab09190610ee3565b9695505050505050565b6001600160a01b038116811461023357600080fd5b600060208284031215610ae157600080fd5b8135610aec81610aba565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610b3257610b32610af3565b604052919050565b600067ffffffffffffffff821115610b5457610b54610af3565b50601f01601f191660200190565b600060208284031215610b7457600080fd5b813567ffffffffffffffff811115610b8b57600080fd5b8201601f81018413610b9c57600080fd5b8035610baf610baa82610b3a565b610b09565b818152856020838501011115610bc457600080fd5b81602084016020830137600091810160200191909152949350505050565b600060208284031215610bf457600080fd5b5035919050565b60008083601f840112610c0d57600080fd5b50813567ffffffffffffffff811115610c2557600080fd5b602083019150836020828501011115610c3d57600080fd5b9250929050565b60008060008060608587031215610c5a57600080fd5b843593506020850135610c6c81610aba565b9250604085013567ffffffffffffffff811115610c8857600080fd5b610c9487828801610bfb565b95989497509550505050565b60005b83811015610cbb578181015183820152602001610ca3565b8381111561027d5750506000910152565b60008151808452610ce4816020860160208601610ca0565b601f01601f19169290920160200192915050565b6020815260006108146020830184610ccc565b600080600060408486031215610d2057600080fd5b83359250602084013567ffffffffffffffff811115610d3e57600080fd5b610d4a86828701610bfb565b9497909650939450505050565b600080600060608486031215610d6c57600080fd5b8351610d7781610aba565b6020850151909350610d8881610aba565b80925050604084015190509250925092565b600060208284031215610dac57600080fd5b815167ffffffffffffffff811115610dc357600080fd5b8201601f81018413610dd457600080fd5b8051610de2610baa82610b3a565b818152856020838501011115610df757600080fd5b610e08826020830160208601610ca0565b95945050505050565b60008060408385031215610e2457600080fd5b50508035926020909101359150565b60008085851115610e4357600080fd5b83861115610e5057600080fd5b5050820193919092039150565b60008219821115610e7e57634e487b7160e01b600052601160045260246000fd5b500190565b600060208284031215610e9557600080fd5b8151610aec81610aba565b60018060a01b0384168152826020820152606060408201526000610e086060830184610ccc565b60008251610ed9818460208701610ca0565b9190910192915050565b600060208284031215610ef557600080fd5b81518015158114610aec57600080fdfea26469706673582212205ac650d14e4a2444bbdaa4af0836f4e658db945c456c39cb616611b114d4a54664736f6c634300080b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063318c136e11610066578063318c136e14610120578063ac607c2114610147578063b07e54bb146101dc578063e248cff2146101fc578063fa8675b01461020f57600080fd5b806307b7ed99146100985780630968f264146100ad5780630a6d55d8146100c057806330f08abd14610106575b600080fd5b6100ab6100a6366004610acf565b610222565b005b6100ab6100bb366004610b62565b610236565b6100e96100ce366004610be2565b6000602081905290815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61010e601281565b60405160ff90911681526020016100fd565b6100e97f000000000000000000000000000000000000000000000000000000000000000081565b6101a4610155366004610acf565b600160208181526000928352604092839020805492810154845180860190955260029091015460ff81811615158652610100918290048116938601939093529293828216939091049091169084565b6040805194855292151560208086019190915291151592840192909252815115156060840152015160ff16608082015260a0016100fd565b6101ef6101ea366004610c44565b610283565b6040516100fd9190610cf8565b6101ef61020a366004610d0b565b6103d7565b6100ab61021d366004610c44565b610603565b61022a61066a565b610233816106e4565b50565b61023e61066a565b6000806000838060200190518101906102579190610d57565b919450925090506102706001600160a01b038316610756565b5061027d83308484610783565b50505050565b606061028d61066a565b600061029b83850185610be2565b600087815260208181526040808320546001600160a01b0316808452600192839052922001549192509060ff166102f5576040516325df77c560e11b81526001600160a01b03821660048201526024015b60405180910390fd5b61030f6001600160a01b038216635b5e139f60e01b6107f8565b156103875760405163c87b56dd60e01b81526004810183905281906001600160a01b0382169063c87b56dd90602401600060405180830381865afa15801561035b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103839190810190610d9a565b9350505b6001600160a01b03811660009081526001602081905260409091200154610100900460ff16156103c1576103bc81878461081d565b6103cd565b6103cd81873085610783565b5050949350505050565b60606103e161066a565b60008060608180826103f5888a018a610e11565b9096509450610405856014610939565b50605492506104178360408a8c610e33565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092965061045d92508a9150859050818c610e33565b81019061046a9190610be2565b91508888610479856020610e5d565b9084610486876020610e5d565b6104909190610e5d565b9261049d93929190610e33565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905060006020850151905060008060008d815260200190815260200160002060009054906101000a90046001600160a01b0316905060016000826001600160a01b03166001600160a01b0316815260200190815260200160002060010160009054906101000a900460ff16610573576040516325df77c560e11b81526001600160a01b03821660048201526024016102ec565b6001600160a01b03811660009081526001602081905260409091200154610100900460ff16156105b1576105ac818360601c8a8661096c565b6105c0565b6105c081308460601c8b610783565b604080516001600160a01b03929092166020830152606092831c828201528282019890985287518082039092018252608001909652509398975050505050505050565b61060b61066a565b61061d836001600160a01b0316610756565b5060008481526020818152604080832080546001600160a01b0319166001600160a01b03881690811790915583526001918290529091208581558101805461ffff1916909117905561027d565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106e25760405162461bcd60e51b815260206004820152601e60248201527f73656e646572206d7573742062652062726964676520636f6e7472616374000060448201526064016102ec565b565b6001600160a01b0381166000908152600160208190526040909120015460ff1661072c576040516325df77c560e11b81526001600160a01b03821660048201526024016102ec565b6001600160a01b0316600090815260016020819052604090912001805461ff001916610100179055565b60006001600160a01b03821661077f5760405163d92e233d60e01b815260040160405180910390fd5b5090565b6040516323b872dd60e01b81526001600160a01b0384811660048301528381166024830152604482018390528591908216906323b872dd906064015b600060405180830381600087803b1580156107d957600080fd5b505af11580156107ed573d6000803e3d6000fd5b505050505050505050565b60006108038361099e565b8015610814575061081483836109d1565b90505b92915050565b6040516331a9108f60e11b81526004810182905283906001600160a01b038481169190831690636352211e90602401602060405180830381865afa158015610869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088d9190610e83565b6001600160a01b0316146108d95760405162461bcd60e51b8152602060048201526013602482015272213ab937103737ba10333937b69037bbb732b960691b60448201526064016102ec565b604051630852cd8d60e31b8152600481018390526001600160a01b038216906342966c6890602401600060405180830381600087803b15801561091b57600080fd5b505af115801561092f573d6000803e3d6000fd5b5050505050505050565b60008183146109655760405163c230690360e01b815260048101849052602481018390526044016102ec565b5090919050565b6040516334ff261960e21b815284906001600160a01b0382169063d3fc9864906107bf90879087908790600401610ea0565b60006109b1826301ffc9a760e01b6109d1565b801561081757506109ca826001600160e01b03196109d1565b1592915050565b604080516001600160e01b0319831660248083019190915282518083039091018152604490910182526020810180516001600160e01b03166301ffc9a760e01b179052905160009190829081906001600160a01b0387169061753090610a38908690610ec7565b6000604051808303818686fa925050503d8060008114610a74576040519150601f19603f3d011682016040523d82523d6000602084013e610a79565b606091505b5091509150602081511015610a945760009350505050610817565b818015610ab0575080806020019051810190610ab09190610ee3565b9695505050505050565b6001600160a01b038116811461023357600080fd5b600060208284031215610ae157600080fd5b8135610aec81610aba565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610b3257610b32610af3565b604052919050565b600067ffffffffffffffff821115610b5457610b54610af3565b50601f01601f191660200190565b600060208284031215610b7457600080fd5b813567ffffffffffffffff811115610b8b57600080fd5b8201601f81018413610b9c57600080fd5b8035610baf610baa82610b3a565b610b09565b818152856020838501011115610bc457600080fd5b81602084016020830137600091810160200191909152949350505050565b600060208284031215610bf457600080fd5b5035919050565b60008083601f840112610c0d57600080fd5b50813567ffffffffffffffff811115610c2557600080fd5b602083019150836020828501011115610c3d57600080fd5b9250929050565b60008060008060608587031215610c5a57600080fd5b843593506020850135610c6c81610aba565b9250604085013567ffffffffffffffff811115610c8857600080fd5b610c9487828801610bfb565b95989497509550505050565b60005b83811015610cbb578181015183820152602001610ca3565b8381111561027d5750506000910152565b60008151808452610ce4816020860160208601610ca0565b601f01601f19169290920160200192915050565b6020815260006108146020830184610ccc565b600080600060408486031215610d2057600080fd5b83359250602084013567ffffffffffffffff811115610d3e57600080fd5b610d4a86828701610bfb565b9497909650939450505050565b600080600060608486031215610d6c57600080fd5b8351610d7781610aba565b6020850151909350610d8881610aba565b80925050604084015190509250925092565b600060208284031215610dac57600080fd5b815167ffffffffffffffff811115610dc357600080fd5b8201601f81018413610dd457600080fd5b8051610de2610baa82610b3a565b818152856020838501011115610df757600080fd5b610e08826020830160208601610ca0565b95945050505050565b60008060408385031215610e2457600080fd5b50508035926020909101359150565b60008085851115610e4357600080fd5b83861115610e5057600080fd5b5050820193919092039150565b60008219821115610e7e57634e487b7160e01b600052601160045260246000fd5b500190565b600060208284031215610e9557600080fd5b8151610aec81610aba565b60018060a01b0384168152826020820152606060408201526000610e086060830184610ccc565b60008251610ed9818460208701610ca0565b9190910192915050565b600060208284031215610ef557600080fd5b81518015158114610aec57600080fdfea26469706673582212205ac650d14e4a2444bbdaa4af0836f4e658db945c456c39cb616611b114d4a54664736f6c634300080b0033",
  "immutableReferences": {
    "14625": [
      {
        "length": 32,
        "start": 293
      },
      {
        "length": 32,
        "start": 1653
      }
    ]
  },
  "generatedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:306:105",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:105",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "95:209:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "141:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "150:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "153:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "143:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "143:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "143:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "116:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "125:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "112:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "112:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "137:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "108:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "108:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "105:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "166:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "185:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "179:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "179:16:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "170:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "258:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "267:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "270:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "260:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "260:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "260:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "217:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "228:5:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "243:3:105",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "248:1:105",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "239:3:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "239:11:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "252:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "235:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "235:19:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "224:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "224:31:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "214:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "214:42:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "207:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "207:50:105"
                  },
                  "nodeType": "YulIf",
                  "src": "204:70:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "283:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "293:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "283:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "61:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "72:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "84:6:105",
                "type": ""
              }
            ],
            "src": "14:290:105"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}",
      "id": 105,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:10071:105",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:105",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "59:86:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "123:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "132:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "135:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "125:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "125:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "125:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "82:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "93:5:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "108:3:105",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "113:1:105",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "104:3:105"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "104:11:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "117:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "100:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "100:19:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "89:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "89:31:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "79:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "79:42:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "72:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "72:50:105"
                  },
                  "nodeType": "YulIf",
                  "src": "69:70:105"
                }
              ]
            },
            "name": "validator_revert_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "48:5:105",
                "type": ""
              }
            ],
            "src": "14:131:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "220:177:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "266:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "275:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "278:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "268:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "268:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "268:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "241:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "250:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "237:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "237:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "262:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "233:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "233:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "230:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "291:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "317:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "304:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "304:23:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "295:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "361:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "336:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "336:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "336:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "376:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "386:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "376:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "186:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "197:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "209:6:105",
                "type": ""
              }
            ],
            "src": "150:247:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "434:95:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "451:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "458:3:105",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "463:10:105",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "454:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "454:20:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "444:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "444:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "444:31:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "491:1:105",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "494:4:105",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "484:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "484:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "484:15:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "515:1:105",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "518:4:105",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "508:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "508:15:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "508:15:105"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nodeType": "YulFunctionDefinition",
            "src": "402:127:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "579:230:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "589:19:105",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "605:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "599:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "599:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulIdentifier",
                      "src": "589:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "617:58:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "639:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "size",
                                "nodeType": "YulIdentifier",
                                "src": "655:4:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "661:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "651:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "651:13:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "670:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "666:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "666:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "647:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "647:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "635:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "635:40:105"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "621:10:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "750:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "752:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "752:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "752:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "693:10:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "705:18:105",
                            "type": "",
                            "value": "0xffffffffffffffff"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "690:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "690:34:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "729:10:105"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "741:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "726:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "726:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "687:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "687:62:105"
                  },
                  "nodeType": "YulIf",
                  "src": "684:88:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "788:2:105",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "792:10:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "781:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "781:22:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "781:22:105"
                }
              ]
            },
            "name": "allocate_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "559:4:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "memPtr",
                "nodeType": "YulTypedName",
                "src": "568:6:105",
                "type": ""
              }
            ],
            "src": "534:275:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "871:129:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "915:22:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "917:16:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "917:18:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "917:18:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "887:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "895:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "884:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "884:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "881:56:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "946:48:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "966:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "974:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "962:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "962:15:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "983:2:105",
                                "type": "",
                                "value": "31"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "979:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "979:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "958:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "958:29:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "989:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "954:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "954:40:105"
                  },
                  "variableNames": [
                    {
                      "name": "size",
                      "nodeType": "YulIdentifier",
                      "src": "946:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "array_allocation_size_bytes",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "851:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "size",
                "nodeType": "YulTypedName",
                "src": "862:4:105",
                "type": ""
              }
            ],
            "src": "814:186:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1084:592:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1130:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1139:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1142:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1132:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1132:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1132:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1105:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1114:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1101:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1101:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1126:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1097:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1097:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1094:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1155:37:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1182:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1169:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1169:23:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "1159:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1235:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1244:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1247:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1237:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1237:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1237:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1207:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1215:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1204:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1204:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1201:50:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1260:32:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1274:9:105"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "1285:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1270:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1270:22:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "1264:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1340:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1349:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1352:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1342:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1342:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1342:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "1319:2:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1323:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1315:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1315:13:105"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1330:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "1311:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1311:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "1304:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1304:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1301:55:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1365:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "1388:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1375:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1375:16:105"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "1369:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "1400:61:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "1457:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_bytes",
                          "nodeType": "YulIdentifier",
                          "src": "1429:27:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1429:31:105"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nodeType": "YulIdentifier",
                      "src": "1413:15:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1413:48:105"
                  },
                  "variables": [
                    {
                      "name": "array",
                      "nodeType": "YulTypedName",
                      "src": "1404:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "1477:5:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "1484:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1470:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1470:17:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1470:17:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1533:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1542:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1545:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1535:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1535:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1535:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "1510:2:105"
                              },
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "1514:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1506:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1506:11:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1519:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1502:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1502:20:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "1524:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "1499:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1499:33:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1496:53:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "array",
                            "nodeType": "YulIdentifier",
                            "src": "1575:5:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1582:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1571:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1571:14:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "1591:2:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1595:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1587:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1587:11:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "1600:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "1558:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1558:45:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1558:45:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "array",
                                "nodeType": "YulIdentifier",
                                "src": "1627:5:105"
                              },
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "1634:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "1623:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1623:14:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1639:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1619:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1619:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1644:1:105",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1612:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1612:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1612:34:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1655:15:105",
                  "value": {
                    "name": "array",
                    "nodeType": "YulIdentifier",
                    "src": "1665:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1655:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes_memory_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1050:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1061:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1073:6:105",
                "type": ""
              }
            ],
            "src": "1005:671:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1751:110:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1797:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1806:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1809:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1799:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1799:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1799:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1772:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1781:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1768:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1768:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1793:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1764:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1764:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "1761:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1822:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1845:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1832:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1832:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1822:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1717:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1728:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1740:6:105",
                "type": ""
              }
            ],
            "src": "1681:180:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1967:102:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1977:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1989:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2000:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1985:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1985:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1977:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2019:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "2034:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2050:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2055:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "2046:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2046:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2059:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "2042:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2042:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2030:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2030:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2012:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2012:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2012:51:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1936:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1947:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1958:4:105",
                "type": ""
              }
            ],
            "src": "1866:203:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2171:87:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2181:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2193:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2204:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2189:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2189:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2181:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2223:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "2238:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2246:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2234:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2234:17:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2216:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2216:36:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2216:36:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2140:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2151:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2162:4:105",
                "type": ""
              }
            ],
            "src": "2074:184:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2490:332:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "2500:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2512:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2523:3:105",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2508:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2508:19:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "2500:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2543:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "2554:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2536:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2536:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2536:25:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2581:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2592:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2577:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2577:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value1",
                                "nodeType": "YulIdentifier",
                                "src": "2611:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2604:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2604:14:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "2597:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2597:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2570:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2570:50:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2570:50:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2640:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2651:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2636:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2636:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value2",
                                "nodeType": "YulIdentifier",
                                "src": "2670:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2663:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2663:14:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "2656:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2656:22:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2629:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2629:50:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2629:50:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2699:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2710:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2695:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2695:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2735:6:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "2729:5:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2729:13:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "2722:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2722:21:105"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "2715:6:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2715:29:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2688:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2688:57:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2688:57:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2765:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2776:3:105",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2761:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2761:19:105"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value3",
                                    "nodeType": "YulIdentifier",
                                    "src": "2796:6:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2804:2:105",
                                    "type": "",
                                    "value": "32"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "2792:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2792:15:105"
                              }
                            ],
                            "functionName": {
                              "name": "mload",
                              "nodeType": "YulIdentifier",
                              "src": "2786:5:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2786:22:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2810:4:105",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "2782:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2782:33:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "2754:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2754:62:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "2754:62:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_bool_t_bool_t_struct$_Decimals_$14633_memory_ptr__to_t_bytes32_t_bool_t_bool_t_struct$_Decimals_$14633_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2435:9:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "2446:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2454:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2462:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2470:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "2481:4:105",
                "type": ""
              }
            ],
            "src": "2263:559:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2899:275:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2948:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2957:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2960:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2950:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2950:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2950:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2927:6:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2935:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2923:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2923:17:105"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "2942:3:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "2919:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2919:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2912:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2912:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "2909:55:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2973:30:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2996:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2983:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2983:20:105"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "2973:6:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3046:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3055:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3058:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3048:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3048:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3048:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3018:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3026:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3015:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3015:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3012:50:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3071:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "3087:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3095:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3083:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3083:17:105"
                  },
                  "variableNames": [
                    {
                      "name": "arrayPos",
                      "nodeType": "YulIdentifier",
                      "src": "3071:8:105"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3152:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3161:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3164:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3154:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3154:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3154:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "3123:6:105"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "3131:6:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "3119:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "3119:19:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3140:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3115:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3115:30:105"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "3147:3:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3112:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3112:39:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3109:59:105"
                }
              ]
            },
            "name": "abi_decode_bytes_calldata",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "2862:6:105",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "2870:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "arrayPos",
                "nodeType": "YulTypedName",
                "src": "2878:8:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "2888:6:105",
                "type": ""
              }
            ],
            "src": "2827:347:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3302:489:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3348:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3357:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3360:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3350:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3350:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3350:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3323:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3332:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3319:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3319:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3344:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3315:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3315:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3312:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3373:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3396:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3383:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3383:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3373:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3415:45:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3445:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3456:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3441:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3441:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3428:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3428:32:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "3419:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "3494:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "3469:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3469:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3469:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3509:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "3519:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "3509:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3533:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3564:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3575:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3560:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3560:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3547:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3547:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "3537:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3622:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3631:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3634:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3624:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3624:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3624:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "3594:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3602:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3591:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3591:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "3588:50:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3647:84:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3703:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "3714:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3699:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3699:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "3723:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "3673:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3673:58:105"
                  },
                  "variables": [
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "3651:8:105",
                      "type": ""
                    },
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "3661:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3740:18:105",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "3750:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "3740:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3767:18:105",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "3777:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "3767:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_addresst_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3244:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3255:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3267:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3275:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3283:6:105",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "3291:6:105",
                "type": ""
              }
            ],
            "src": "3179:612:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3849:205:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3859:10:105",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "3868:1:105",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "3863:1:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3928:63:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "3953:3:105"
                                },
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "3958:1:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "3949:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3949:11:105"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "src",
                                      "nodeType": "YulIdentifier",
                                      "src": "3972:3:105"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "3977:1:105"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "3968:3:105"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "3968:11:105"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "3962:5:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "3962:18:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "3942:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3942:39:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3942:39:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "3889:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "3892:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "3886:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3886:13:105"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "3900:19:105",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "3902:15:105",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "3911:1:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3914:2:105",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3907:3:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3907:10:105"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "3902:1:105"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "3882:3:105",
                    "statements": []
                  },
                  "src": "3878:113:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4017:31:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dst",
                                  "nodeType": "YulIdentifier",
                                  "src": "4030:3:105"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "4035:6:105"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4026:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4026:16:105"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4044:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4019:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4019:27:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4019:27:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "4006:1:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "4009:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4003:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4003:13:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4000:48:105"
                }
              ]
            },
            "name": "copy_memory_to_memory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "3827:3:105",
                "type": ""
              },
              {
                "name": "dst",
                "nodeType": "YulTypedName",
                "src": "3832:3:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "3837:6:105",
                "type": ""
              }
            ],
            "src": "3796:258:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4108:208:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4118:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "4138:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "4132:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4132:12:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "4122:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "4160:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "4165:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4153:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4153:19:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4153:19:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "4207:5:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4214:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4203:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4203:16:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "4225:3:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4230:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4221:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4221:14:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "4237:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "4181:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4181:63:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4181:63:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4253:57:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "4268:3:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "4281:6:105"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4289:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "4277:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4277:15:105"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "4298:2:105",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "4294:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "4294:7:105"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "4273:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "4273:29:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4264:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4264:39:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4305:4:105",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "4260:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4260:50:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "4253:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_bytes",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "4085:5:105",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "4092:3:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "4100:3:105",
                "type": ""
              }
            ],
            "src": "4059:257:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4440:98:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4457:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4468:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "4450:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4450:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "4450:21:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4480:52:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "4505:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4517:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4528:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4513:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4513:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "4488:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4488:44:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "4480:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4409:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4420:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "4431:4:105",
                "type": ""
              }
            ],
            "src": "4321:217:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4649:371:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4695:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4704:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4707:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4697:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4697:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4697:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4670:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4679:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4666:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4666:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4691:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4662:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4662:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4659:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4720:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4743:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4730:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4730:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4720:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4762:46:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4793:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4804:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4789:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4789:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4776:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4776:32:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "4766:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4851:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4860:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4863:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4853:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4853:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4853:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "4823:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4831:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4820:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4820:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "4817:50:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4876:84:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4932:9:105"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "4943:6:105"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4928:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4928:22:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "4952:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "4902:25:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4902:58:105"
                  },
                  "variables": [
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "4880:8:105",
                      "type": ""
                    },
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "4890:8:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4969:18:105",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "4979:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4969:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4996:18:105",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "5006:8:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "4996:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4599:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4610:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4622:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4630:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "4638:6:105",
                "type": ""
              }
            ],
            "src": "4543:477:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5156:331:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5202:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5211:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5214:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5204:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5204:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5204:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5177:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5186:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5173:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5173:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5198:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5169:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5169:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5166:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5227:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5246:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "5240:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5240:16:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "5231:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "5290:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "5265:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5265:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5265:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5305:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "5315:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5305:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5329:40:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5354:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5365:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5350:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5350:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "5344:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5344:25:105"
                  },
                  "variables": [
                    {
                      "name": "value_1",
                      "nodeType": "YulTypedName",
                      "src": "5333:7:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value_1",
                        "nodeType": "YulIdentifier",
                        "src": "5403:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "5378:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5378:33:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5378:33:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5420:17:105",
                  "value": {
                    "name": "value_1",
                    "nodeType": "YulIdentifier",
                    "src": "5430:7:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "5420:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5446:35:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5466:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5477:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5462:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5462:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "5456:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5456:25:105"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "5446:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_payablet_address_payablet_uint256_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5106:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5117:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5129:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5137:6:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "5145:6:105",
                "type": ""
              }
            ],
            "src": "5025:462:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5562:110:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5608:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5617:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5620:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5610:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5610:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5610:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5583:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5592:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5579:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5579:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5604:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5575:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5575:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5572:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5633:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5656:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5643:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5643:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5633:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5528:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5539:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5551:6:105",
                "type": ""
              }
            ],
            "src": "5492:180:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5778:76:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5788:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5800:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5811:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5796:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5796:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5788:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5830:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "5841:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5823:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5823:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5823:25:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5747:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5758:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5769:4:105",
                "type": ""
              }
            ],
            "src": "5677:177:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5950:544:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5996:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6005:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6008:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5998:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5998:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5998:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "5971:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5980:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "5967:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5967:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5992:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5963:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5963:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "5960:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6021:30:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6041:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "6035:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6035:16:105"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "6025:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6094:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6103:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6106:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6096:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6096:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6096:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "6066:6:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6074:18:105",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6063:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6063:30:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6060:50:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6119:32:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6133:9:105"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "6144:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6129:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6129:22:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "6123:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6199:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6208:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6211:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6201:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6201:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6201:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "6178:2:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6182:4:105",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6174:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6174:13:105"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6189:7:105"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "6170:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6170:27:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "6163:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6163:35:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6160:55:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6224:19:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6240:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "6234:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6234:9:105"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "6228:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6252:61:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "6309:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "array_allocation_size_bytes",
                          "nodeType": "YulIdentifier",
                          "src": "6281:27:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6281:31:105"
                      }
                    ],
                    "functionName": {
                      "name": "allocate_memory",
                      "nodeType": "YulIdentifier",
                      "src": "6265:15:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6265:48:105"
                  },
                  "variables": [
                    {
                      "name": "array",
                      "nodeType": "YulTypedName",
                      "src": "6256:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "array",
                        "nodeType": "YulIdentifier",
                        "src": "6329:5:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "6336:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "6322:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6322:17:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6322:17:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6385:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6394:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6397:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6387:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6387:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6387:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "6362:2:105"
                              },
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "6366:2:105"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6358:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6358:11:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6371:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6354:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6354:20:105"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "6376:7:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6351:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6351:33:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6348:53:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "6436:2:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6440:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6432:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6432:11:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "array",
                            "nodeType": "YulIdentifier",
                            "src": "6449:5:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6456:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6445:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6445:14:105"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "6461:2:105"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "6410:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6410:54:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "6410:54:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6473:15:105",
                  "value": {
                    "name": "array",
                    "nodeType": "YulIdentifier",
                    "src": "6483:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6473:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5916:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5927:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5939:6:105",
                "type": ""
              }
            ],
            "src": "5859:635:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6586:161:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6632:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6641:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6644:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6634:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6634:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6634:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6607:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6616:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6603:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6603:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6628:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6599:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6599:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6596:52:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6657:33:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6680:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6667:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6667:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6657:6:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6699:42:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6726:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6737:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6722:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6722:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6709:12:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6709:32:105"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "6699:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint256t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6544:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6555:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6567:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6575:6:105",
                "type": ""
              }
            ],
            "src": "6499:248:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6882:201:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6920:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6929:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6932:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6922:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6922:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6922:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "startIndex",
                        "nodeType": "YulIdentifier",
                        "src": "6898:10:105"
                      },
                      {
                        "name": "endIndex",
                        "nodeType": "YulIdentifier",
                        "src": "6910:8:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6895:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6895:24:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6892:44:105"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6969:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6978:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6981:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6971:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6971:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6971:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "endIndex",
                        "nodeType": "YulIdentifier",
                        "src": "6951:8:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "6961:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6948:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6948:20:105"
                  },
                  "nodeType": "YulIf",
                  "src": "6945:40:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6994:36:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "7011:6:105"
                      },
                      {
                        "name": "startIndex",
                        "nodeType": "YulIdentifier",
                        "src": "7019:10:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7007:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7007:23:105"
                  },
                  "variableNames": [
                    {
                      "name": "offsetOut",
                      "nodeType": "YulIdentifier",
                      "src": "6994:9:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7039:38:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "endIndex",
                        "nodeType": "YulIdentifier",
                        "src": "7056:8:105"
                      },
                      {
                        "name": "startIndex",
                        "nodeType": "YulIdentifier",
                        "src": "7066:10:105"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "7052:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7052:25:105"
                  },
                  "variableNames": [
                    {
                      "name": "lengthOut",
                      "nodeType": "YulIdentifier",
                      "src": "7039:9:105"
                    }
                  ]
                }
              ]
            },
            "name": "calldata_array_index_range_access_t_bytes_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "6816:6:105",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "6824:6:105",
                "type": ""
              },
              {
                "name": "startIndex",
                "nodeType": "YulTypedName",
                "src": "6832:10:105",
                "type": ""
              },
              {
                "name": "endIndex",
                "nodeType": "YulTypedName",
                "src": "6844:8:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "offsetOut",
                "nodeType": "YulTypedName",
                "src": "6857:9:105",
                "type": ""
              },
              {
                "name": "lengthOut",
                "nodeType": "YulTypedName",
                "src": "6868:9:105",
                "type": ""
              }
            ],
            "src": "6752:331:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7136:177:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7171:111:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7192:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "7199:3:105",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "7204:10:105",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "7195:3:105"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "7195:20:105"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "7185:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7185:31:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7185:31:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7236:1:105",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7239:4:105",
                              "type": "",
                              "value": "0x11"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "7229:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7229:15:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7229:15:105"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7264:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7267:4:105",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7257:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7257:15:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7257:15:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "7152:1:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "y",
                            "nodeType": "YulIdentifier",
                            "src": "7159:1:105"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "7155:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7155:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7149:2:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7149:13:105"
                  },
                  "nodeType": "YulIf",
                  "src": "7146:136:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7291:16:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "7302:1:105"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "7305:1:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7298:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7298:9:105"
                  },
                  "variableNames": [
                    {
                      "name": "sum",
                      "nodeType": "YulIdentifier",
                      "src": "7291:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "checked_add_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "7119:1:105",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "7122:1:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "sum",
                "nodeType": "YulTypedName",
                "src": "7128:3:105",
                "type": ""
              }
            ],
            "src": "7088:225:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7475:218:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "7485:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7497:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7508:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7493:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7493:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "7485:4:105"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7520:29:105",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7538:3:105",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7543:1:105",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "7534:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7534:11:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7547:1:105",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "7530:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7530:19:105"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "7524:2:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7565:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "7580:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "7588:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "7576:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7576:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7558:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7558:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7558:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7612:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7623:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7608:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7608:18:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "7632:6:105"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "7640:2:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "7628:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7628:15:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7601:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7601:43:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7601:43:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7664:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7675:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7660:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7660:18:105"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "7680:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7653:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7653:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7653:34:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7428:9:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "7439:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7447:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7455:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7466:4:105",
                "type": ""
              }
            ],
            "src": "7318:375:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7872:180:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7889:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7900:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7882:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7882:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7882:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7923:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7934:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7919:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7919:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7939:2:105",
                        "type": "",
                        "value": "30"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7912:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7912:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7912:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7962:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7973:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7958:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7958:18:105"
                      },
                      {
                        "hexValue": "73656e646572206d7573742062652062726964676520636f6e7472616374",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "7978:32:105",
                        "type": "",
                        "value": "sender must be bridge contract"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7951:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7951:60:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7951:60:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8020:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8032:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8043:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8028:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8028:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8020:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0febc0fc8991eb26dfaaceeb4d73d25b76da338550ed76c60410fec84388058e__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7849:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "7863:4:105",
                "type": ""
              }
            ],
            "src": "7698:354:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8138:170:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8184:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8193:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8196:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8186:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8186:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8186:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8159:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8168:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "8155:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8155:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8180:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "8151:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8151:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "8148:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8209:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8228:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "8222:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8222:16:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "8213:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "8272:5:105"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_address",
                      "nodeType": "YulIdentifier",
                      "src": "8247:24:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8247:31:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8247:31:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8287:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "8297:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "8287:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8104:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "8115:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8127:6:105",
                "type": ""
              }
            ],
            "src": "8057:251:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8487:169:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8504:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8515:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8497:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8497:21:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8497:21:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8538:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8549:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8534:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8534:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8554:2:105",
                        "type": "",
                        "value": "19"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8527:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8527:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8527:30:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8577:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8588:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8573:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8573:18:105"
                      },
                      {
                        "hexValue": "4275726e206e6f742066726f6d206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "8593:21:105",
                        "type": "",
                        "value": "Burn not from owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8566:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8566:49:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8566:49:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8624:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8636:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8647:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8632:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8632:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8624:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_022a259017babcb2612d2defa37561056cc003abfb731fd4b6dd57f821218f71__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8464:9:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8478:4:105",
                "type": ""
              }
            ],
            "src": "8313:343:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8790:119:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "8800:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8812:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8823:2:105",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "8808:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8808:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "8800:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8842:9:105"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "8853:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8835:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8835:25:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8835:25:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8880:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8891:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8876:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8876:18:105"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "8896:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8869:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8869:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8869:34:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8751:9:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "8762:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8770:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "8781:4:105",
                "type": ""
              }
            ],
            "src": "8661:248:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9091:210:105",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9108:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "9123:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9139:3:105",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "9144:1:105",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "9135:3:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "9135:11:105"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9148:1:105",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "9131:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9131:19:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9119:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9119:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9101:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9101:51:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9101:51:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9172:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9183:2:105",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9168:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9168:18:105"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "9188:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9161:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9161:34:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9161:34:105"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9215:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9226:2:105",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9211:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9211:18:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9231:2:105",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9204:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9204:30:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9204:30:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9243:52:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "9268:6:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9280:9:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9291:2:105",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9276:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9276:18:105"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_bytes",
                      "nodeType": "YulIdentifier",
                      "src": "9251:16:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9251:44:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9243:4:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256_t_string_memory_ptr__to_t_address_t_uint256_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9044:9:105",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "9055:6:105",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "9063:6:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9071:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9082:4:105",
                "type": ""
              }
            ],
            "src": "8914:387:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9405:103:105",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9415:26:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9427:9:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9438:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9423:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9423:18:105"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "9415:4:105"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9457:9:105"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "9472:6:105"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9484:3:105",
                                "type": "",
                                "value": "224"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9489:10:105",
                                "type": "",
                                "value": "0xffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "9480:3:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9480:20:105"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "9468:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9468:33:105"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9450:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9450:52:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9450:52:105"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9374:9:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9385:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9396:4:105",
                "type": ""
              }
            ],
            "src": "9306:202:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9650:137:105",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9660:27:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "9680:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "9674:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9674:13:105"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "9664:6:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "9722:6:105"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9730:4:105",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9718:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9718:17:105"
                      },
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "9737:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "9742:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "copy_memory_to_memory",
                      "nodeType": "YulIdentifier",
                      "src": "9696:21:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9696:53:105"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9696:53:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9758:23:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "9769:3:105"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "9774:6:105"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "9765:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9765:16:105"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "9758:3:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "9626:3:105",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9631:6:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "9642:3:105",
                "type": ""
              }
            ],
            "src": "9513:274:105"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9870:199:105",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9916:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9925:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9928:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9918:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9918:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9918:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "9891:7:105"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9900:9:105"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "9887:3:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9887:23:105"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9912:2:105",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "9883:3:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9883:32:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9880:52:105"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9941:29:105",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9960:9:105"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "9954:5:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9954:16:105"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "9945:5:105",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10023:16:105",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10032:1:105",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10035:1:105",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "10025:6:105"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10025:12:105"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10025:12:105"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "9992:5:105"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "10013:5:105"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "10006:6:105"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "10006:13:105"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "9999:6:105"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9999:21:105"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "9989:2:105"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9989:32:105"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "9982:6:105"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9982:40:105"
                  },
                  "nodeType": "YulIf",
                  "src": "9979:60:105"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10048:15:105",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "10058:5:105"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "10048:6:105"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9836:9:105",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "9847:7:105",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "9859:6:105",
                "type": ""
              }
            ],
            "src": "9792:277:105"
          }
        ]
      },
      "contents": "{\n    { }\n    function validator_revert_address(value)\n    {\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function allocate_memory(size) -> memPtr\n    {\n        memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n        if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n    }\n    function array_allocation_size_bytes(length) -> size\n    {\n        if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n        size := add(and(add(length, 31), not(31)), 0x20)\n    }\n    function abi_decode_tuple_t_bytes_memory_ptr(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let _2 := calldataload(_1)\n        let array := allocate_memory(array_allocation_size_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n        calldatacopy(add(array, 32), add(_1, 32), _2)\n        mstore(add(add(array, _2), 32), 0)\n        value0 := array\n    }\n    function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_bytes32_t_bool_t_bool_t_struct$_Decimals_$14633_memory_ptr__to_t_bytes32_t_bool_t_bool_t_struct$_Decimals_$14633_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 160)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), iszero(iszero(value1)))\n        mstore(add(headStart, 64), iszero(iszero(value2)))\n        mstore(add(headStart, 96), iszero(iszero(mload(value3))))\n        mstore(add(headStart, 128), and(mload(add(value3, 32)), 0xff))\n    }\n    function abi_decode_bytes_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_bytes32t_addresst_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_address(value)\n        value1 := value\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function copy_memory_to_memory(src, dst, length)\n    {\n        let i := 0\n        for { } lt(i, length) { i := add(i, 32) }\n        {\n            mstore(add(dst, i), mload(add(src, i)))\n        }\n        if gt(i, length) { mstore(add(dst, length), 0) }\n    }\n    function abi_encode_bytes(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_bytes(value0, add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bytes32t_bytes_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let offset := calldataload(add(headStart, 32))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let value1_1, value2_1 := abi_decode_bytes_calldata(add(headStart, offset), dataEnd)\n        value1 := value1_1\n        value2 := value2_1\n    }\n    function abi_decode_tuple_t_address_payablet_address_payablet_uint256_fromMemory(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n        let value_1 := mload(add(headStart, 32))\n        validator_revert_address(value_1)\n        value1 := value_1\n        value2 := mload(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := calldataload(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := mload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        let _1 := add(headStart, offset)\n        if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n        let _2 := mload(_1)\n        let array := allocate_memory(array_allocation_size_bytes(_2))\n        mstore(array, _2)\n        if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n        copy_memory_to_memory(add(_1, 32), add(array, 32), _2)\n        value0 := array\n    }\n    function abi_decode_tuple_t_uint256t_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function calldata_array_index_range_access_t_bytes_calldata_ptr(offset, length, startIndex, endIndex) -> offsetOut, lengthOut\n    {\n        if gt(startIndex, endIndex) { revert(0, 0) }\n        if gt(endIndex, length) { revert(0, 0) }\n        offsetOut := add(offset, startIndex)\n        lengthOut := sub(endIndex, startIndex)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        if gt(x, not(y))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x11)\n            revert(0, 0x24)\n        }\n        sum := add(x, y)\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_0febc0fc8991eb26dfaaceeb4d73d25b76da338550ed76c60410fec84388058e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 30)\n        mstore(add(headStart, 64), \"sender must be bridge contract\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_address(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_stringliteral_022a259017babcb2612d2defa37561056cc003abfb731fd4b6dd57f821218f71__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 19)\n        mstore(add(headStart, 64), \"Burn not from owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_uint256_t_uint256__to_t_uint256_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_address_t_uint256_t_string_memory_ptr__to_t_address_t_uint256_t_string_memory_ptr__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n        mstore(add(headStart, 64), 96)\n        tail := abi_encode_bytes(value2, add(headStart, 96))\n    }\n    function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, shl(224, 0xffffffff)))\n    }\n    function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n    {\n        let length := mload(value0)\n        copy_memory_to_memory(add(value0, 0x20), pos, length)\n        end := add(pos, length)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n        value0 := value\n    }\n}",
      "id": 105,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "530:7125:75:-:0;;;833:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1298:30:76;;;530:7125:75;;14:290:105;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:105;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:105:o;:::-;530:7125:75;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "530:7125:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1745:120:76;;;;;;:::i;:::-;;:::i;:::-;;6508:350:75;;;;;;:::i;:::-;;:::i;830:69:76:-;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;830:69:76;;;;;;-1:-1:-1;;;;;2030:32:105;;;2012:51;;2000:2;1985:18;830:69:76;;;;;;;;442:42;;482:2;442:42;;;;;2246:4:105;2234:17;;;2216:36;;2204:2;2189:18;442:42:76;2074:184:105;396:39:76;;;;;966:93;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2536:25:105;;;2604:14;;2597:22;2592:2;2577:18;;;2570:50;;;;2663:14;;2656:22;2636:18;;;2629:50;;;;2729:13;;2722:21;2715:29;2710:2;2695:18;;2688:57;2792:15;2786:22;2810:4;2782:33;2776:3;2761:19;;2754:62;2523:3;2508:19;966:93:76;2263:559:105;2480:996:75;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4552:1462::-;;;;;;:::i;:::-;;:::i;7447:206::-;;;;;;:::i;:::-;;:::i;1745:120:76:-;1100:13;:11;:13::i;:::-;1829:29:::1;1842:15;1829:12;:29::i;:::-;1745:120:::0;:::o;6508:350:75:-;1100:13:76;:11;:13::i;:::-;6584:20:75::1;6614:17:::0;6641:12:::1;6712:4;6701:42;;;;;;;;;;;;:::i;:::-;6664:79:::0;;-1:-1:-1;6664:79:75;-1:-1:-1;6664:79:75;-1:-1:-1;6754:25:75::1;-1:-1:-1::0;;;;;6754:23:75;::::1;;:25::i;:::-;;6789:62;6803:12;6825:4;6832:9;6843:7;6789:13;:62::i;:::-;6574:284;;;6508:350:::0;:::o;2480:996::-;2638:21;1100:13:76;:11;:13::i;:::-;2671:20:75::1;2714:24;::::0;;::::1;2725:4:::0;2714:24:::1;:::i;:::-;2749:20;2772:45:::0;;;::::1;::::0;;;;;;;;-1:-1:-1;;;;;2772:45:75::1;2832:52:::0;;;2772:45;2832:52;;;;;;:66:::1;::::0;2702:36;;-1:-1:-1;2772:45:75;2832:66:::1;;2827:123;;2907:43;::::0;-1:-1:-1;;;2907:43:75;;-1:-1:-1;;;;;2030:32:105;;2907:43:75::1;::::0;::::1;2012:51:105::0;1985:18;;2907:43:75::1;;;;;;;;2827:123;3037:58;-1:-1:-1::0;;;;;3037:30:75;::::1;-1:-1:-1::0;;;3037:30:75::1;:58::i;:::-;3033:199;;;3196:24;::::0;-1:-1:-1;;;3196:24:75;;::::1;::::0;::::1;5823:25:105::0;;;3152:12:75;;-1:-1:-1;;;;;3196:15:75;::::1;::::0;::::1;::::0;5796:18:105;;3196:24:75::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;3196:24:75::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;3179:42;;3097:135;3033:199;-1:-1:-1::0;;;;;3246:52:75;::::1;;::::0;;;:38:::1;:52;::::0;;;;;;;:63:::1;::::0;::::1;::::0;::::1;;;3242:228;;;3325:44;3336:12;3350:9;3361:7;3325:10;:44::i;:::-;3242:228;;;3400:59;3411:12;3425:9;3444:4;3451:7;3400:10;:59::i;:::-;2661:815;;2480:996:::0;;;;;;:::o;4552:1462::-;4656:12;1100:13:76;:11;:13::i;:::-;4680:20:75::1;::::0;4763:40:::1;4680:20:::0;;4763:40;4960:30:::1;::::0;;::::1;4971:4:::0;4960:30:::1;:::i;:::-;4916:74:::0;;-1:-1:-1;4916:74:75;-1:-1:-1;5000:41:75::1;4916:74:::0;5038:2:::1;5000:37;:41::i;:::-;-1:-1:-1::0;5068:2:75::1;::::0;-1:-1:-1;5116:23:75::1;5068:2:::0;5121::::1;5116:4:::0;;:23:::1;:::i;:::-;5080:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;5080:60:75;;-1:-1:-1;5175:21:75::1;::::0;-1:-1:-1;5175:4:75;;-1:-1:-1;5180:14:75;;-1:-1:-1;5175:4:75;;:21:::1;:::i;:::-;5164:41;;;;;;;:::i;:::-;5150:55:::0;-1:-1:-1;5232:4:75;;5237:19:::1;:14:::0;5254:2:::1;5237:19;:::i;:::-;5232:59:::0;5279:11;5257:19:::1;:14:::0;5274:2:::1;5257:19;:::i;:::-;:33;;;;:::i;:::-;5232:59;;;;;;;:::i;:::-;5215:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5303:24;5420:4;5391:27;5387:38;5381:45;5361:65;;5446:20;5469:33:::0;:45:::1;5503:10;5469:45;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;5469:45:75::1;5446:68;;5529:38;:52;5568:12;-1:-1:-1::0;;;;;5529:52:75::1;-1:-1:-1::0;;;;;5529:52:75::1;;;;;;;;;;;;:66;;;;;;;;;;;;5524:123;;5604:43;::::0;-1:-1:-1;;;5604:43:75;;-1:-1:-1;;;;;2030:32:105;;5604:43:75::1;::::0;::::1;2012:51:105::0;1985:18;;5604:43:75::1;1866:203:105::0;5524:123:75::1;-1:-1:-1::0;;;;;5662:52:75;::::1;;::::0;;;:38:::1;:52;::::0;;;;;;;:63:::1;::::0;::::1;::::0;::::1;;;5658:273;;;5741:70;5752:12;5774:16;5766:25;;5793:7;5802:8;5741:10;:70::i;:::-;5658:273;;;5842:78;5856:12;5878:4;5893:16;5885:25;;5912:7;5842:13;:78::i;:::-;5947:60;::::0;;-1:-1:-1;;;;;7576:15:105;;;;5947:60:75::1;::::0;::::1;7558:34:105::0;5972:25:75::1;::::0;;::::1;7608:18:105::0;;;7601:43;7660:18;;;7653:34;;;;5947:60:75;;;;;;;;;;7493:18:105;;5947:60:75;;;-1:-1:-1;5947:60:75;;4552:1462;-1:-1:-1;;;;;;;;4552:1462:75:o;7447:206::-;1100:13:76;:11;:13::i;:::-;7564:31:75::1;:15;-1:-1:-1::0;;;;;7564:29:75::1;;:31::i;:::-;-1:-1:-1::0;2028:33:76;:45;;;;;;;;;;;:63;;-1:-1:-1;;;;;;2028:63:76;-1:-1:-1;;;;;2028:63:76;;;;;;;;2101:55;;-1:-1:-1;2101:55:76;;;;;;;:79;;;2190:69;;:76;;-1:-1:-1;;2276:74:76;;;;;;7605:41:75::1;1942:415:76::0;1341:124;1395:10;-1:-1:-1;;;;;1409:14:76;1395:28;;1387:71;;;;-1:-1:-1;;;1387:71:76;;7900:2:105;1387:71:76;;;7882:21:105;7939:2;7919:18;;;7912:30;7978:32;7958:18;;;7951:60;8028:18;;1387:71:76;7698:354:105;1387:71:76;1341:124::o;2363:285::-;-1:-1:-1;;;;;2434:55:76;;;;;;:38;:55;;;;;;;;:69;;;;2429:129;;2512:46;;-1:-1:-1;;;2512:46:76;;-1:-1:-1;;;;;2030:32:105;;2512:46:76;;;2012:51:105;1985:18;;2512:46:76;1866:203:105;2429:129:76;-1:-1:-1;;;;;2568:55:76;;;;;2637:4;2568:55;;;;;;;;:66;:73;;-1:-1:-1;;2568:73:76;;;;;2363:285::o;303:150:101:-;362:7;-1:-1:-1;;;;;385:18:101;;381:44;;412:13;;-1:-1:-1;;;412:13:101;;;;;;;;;;;381:44;-1:-1:-1;442:4:101;303:150::o;1182:216:55:-;1345:46;;-1:-1:-1;;;1345:46:55;;-1:-1:-1;;;;;7576:15:105;;;1345:46:55;;;7558:34:105;7628:15;;;7608:18;;;7601:43;7660:18;;;7653:34;;;1322:12:55;;1345:19;;;;;;7493:18:105;;1345:46:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1287:111;1182:216;;;;:::o;1318:274:39:-;1405:4;1512:23;1527:7;1512:14;:23::i;:::-;:73;;;;;1539:46;1564:7;1573:11;1539:24;:46::i;:::-;1505:80;;1318:274;;;;;:::o;2132:276:55:-;2315:23;;-1:-1:-1;;;2315:23:55;;;;;5823:25:105;;;2284:12:55;;-1:-1:-1;;;;;2315:32:55;;;;:14;;;;;;5796:18:105;;2315:23:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2315:32:55;;2307:64;;;;-1:-1:-1;;;2307:64:55;;8515:2:105;2307:64:55;;;8497:21:105;8554:2;8534:18;;;8527:30;-1:-1:-1;;;8573:18:105;;;8566:49;8632:18;;2307:64:55;8313:343:105;2307:64:55;2381:20;;-1:-1:-1;;;2381:20:55;;;;;5823:25:105;;;-1:-1:-1;;;;;2381:11:55;;;;;5796:18:105;;2381:20:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2215:193;2132:276;;;:::o;459:185:101:-;531:7;564:8;554:6;:18;550:64;;581:33;;-1:-1:-1;;;581:33:101;;;;;8835:25:105;;;8876:18;;;8869:34;;;8808:18;;581:33:101;8661:248:105;550:64:101;-1:-1:-1;631:6:101;;459:185;-1:-1:-1;459:185:101:o;1678:250:55:-;1876:45;;-1:-1:-1;;;1876:45:55;;1853:12;;-1:-1:-1;;;;;1876:11:55;;;;;:45;;1888:9;;1899:7;;1915:4;;1876:45;;;:::i;689:411:39:-;753:4;960:60;985:7;-1:-1:-1;;;960:24:39;:60::i;:::-;:133;;;;-1:-1:-1;1037:56:39;1062:7;-1:-1:-1;;;;;;1037:24:39;:56::i;:::-;1036:57;941:152;689:411;-1:-1:-1;;689:411:39:o;4208:409::-;4346:71;;;-1:-1:-1;;;;;;9468:33:105;;4346:71:39;;;;9450:52:105;;;;4346:71:39;;;;;;;;;;9423:18:105;;;;4346:71:39;;;;;;;-1:-1:-1;;;;;4346:71:39;-1:-1:-1;;;4346:71:39;;;4465:45;;4301:4;;4346:71;4301:4;;;;-1:-1:-1;;;;;4465:18:39;;;4489:5;;4465:45;;4346:71;;4465:45;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4427:83;;;;4540:2;4524:6;:13;:18;4520:36;;;4551:5;4544:12;;;;;;;4520:36;4573:7;:37;;;;;4595:6;4584:26;;;;;;;;;;;;:::i;:::-;4566:44;4208:409;-1:-1:-1;;;;;;4208:409:39:o;14:131:105:-;-1:-1:-1;;;;;89:31:105;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:105:o;402:127::-;463:10;458:3;454:20;451:1;444:31;494:4;491:1;484:15;518:4;515:1;508:15;534:275;605:2;599:9;670:2;651:13;;-1:-1:-1;;647:27:105;635:40;;705:18;690:34;;726:22;;;687:62;684:88;;;752:18;;:::i;:::-;788:2;781:22;534:275;;-1:-1:-1;534:275:105:o;814:186::-;862:4;895:18;887:6;884:30;881:56;;;917:18;;:::i;:::-;-1:-1:-1;983:2:105;962:15;-1:-1:-1;;958:29:105;989:4;954:40;;814:186::o;1005:671::-;1073:6;1126:2;1114:9;1105:7;1101:23;1097:32;1094:52;;;1142:1;1139;1132:12;1094:52;1182:9;1169:23;1215:18;1207:6;1204:30;1201:50;;;1247:1;1244;1237:12;1201:50;1270:22;;1323:4;1315:13;;1311:27;-1:-1:-1;1301:55:105;;1352:1;1349;1342:12;1301:55;1388:2;1375:16;1413:48;1429:31;1457:2;1429:31;:::i;:::-;1413:48;:::i;:::-;1484:2;1477:5;1470:17;1524:7;1519:2;1514;1510;1506:11;1502:20;1499:33;1496:53;;;1545:1;1542;1535:12;1496:53;1600:2;1595;1591;1587:11;1582:2;1575:5;1571:14;1558:45;1644:1;1623:14;;;1639:2;1619:23;1612:34;;;;1627:5;1005:671;-1:-1:-1;;;;1005:671:105:o;1681:180::-;1740:6;1793:2;1781:9;1772:7;1768:23;1764:32;1761:52;;;1809:1;1806;1799:12;1761:52;-1:-1:-1;1832:23:105;;1681:180;-1:-1:-1;1681:180:105:o;2827:347::-;2878:8;2888:6;2942:3;2935:4;2927:6;2923:17;2919:27;2909:55;;2960:1;2957;2950:12;2909:55;-1:-1:-1;2983:20:105;;3026:18;3015:30;;3012:50;;;3058:1;3055;3048:12;3012:50;3095:4;3087:6;3083:17;3071:29;;3147:3;3140:4;3131:6;3123;3119:19;3115:30;3112:39;3109:59;;;3164:1;3161;3154:12;3109:59;2827:347;;;;;:::o;3179:612::-;3267:6;3275;3283;3291;3344:2;3332:9;3323:7;3319:23;3315:32;3312:52;;;3360:1;3357;3350:12;3312:52;3396:9;3383:23;3373:33;;3456:2;3445:9;3441:18;3428:32;3469:31;3494:5;3469:31;:::i;:::-;3519:5;-1:-1:-1;3575:2:105;3560:18;;3547:32;3602:18;3591:30;;3588:50;;;3634:1;3631;3624:12;3588:50;3673:58;3723:7;3714:6;3703:9;3699:22;3673:58;:::i;:::-;3179:612;;;;-1:-1:-1;3750:8:105;-1:-1:-1;;;;3179:612:105:o;3796:258::-;3868:1;3878:113;3892:6;3889:1;3886:13;3878:113;;;3968:11;;;3962:18;3949:11;;;3942:39;3914:2;3907:10;3878:113;;;4009:6;4006:1;4003:13;4000:48;;;-1:-1:-1;;4044:1:105;4026:16;;4019:27;3796:258::o;4059:257::-;4100:3;4138:5;4132:12;4165:6;4160:3;4153:19;4181:63;4237:6;4230:4;4225:3;4221:14;4214:4;4207:5;4203:16;4181:63;:::i;:::-;4298:2;4277:15;-1:-1:-1;;4273:29:105;4264:39;;;;4305:4;4260:50;;4059:257;-1:-1:-1;;4059:257:105:o;4321:217::-;4468:2;4457:9;4450:21;4431:4;4488:44;4528:2;4517:9;4513:18;4505:6;4488:44;:::i;4543:477::-;4622:6;4630;4638;4691:2;4679:9;4670:7;4666:23;4662:32;4659:52;;;4707:1;4704;4697:12;4659:52;4743:9;4730:23;4720:33;;4804:2;4793:9;4789:18;4776:32;4831:18;4823:6;4820:30;4817:50;;;4863:1;4860;4853:12;4817:50;4902:58;4952:7;4943:6;4932:9;4928:22;4902:58;:::i;:::-;4543:477;;4979:8;;-1:-1:-1;4876:84:105;;-1:-1:-1;;;;4543:477:105:o;5025:462::-;5129:6;5137;5145;5198:2;5186:9;5177:7;5173:23;5169:32;5166:52;;;5214:1;5211;5204:12;5166:52;5246:9;5240:16;5265:31;5290:5;5265:31;:::i;:::-;5365:2;5350:18;;5344:25;5315:5;;-1:-1:-1;5378:33:105;5344:25;5378:33;:::i;:::-;5430:7;5420:17;;;5477:2;5466:9;5462:18;5456:25;5446:35;;5025:462;;;;;:::o;5859:635::-;5939:6;5992:2;5980:9;5971:7;5967:23;5963:32;5960:52;;;6008:1;6005;5998:12;5960:52;6041:9;6035:16;6074:18;6066:6;6063:30;6060:50;;;6106:1;6103;6096:12;6060:50;6129:22;;6182:4;6174:13;;6170:27;-1:-1:-1;6160:55:105;;6211:1;6208;6201:12;6160:55;6240:2;6234:9;6265:48;6281:31;6309:2;6281:31;:::i;6265:48::-;6336:2;6329:5;6322:17;6376:7;6371:2;6366;6362;6358:11;6354:20;6351:33;6348:53;;;6397:1;6394;6387:12;6348:53;6410:54;6461:2;6456;6449:5;6445:14;6440:2;6436;6432:11;6410:54;:::i;:::-;6483:5;5859:635;-1:-1:-1;;;;;5859:635:105:o;6499:248::-;6567:6;6575;6628:2;6616:9;6607:7;6603:23;6599:32;6596:52;;;6644:1;6641;6634:12;6596:52;-1:-1:-1;;6667:23:105;;;6737:2;6722:18;;;6709:32;;-1:-1:-1;6499:248:105:o;6752:331::-;6857:9;6868;6910:8;6898:10;6895:24;6892:44;;;6932:1;6929;6922:12;6892:44;6961:6;6951:8;6948:20;6945:40;;;6981:1;6978;6971:12;6945:40;-1:-1:-1;;7007:23:105;;;7052:25;;;;;-1:-1:-1;6752:331:105:o;7088:225::-;7128:3;7159:1;7155:6;7152:1;7149:13;7146:136;;;7204:10;7199:3;7195:20;7192:1;7185:31;7239:4;7236:1;7229:15;7267:4;7264:1;7257:15;7146:136;-1:-1:-1;7298:9:105;;7088:225::o;8057:251::-;8127:6;8180:2;8168:9;8159:7;8155:23;8151:32;8148:52;;;8196:1;8193;8186:12;8148:52;8228:9;8222:16;8247:31;8272:5;8247:31;:::i;8914:387::-;9148:1;9144;9139:3;9135:11;9131:19;9123:6;9119:32;9108:9;9101:51;9188:6;9183:2;9172:9;9168:18;9161:34;9231:2;9226;9215:9;9211:18;9204:30;9082:4;9251:44;9291:2;9280:9;9276:18;9268:6;9251:44;:::i;9513:274::-;9642:3;9680:6;9674:13;9696:53;9742:6;9737:3;9730:4;9722:6;9718:17;9696:53;:::i;:::-;9765:16;;;;;9513:274;-1:-1:-1;;9513:274:105:o;9792:277::-;9859:6;9912:2;9900:9;9891:7;9887:23;9883:32;9880:52;;;9928:1;9925;9918:12;9880:52;9960:9;9954:16;10013:5;10006:13;9999:21;9992:5;9989:32;9979:60;;10035:1;10032;10025:12",
  "source": "// The Licensed Work is (c) 2022 Sygma\n// SPDX-License-Identifier: LGPL-3.0-only\npragma solidity 0.8.11;\n\nimport \"../interfaces/IHandler.sol\";\nimport \"./ERCHandlerHelpers.sol\";\nimport \"../ERC721Safe.sol\";\nimport \"@openzeppelin/contracts/utils/introspection/ERC165Checker.sol\";\nimport \"@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol\";\n\n\n/**\n    @title Handles ERC721 deposits and deposit executions.\n    @author ChainSafe Systems.\n    @notice This contract is intended to be used with the Bridge contract.\n */\ncontract ERC721Handler is IHandler, ERCHandlerHelpers, ERC721Safe {\n    using SanityChecks for *;\n    using ERC165Checker for address;\n\n    bytes4 private constant _INTERFACE_ERC721_METADATA = 0x5b5e139f;\n\n    /**\n        @param bridgeAddress Contract address of previously deployed Bridge.\n     */\n    constructor(\n        address bridgeAddress\n    ) ERCHandlerHelpers(bridgeAddress) {\n    }\n\n    /**\n        @notice A deposit is initiated by making a deposit in the Bridge contract.\n        @param resourceID ResourceID used to find address of token to be used for deposit.\n        @param depositor Address of account making the deposit in the Bridge contract.\n        @param data Consists of {tokenID} padded to 32 bytes.\n        @notice Data passed into the function should be constructed as follows:\n        tokenID                                     uint256    bytes    0  - 32\n        destinationRecipientAddress     length      uint256    bytes    32 - 64\n        destinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress))\n        metadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32)\n        metadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - END\n        @notice If the corresponding {tokenAddress} for the parsed {resourceID} supports {_INTERFACE_ERC721_METADATA},\n        then {metaData} will be set according to the {tokenURI} method in the token contract.\n        @dev Depending if the corresponding {tokenAddress} for the parsed {resourceID} is\n        marked true in {_tokenContractAddressToTokenProperties[tokenAddress].isBurnable}, deposited tokens will be burned, if not, they will be locked.\n        @return metaData : the deposited token metadata acquired by calling a {tokenURI} method in the token contract.\n     */\n    function deposit(\n        bytes32    resourceID,\n        address     depositor,\n        bytes       calldata data\n    ) external override onlyBridge returns (bytes memory metaData) {\n        uint         tokenID;\n\n        (tokenID) = abi.decode(data, (uint));\n\n        address tokenAddress = _resourceIDToTokenContractAddress[resourceID];\n        if (!_tokenContractAddressToTokenProperties[tokenAddress].isWhitelisted) revert ContractAddressNotWhitelisted(tokenAddress);\n\n        // Check if the contract supports metadata, fetch it if it does\n        if (tokenAddress.supportsInterface(_INTERFACE_ERC721_METADATA)) {\n            IERC721Metadata erc721 = IERC721Metadata(tokenAddress);\n            metaData = bytes(erc721.tokenURI(tokenID));\n        }\n\n        if (_tokenContractAddressToTokenProperties[tokenAddress].isBurnable) {\n            burnERC721(tokenAddress, depositor, tokenID);\n        } else {\n            lockERC721(tokenAddress, depositor, address(this), tokenID);\n        }\n    }\n\n    /**\n        @notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\n        by a relayer on the deposit's destination chain.\n        @param resourceID ResourceID to be used when making deposits.\n        @param data Consists of {tokenID}, {resourceID}, {lenDestinationRecipientAddress},\n        {destinationRecipientAddress}, {lenMeta}, and {metaData} all padded to 32 bytes.\n        @notice Data passed into the function should be constructed as follows:\n        tokenID                                     uint256    bytes    0  - 32\n        destinationRecipientAddress     length      uint256    bytes    32 - 64\n        destinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress))\n        metadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32)\n        metadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - END\n     */\n    function executeProposal(bytes32 resourceID, bytes calldata data) external override onlyBridge returns (bytes memory) {\n        uint         tokenID;\n        uint         lenDestinationRecipientAddress;\n        bytes memory destinationRecipientAddress;\n        uint         offsetMetaData;\n        uint         lenMetaData;\n        bytes memory metaData;\n\n        (tokenID, lenDestinationRecipientAddress) = abi.decode(data, (uint, uint));\n        lenDestinationRecipientAddress.mustBe(20);\n        offsetMetaData = 84;\n        destinationRecipientAddress = bytes(data[64:offsetMetaData]);\n        lenMetaData = abi.decode(data[offsetMetaData:], (uint));\n        metaData = bytes(data[offsetMetaData + 32:offsetMetaData + 32 + lenMetaData]);\n\n        bytes20 recipientAddress;\n\n        assembly {\n            recipientAddress := mload(add(destinationRecipientAddress, 0x20))\n        }\n\n        address tokenAddress = _resourceIDToTokenContractAddress[resourceID];\n        if (!_tokenContractAddressToTokenProperties[tokenAddress].isWhitelisted) revert ContractAddressNotWhitelisted(tokenAddress);\n\n        if (_tokenContractAddressToTokenProperties[tokenAddress].isBurnable) {\n            mintERC721(tokenAddress, address(recipientAddress), tokenID, metaData);\n        } else {\n            releaseERC721(tokenAddress, address(this), address(recipientAddress), tokenID);\n        }\n        return abi.encode(tokenAddress, address(recipientAddress), tokenID);\n    }\n\n    /**\n        @notice Used to manually release ERC721 tokens from ERC721Safe.\n        @param data Consists of {tokenAddress}, {recipient}, and {tokenID} all padded to 32 bytes.\n        @notice Data passed into the function should be constructed as follows:\n        tokenAddress                           address     bytes  0 - 32\n        recipient                              address     bytes  32 - 64\n        tokenID                                uint        bytes  64 - 96\n     */\n    function withdraw(bytes memory data) external override onlyBridge {\n        address tokenAddress;\n        address recipient;\n        uint tokenID;\n\n        (tokenAddress, recipient, tokenID) = abi.decode(data, (address, address, uint));\n\n        recipient.mustNotBeZero();\n        releaseERC721(tokenAddress, address(this), recipient, tokenID);\n    }\n\n    /**\n        @notice Sets {_resourceIDToContractAddress} with {contractAddress},\n        {_tokenContractAddressToTokenProperties[tokenAddress].resourceID} with {resourceID} and\n        {_tokenContractAddressToTokenProperties[tokenAddress].isWhitelisted} to true for {contractAddress} in ERCHandlerHelpers contract.\n        @param resourceID ResourceID to be used when making deposits.\n        @param contractAddress Address of contract to be called when a deposit is made and a deposited is executed.\n        @param args Additional data to be passed to specified handler.\n     */\n    function setResource(bytes32 resourceID, address contractAddress, bytes calldata args) external onlyBridge {\n        contractAddress.mustNotBeZero();\n        _setResource(resourceID, contractAddress);\n    }\n}\n",
  "sourcePath": "/home/runner/work/sygma-solidity/sygma-solidity/contracts/handlers/ERC721Handler.sol",
  "ast": {
    "absolutePath": "project:/contracts/handlers/ERC721Handler.sol",
    "exportedSymbols": {
      "AccessControl": [
        18612
      ],
      "Address": [
        5283
      ],
      "Context": [
        5305
      ],
      "Counters": [
        5379
      ],
      "ERC165": [
        6167
      ],
      "ERC165Checker": [
        6369
      ],
      "ERC721": [
        4605
      ],
      "ERC721Burnable": [
        4769
      ],
      "ERC721Handler": [
        14616
      ],
      "ERC721MinterBurnerPauser": [
        9425
      ],
      "ERC721Pausable": [
        4806
      ],
      "ERC721Safe": [
        9552
      ],
      "ERC721URIStorage": [
        4934
      ],
      "ERCHandlerHelpers": [
        14917
      ],
      "EnumerableSet": [
        7373
      ],
      "IERC165": [
        6381
      ],
      "IERC721": [
        4721
      ],
      "IERC721Metadata": [
        4961
      ],
      "IERC721Receiver": [
        4739
      ],
      "IERCHandler": [
        18195
      ],
      "IHandler": [
        18301
      ],
      "Pausable": [
        728
      ],
      "SanityChecks": [
        19158
      ],
      "Strings": [
        5582
      ]
    },
    "id": 14617,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 14265,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "81:23:75"
      },
      {
        "absolutePath": "project:/contracts/interfaces/IHandler.sol",
        "file": "../interfaces/IHandler.sol",
        "id": 14266,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14617,
        "sourceUnit": 18302,
        "src": "106:36:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/handlers/ERCHandlerHelpers.sol",
        "file": "./ERCHandlerHelpers.sol",
        "id": 14267,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14617,
        "sourceUnit": 14918,
        "src": "143:33:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/ERC721Safe.sol",
        "file": "../ERC721Safe.sol",
        "id": 14268,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14617,
        "sourceUnit": 9553,
        "src": "177:27:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
        "file": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
        "id": 14269,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14617,
        "sourceUnit": 6370,
        "src": "205:71:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
        "file": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
        "id": 14270,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14617,
        "sourceUnit": 4962,
        "src": "277:77:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 14272,
              "name": "IHandler",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18301,
              "src": "556:8:75"
            },
            "id": 14273,
            "nodeType": "InheritanceSpecifier",
            "src": "556:8:75"
          },
          {
            "baseName": {
              "id": 14274,
              "name": "ERCHandlerHelpers",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 14917,
              "src": "566:17:75"
            },
            "id": 14275,
            "nodeType": "InheritanceSpecifier",
            "src": "566:17:75"
          },
          {
            "baseName": {
              "id": 14276,
              "name": "ERC721Safe",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 9552,
              "src": "585:10:75"
            },
            "id": 14277,
            "nodeType": "InheritanceSpecifier",
            "src": "585:10:75"
          }
        ],
        "canonicalName": "ERC721Handler",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 14271,
          "nodeType": "StructuredDocumentation",
          "src": "357:172:75",
          "text": "@title Handles ERC721 deposits and deposit executions.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
        },
        "fullyImplemented": true,
        "id": 14616,
        "linearizedBaseContracts": [
          14616,
          9552,
          14917,
          18195,
          18301
        ],
        "name": "ERC721Handler",
        "nameLocation": "539:13:75",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 14279,
            "libraryName": {
              "id": 14278,
              "name": "SanityChecks",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19158,
              "src": "608:12:75"
            },
            "nodeType": "UsingForDirective",
            "src": "602:25:75"
          },
          {
            "id": 14282,
            "libraryName": {
              "id": 14280,
              "name": "ERC165Checker",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 6369,
              "src": "638:13:75"
            },
            "nodeType": "UsingForDirective",
            "src": "632:32:75",
            "typeName": {
              "id": 14281,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "656:7:75",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "constant": true,
            "id": 14285,
            "mutability": "constant",
            "name": "_INTERFACE_ERC721_METADATA",
            "nameLocation": "694:26:75",
            "nodeType": "VariableDeclaration",
            "scope": 14616,
            "src": "670:63:75",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 14283,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "670:6:75",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30783562356531333966",
              "id": 14284,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "723:10:75",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1532892063_by_1",
                "typeString": "int_const 1532892063"
              },
              "value": "0x5b5e139f"
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 14294,
              "nodeType": "Block",
              "src": "915:7:75",
              "statements": []
            },
            "documentation": {
              "id": 14286,
              "nodeType": "StructuredDocumentation",
              "src": "740:88:75",
              "text": "@param bridgeAddress Contract address of previously deployed Bridge."
            },
            "id": 14295,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 14291,
                    "name": "bridgeAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14288,
                    "src": "900:13:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 14292,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 14290,
                  "name": "ERCHandlerHelpers",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14917,
                  "src": "882:17:75"
                },
                "nodeType": "ModifierInvocation",
                "src": "882:32:75"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14288,
                  "mutability": "mutable",
                  "name": "bridgeAddress",
                  "nameLocation": "862:13:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14295,
                  "src": "854:21:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14287,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "854:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "844:37:75"
            },
            "returnParameters": {
              "id": 14293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "915:0:75"
            },
            "scope": 14616,
            "src": "833:89:75",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              18280
            ],
            "body": {
              "id": 14386,
              "nodeType": "Block",
              "src": "2661:815:75",
              "statements": [
                {
                  "assignments": [
                    14311
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14311,
                      "mutability": "mutable",
                      "name": "tokenID",
                      "nameLocation": "2684:7:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14386,
                      "src": "2671:20:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14310,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2671:4:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14312,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2671:20:75"
                },
                {
                  "expression": {
                    "id": 14322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 14313,
                          "name": "tokenID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14311,
                          "src": "2703:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 14314,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "2702:9:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 14317,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14302,
                          "src": "2725:4:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 14319,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2732:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 14318,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "2732:4:75",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 14320,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2731:6:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        ],
                        "expression": {
                          "id": 14315,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967295,
                          "src": "2714:3:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 14316,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "2714:10:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 14321,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2714:24:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2702:36:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14323,
                  "nodeType": "ExpressionStatement",
                  "src": "2702:36:75"
                },
                {
                  "assignments": [
                    14325
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14325,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "2757:12:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14386,
                      "src": "2749:20:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14324,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2749:7:75",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14329,
                  "initialValue": {
                    "baseExpression": {
                      "id": 14326,
                      "name": "_resourceIDToTokenContractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14651,
                      "src": "2772:33:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 14328,
                    "indexExpression": {
                      "id": 14327,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14298,
                      "src": "2806:10:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2772:45:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2749:68:75"
                },
                {
                  "condition": {
                    "id": 14334,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "2831:67:75",
                    "subExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 14330,
                          "name": "_tokenContractAddressToTokenProperties",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14656,
                          "src": "2832:38:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                            "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                          }
                        },
                        "id": 14332,
                        "indexExpression": {
                          "id": 14331,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14325,
                          "src": "2871:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2832:52:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                          "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                        }
                      },
                      "id": 14333,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isWhitelisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14637,
                      "src": "2832:66:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14339,
                  "nodeType": "IfStatement",
                  "src": "2827:123:75",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "id": 14336,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14325,
                          "src": "2937:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 14335,
                        "name": "ContractAddressNotWhitelisted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14647,
                        "src": "2907:29:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                          "typeString": "function (address) pure"
                        }
                      },
                      "id": 14337,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2907:43:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 14338,
                    "nodeType": "RevertStatement",
                    "src": "2900:50:75"
                  }
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 14342,
                        "name": "_INTERFACE_ERC721_METADATA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14285,
                        "src": "3068:26:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "expression": {
                        "id": 14340,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14325,
                        "src": "3037:12:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 14341,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "supportsInterface",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6217,
                      "src": "3037:30:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address,bytes4) view returns (bool)"
                      }
                    },
                    "id": 14343,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3037:58:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14362,
                  "nodeType": "IfStatement",
                  "src": "3033:199:75",
                  "trueBody": {
                    "id": 14361,
                    "nodeType": "Block",
                    "src": "3097:135:75",
                    "statements": [
                      {
                        "assignments": [
                          14346
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 14346,
                            "mutability": "mutable",
                            "name": "erc721",
                            "nameLocation": "3127:6:75",
                            "nodeType": "VariableDeclaration",
                            "scope": 14361,
                            "src": "3111:22:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC721Metadata_$4961",
                              "typeString": "contract IERC721Metadata"
                            },
                            "typeName": {
                              "id": 14345,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 14344,
                                "name": "IERC721Metadata",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 4961,
                                "src": "3111:15:75"
                              },
                              "referencedDeclaration": 4961,
                              "src": "3111:15:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC721Metadata_$4961",
                                "typeString": "contract IERC721Metadata"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 14350,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 14348,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14325,
                              "src": "3152:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 14347,
                            "name": "IERC721Metadata",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4961,
                            "src": "3136:15:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IERC721Metadata_$4961_$",
                              "typeString": "type(contract IERC721Metadata)"
                            }
                          },
                          "id": 14349,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3136:29:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC721Metadata_$4961",
                            "typeString": "contract IERC721Metadata"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3111:54:75"
                      },
                      {
                        "expression": {
                          "id": 14359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14351,
                            "name": "metaData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14308,
                            "src": "3179:8:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 14356,
                                    "name": "tokenID",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14311,
                                    "src": "3212:7:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 14354,
                                    "name": "erc721",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14346,
                                    "src": "3196:6:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC721Metadata_$4961",
                                      "typeString": "contract IERC721Metadata"
                                    }
                                  },
                                  "id": 14355,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tokenURI",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4960,
                                  "src": "3196:15:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                                    "typeString": "function (uint256) view external returns (string memory)"
                                  }
                                },
                                "id": 14357,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3196:24:75",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "id": 14353,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3190:5:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                "typeString": "type(bytes storage pointer)"
                              },
                              "typeName": {
                                "id": 14352,
                                "name": "bytes",
                                "nodeType": "ElementaryTypeName",
                                "src": "3190:5:75",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 14358,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3190:31:75",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "3179:42:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 14360,
                        "nodeType": "ExpressionStatement",
                        "src": "3179:42:75"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "expression": {
                      "baseExpression": {
                        "id": 14363,
                        "name": "_tokenContractAddressToTokenProperties",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14656,
                        "src": "3246:38:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                          "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                        }
                      },
                      "id": 14365,
                      "indexExpression": {
                        "id": 14364,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14325,
                        "src": "3285:12:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3246:52:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                        "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                      }
                    },
                    "id": 14366,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isBurnable",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14639,
                    "src": "3246:63:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 14384,
                    "nodeType": "Block",
                    "src": "3386:84:75",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14375,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14325,
                              "src": "3411:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14376,
                              "name": "depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14300,
                              "src": "3425:9:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 14379,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "3444:4:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC721Handler_$14616",
                                    "typeString": "contract ERC721Handler"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ERC721Handler_$14616",
                                    "typeString": "contract ERC721Handler"
                                  }
                                ],
                                "id": 14378,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3436:7:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 14377,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3436:7:75",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 14380,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3436:13:75",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14381,
                              "name": "tokenID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14311,
                              "src": "3451:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14374,
                            "name": "lockERC721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9458,
                            "src": "3400:10:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 14382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3400:59:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14383,
                        "nodeType": "ExpressionStatement",
                        "src": "3400:59:75"
                      }
                    ]
                  },
                  "id": 14385,
                  "nodeType": "IfStatement",
                  "src": "3242:228:75",
                  "trueBody": {
                    "id": 14373,
                    "nodeType": "Block",
                    "src": "3311:69:75",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14368,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14325,
                              "src": "3336:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14369,
                              "name": "depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14300,
                              "src": "3350:9:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14370,
                              "name": "tokenID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14311,
                              "src": "3361:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14367,
                            "name": "burnERC721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9551,
                            "src": "3325:10:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 14371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3325:44:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14372,
                        "nodeType": "ExpressionStatement",
                        "src": "3325:44:75"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 14296,
              "nodeType": "StructuredDocumentation",
              "src": "928:1547:75",
              "text": "@notice A deposit is initiated by making a deposit in the Bridge contract.\n@param resourceID ResourceID used to find address of token to be used for deposit.\n@param depositor Address of account making the deposit in the Bridge contract.\n@param data Consists of {tokenID} padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenID                                     uint256    bytes    0  - 32\ndestinationRecipientAddress     length      uint256    bytes    32 - 64\ndestinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress))\nmetadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32)\nmetadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - END\n@notice If the corresponding {tokenAddress} for the parsed {resourceID} supports {_INTERFACE_ERC721_METADATA},\nthen {metaData} will be set according to the {tokenURI} method in the token contract.\n@dev Depending if the corresponding {tokenAddress} for the parsed {resourceID} is\nmarked true in {_tokenContractAddressToTokenProperties[tokenAddress].isBurnable}, deposited tokens will be burned, if not, they will be locked.\n@return metaData : the deposited token metadata acquired by calling a {tokenURI} method in the token contract."
            },
            "functionSelector": "b07e54bb",
            "id": 14387,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14306,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14305,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "2618:10:75"
                },
                "nodeType": "ModifierInvocation",
                "src": "2618:10:75"
              }
            ],
            "name": "deposit",
            "nameLocation": "2489:7:75",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14304,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2609:8:75"
            },
            "parameters": {
              "id": 14303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14298,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "2517:10:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14387,
                  "src": "2506:21:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14297,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2506:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14300,
                  "mutability": "mutable",
                  "name": "depositor",
                  "nameLocation": "2549:9:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14387,
                  "src": "2537:21:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14299,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2537:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14302,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "2589:4:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14387,
                  "src": "2568:25:75",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14301,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2568:5:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2496:103:75"
            },
            "returnParameters": {
              "id": 14309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14308,
                  "mutability": "mutable",
                  "name": "metaData",
                  "nameLocation": "2651:8:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14387,
                  "src": "2638:21:75",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14307,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2638:5:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2637:23:75"
            },
            "scope": 14616,
            "src": "2480:996:75",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              18290
            ],
            "body": {
              "id": 14540,
              "nodeType": "Block",
              "src": "4670:1344:75",
              "statements": [
                {
                  "assignments": [
                    14401
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14401,
                      "mutability": "mutable",
                      "name": "tokenID",
                      "nameLocation": "4693:7:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "4680:20:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14400,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4680:4:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14402,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4680:20:75"
                },
                {
                  "assignments": [
                    14404
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14404,
                      "mutability": "mutable",
                      "name": "lenDestinationRecipientAddress",
                      "nameLocation": "4723:30:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "4710:43:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14403,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4710:4:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14405,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4710:43:75"
                },
                {
                  "assignments": [
                    14407
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14407,
                      "mutability": "mutable",
                      "name": "destinationRecipientAddress",
                      "nameLocation": "4776:27:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "4763:40:75",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 14406,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4763:5:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14408,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4763:40:75"
                },
                {
                  "assignments": [
                    14410
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14410,
                      "mutability": "mutable",
                      "name": "offsetMetaData",
                      "nameLocation": "4826:14:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "4813:27:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14409,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4813:4:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14411,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4813:27:75"
                },
                {
                  "assignments": [
                    14413
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14413,
                      "mutability": "mutable",
                      "name": "lenMetaData",
                      "nameLocation": "4863:11:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "4850:24:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14412,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4850:4:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14414,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4850:24:75"
                },
                {
                  "assignments": [
                    14416
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14416,
                      "mutability": "mutable",
                      "name": "metaData",
                      "nameLocation": "4897:8:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "4884:21:75",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 14415,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4884:5:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14417,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4884:21:75"
                },
                {
                  "expression": {
                    "id": 14430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 14418,
                          "name": "tokenID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14401,
                          "src": "4917:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 14419,
                          "name": "lenDestinationRecipientAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14404,
                          "src": "4926:30:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 14420,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "4916:41:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 14423,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14392,
                          "src": "4971:4:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 14425,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4978:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 14424,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "4978:4:75",
                                "typeDescriptions": {}
                              }
                            },
                            {
                              "id": 14427,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4984:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 14426,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "4984:4:75",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 14428,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4977:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(uint256),type(uint256))"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(uint256),type(uint256))"
                          }
                        ],
                        "expression": {
                          "id": 14421,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967295,
                          "src": "4960:3:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 14422,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "4960:10:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 14429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4960:30:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "4916:74:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14431,
                  "nodeType": "ExpressionStatement",
                  "src": "4916:74:75"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3230",
                        "id": 14435,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5038:2:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_20_by_1",
                          "typeString": "int_const 20"
                        },
                        "value": "20"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_20_by_1",
                          "typeString": "int_const 20"
                        }
                      ],
                      "expression": {
                        "id": 14432,
                        "name": "lenDestinationRecipientAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14404,
                        "src": "5000:30:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 14434,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mustBe",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19157,
                      "src": "5000:37:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 14436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5000:41:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14437,
                  "nodeType": "ExpressionStatement",
                  "src": "5000:41:75"
                },
                {
                  "expression": {
                    "id": 14440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14438,
                      "name": "offsetMetaData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14410,
                      "src": "5051:14:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "3834",
                      "id": 14439,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5068:2:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_84_by_1",
                        "typeString": "int_const 84"
                      },
                      "value": "84"
                    },
                    "src": "5051:19:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14441,
                  "nodeType": "ExpressionStatement",
                  "src": "5051:19:75"
                },
                {
                  "expression": {
                    "id": 14450,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14442,
                      "name": "destinationRecipientAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14407,
                      "src": "5080:27:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "id": 14445,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14392,
                            "src": "5116:4:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "endExpression": {
                            "id": 14447,
                            "name": "offsetMetaData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14410,
                            "src": "5124:14:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 14448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "5116:23:75",
                          "startExpression": {
                            "hexValue": "3634",
                            "id": 14446,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5121:2:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_64_by_1",
                              "typeString": "int_const 64"
                            },
                            "value": "64"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        ],
                        "id": 14444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5110:5:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                          "typeString": "type(bytes storage pointer)"
                        },
                        "typeName": {
                          "id": 14443,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5110:5:75",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 14449,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5110:30:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_calldata_ptr",
                        "typeString": "bytes calldata"
                      }
                    },
                    "src": "5080:60:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 14451,
                  "nodeType": "ExpressionStatement",
                  "src": "5080:60:75"
                },
                {
                  "expression": {
                    "id": 14462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14452,
                      "name": "lenMetaData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14413,
                      "src": "5150:11:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "id": 14455,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14392,
                            "src": "5175:4:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "id": 14457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "5175:21:75",
                          "startExpression": {
                            "id": 14456,
                            "name": "offsetMetaData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14410,
                            "src": "5180:14:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 14459,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5199:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 14458,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "5199:4:75",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 14460,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "5198:6:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          },
                          {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        ],
                        "expression": {
                          "id": 14453,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967295,
                          "src": "5164:3:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 14454,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "5164:10:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 14461,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5164:41:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5150:55:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14463,
                  "nodeType": "ExpressionStatement",
                  "src": "5150:55:75"
                },
                {
                  "expression": {
                    "id": 14478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14464,
                      "name": "metaData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14416,
                      "src": "5215:8:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "id": 14467,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14392,
                            "src": "5232:4:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "endExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14475,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 14473,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 14471,
                                "name": "offsetMetaData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14410,
                                "src": "5257:14:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "3332",
                                "id": 14472,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5274:2:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "32"
                              },
                              "src": "5257:19:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 14474,
                              "name": "lenMetaData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14413,
                              "src": "5279:11:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5257:33:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 14476,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "5232:59:75",
                          "startExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14470,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 14468,
                              "name": "offsetMetaData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14410,
                              "src": "5237:14:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "3332",
                              "id": 14469,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5254:2:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "src": "5237:19:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        ],
                        "id": 14466,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5226:5:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                          "typeString": "type(bytes storage pointer)"
                        },
                        "typeName": {
                          "id": 14465,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5226:5:75",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 14477,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5226:66:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_calldata_ptr",
                        "typeString": "bytes calldata"
                      }
                    },
                    "src": "5215:77:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 14479,
                  "nodeType": "ExpressionStatement",
                  "src": "5215:77:75"
                },
                {
                  "assignments": [
                    14481
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14481,
                      "mutability": "mutable",
                      "name": "recipientAddress",
                      "nameLocation": "5311:16:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "5303:24:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      },
                      "typeName": {
                        "id": 14480,
                        "name": "bytes20",
                        "nodeType": "ElementaryTypeName",
                        "src": "5303:7:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14482,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5303:24:75"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "5347:89:75",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "5361:65:75",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "destinationRecipientAddress",
                                  "nodeType": "YulIdentifier",
                                  "src": "5391:27:75"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "5420:4:75",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "5387:3:75"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5387:38:75"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "5381:5:75"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5381:45:75"
                        },
                        "variableNames": [
                          {
                            "name": "recipientAddress",
                            "nodeType": "YulIdentifier",
                            "src": "5361:16:75"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "london",
                  "externalReferences": [
                    {
                      "declaration": 14407,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5391:27:75",
                      "valueSize": 1
                    },
                    {
                      "declaration": 14481,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5361:16:75",
                      "valueSize": 1
                    }
                  ],
                  "id": 14483,
                  "nodeType": "InlineAssembly",
                  "src": "5338:98:75"
                },
                {
                  "assignments": [
                    14485
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14485,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "5454:12:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "5446:20:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14484,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5446:7:75",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14489,
                  "initialValue": {
                    "baseExpression": {
                      "id": 14486,
                      "name": "_resourceIDToTokenContractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14651,
                      "src": "5469:33:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 14488,
                    "indexExpression": {
                      "id": 14487,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14390,
                      "src": "5503:10:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5469:45:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5446:68:75"
                },
                {
                  "condition": {
                    "id": 14494,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5528:67:75",
                    "subExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 14490,
                          "name": "_tokenContractAddressToTokenProperties",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14656,
                          "src": "5529:38:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                            "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                          }
                        },
                        "id": 14492,
                        "indexExpression": {
                          "id": 14491,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14485,
                          "src": "5568:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5529:52:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                          "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                        }
                      },
                      "id": 14493,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isWhitelisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14637,
                      "src": "5529:66:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14499,
                  "nodeType": "IfStatement",
                  "src": "5524:123:75",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "id": 14496,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14485,
                          "src": "5634:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 14495,
                        "name": "ContractAddressNotWhitelisted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14647,
                        "src": "5604:29:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                          "typeString": "function (address) pure"
                        }
                      },
                      "id": 14497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5604:43:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 14498,
                    "nodeType": "RevertStatement",
                    "src": "5597:50:75"
                  }
                },
                {
                  "condition": {
                    "expression": {
                      "baseExpression": {
                        "id": 14500,
                        "name": "_tokenContractAddressToTokenProperties",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14656,
                        "src": "5662:38:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                          "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                        }
                      },
                      "id": 14502,
                      "indexExpression": {
                        "id": 14501,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14485,
                        "src": "5701:12:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5662:52:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                        "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                      }
                    },
                    "id": 14503,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isBurnable",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14639,
                    "src": "5662:63:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 14528,
                    "nodeType": "Block",
                    "src": "5828:103:75",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14516,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14485,
                              "src": "5856:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 14519,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "5878:4:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC721Handler_$14616",
                                    "typeString": "contract ERC721Handler"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ERC721Handler_$14616",
                                    "typeString": "contract ERC721Handler"
                                  }
                                ],
                                "id": 14518,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5870:7:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 14517,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5870:7:75",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 14520,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5870:13:75",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 14523,
                                  "name": "recipientAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14481,
                                  "src": "5893:16:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                ],
                                "id": 14522,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5885:7:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 14521,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5885:7:75",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 14524,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5885:25:75",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14525,
                              "name": "tokenID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14401,
                              "src": "5912:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14515,
                            "name": "releaseERC721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9486,
                            "src": "5842:13:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 14526,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5842:78:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14527,
                        "nodeType": "ExpressionStatement",
                        "src": "5842:78:75"
                      }
                    ]
                  },
                  "id": 14529,
                  "nodeType": "IfStatement",
                  "src": "5658:273:75",
                  "trueBody": {
                    "id": 14514,
                    "nodeType": "Block",
                    "src": "5727:95:75",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14505,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14485,
                              "src": "5752:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 14508,
                                  "name": "recipientAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14481,
                                  "src": "5774:16:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                ],
                                "id": 14507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5766:7:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 14506,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5766:7:75",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 14509,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5766:25:75",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14510,
                              "name": "tokenID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14401,
                              "src": "5793:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 14511,
                              "name": "metaData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14416,
                              "src": "5802:8:75",
                              "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": 14504,
                            "name": "mintERC721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9517,
                            "src": "5741:10:75",
                            "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": 14512,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5741:70:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14513,
                        "nodeType": "ExpressionStatement",
                        "src": "5741:70:75"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14532,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14485,
                        "src": "5958:12:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 14535,
                            "name": "recipientAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14481,
                            "src": "5980:16:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          ],
                          "id": 14534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5972:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 14533,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5972:7:75",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14536,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5972:25:75",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14537,
                        "name": "tokenID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14401,
                        "src": "5999:7:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 14530,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "5947:3:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 14531,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encode",
                      "nodeType": "MemberAccess",
                      "src": "5947:10:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 14538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5947:60:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 14399,
                  "id": 14539,
                  "nodeType": "Return",
                  "src": "5940:67:75"
                }
              ]
            },
            "documentation": {
              "id": 14388,
              "nodeType": "StructuredDocumentation",
              "src": "3482:1065:75",
              "text": "@notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\nby a relayer on the deposit's destination chain.\n@param resourceID ResourceID to be used when making deposits.\n@param data Consists of {tokenID}, {resourceID}, {lenDestinationRecipientAddress},\n{destinationRecipientAddress}, {lenMeta}, and {metaData} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenID                                     uint256    bytes    0  - 32\ndestinationRecipientAddress     length      uint256    bytes    32 - 64\ndestinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress))\nmetadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32)\nmetadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - END"
            },
            "functionSelector": "e248cff2",
            "id": 14541,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14396,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14395,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "4636:10:75"
                },
                "nodeType": "ModifierInvocation",
                "src": "4636:10:75"
              }
            ],
            "name": "executeProposal",
            "nameLocation": "4561:15:75",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14394,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4627:8:75"
            },
            "parameters": {
              "id": 14393,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14390,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "4585:10:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14541,
                  "src": "4577:18:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14389,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4577:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14392,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "4612:4:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14541,
                  "src": "4597:19:75",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14391,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4597:5:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4576:41:75"
            },
            "returnParameters": {
              "id": 14399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14398,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14541,
                  "src": "4656:12:75",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14397,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4656:5:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4655:14:75"
            },
            "scope": 14616,
            "src": "4552:1462:75",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              14707
            ],
            "body": {
              "id": 14591,
              "nodeType": "Block",
              "src": "6574:284:75",
              "statements": [
                {
                  "assignments": [
                    14551
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14551,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "6592:12:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14591,
                      "src": "6584:20:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14550,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6584:7:75",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14552,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6584:20:75"
                },
                {
                  "assignments": [
                    14554
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14554,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nameLocation": "6622:9:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14591,
                      "src": "6614:17:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14553,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6614:7:75",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14555,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6614:17:75"
                },
                {
                  "assignments": [
                    14557
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14557,
                      "mutability": "mutable",
                      "name": "tokenID",
                      "nameLocation": "6646:7:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14591,
                      "src": "6641:12:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14556,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6641:4:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14558,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6641:12:75"
                },
                {
                  "expression": {
                    "id": 14574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 14559,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14551,
                          "src": "6665:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 14560,
                          "name": "recipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14554,
                          "src": "6679:9:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 14561,
                          "name": "tokenID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14557,
                          "src": "6690:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 14562,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "6664:34:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$",
                        "typeString": "tuple(address,address,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 14565,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14544,
                          "src": "6712:4:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 14567,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6719:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 14566,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6719:7:75",
                                "typeDescriptions": {}
                              }
                            },
                            {
                              "id": 14569,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6728:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 14568,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6728:7:75",
                                "typeDescriptions": {}
                              }
                            },
                            {
                              "id": 14571,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6737:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 14570,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "6737:4:75",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 14572,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "6718:24:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(address),type(address),type(uint256))"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(address),type(address),type(uint256))"
                          }
                        ],
                        "expression": {
                          "id": 14563,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967295,
                          "src": "6701:3:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 14564,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "6701:10:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 14573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6701:42:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_payable_$_t_address_payable_$_t_uint256_$",
                        "typeString": "tuple(address payable,address payable,uint256)"
                      }
                    },
                    "src": "6664:79:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14575,
                  "nodeType": "ExpressionStatement",
                  "src": "6664:79:75"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 14576,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14554,
                        "src": "6754:9:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 14578,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mustNotBeZero",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19136,
                      "src": "6754:23:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (address)"
                      }
                    },
                    "id": 14579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6754:25:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14580,
                  "nodeType": "ExpressionStatement",
                  "src": "6754:25:75"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14582,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14551,
                        "src": "6803:12:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 14585,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967268,
                            "src": "6825:4:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC721Handler_$14616",
                              "typeString": "contract ERC721Handler"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC721Handler_$14616",
                              "typeString": "contract ERC721Handler"
                            }
                          ],
                          "id": 14584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6817:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 14583,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6817:7:75",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14586,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6817:13:75",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14587,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14554,
                        "src": "6832:9:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14588,
                        "name": "tokenID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14557,
                        "src": "6843:7:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14581,
                      "name": "releaseERC721",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9486,
                      "src": "6789:13:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 14589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6789:62:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14590,
                  "nodeType": "ExpressionStatement",
                  "src": "6789:62:75"
                }
              ]
            },
            "documentation": {
              "id": 14542,
              "nodeType": "StructuredDocumentation",
              "src": "6020:483:75",
              "text": "@notice Used to manually release ERC721 tokens from ERC721Safe.\n@param data Consists of {tokenAddress}, {recipient}, and {tokenID} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenAddress                           address     bytes  0 - 32\nrecipient                              address     bytes  32 - 64\ntokenID                                uint        bytes  64 - 96"
            },
            "functionSelector": "0968f264",
            "id": 14592,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14548,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14547,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "6563:10:75"
                },
                "nodeType": "ModifierInvocation",
                "src": "6563:10:75"
              }
            ],
            "name": "withdraw",
            "nameLocation": "6517:8:75",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14546,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6554:8:75"
            },
            "parameters": {
              "id": 14545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14544,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6539:4:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14592,
                  "src": "6526:17:75",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14543,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6526:5:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6525:19:75"
            },
            "returnParameters": {
              "id": 14549,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6574:0:75"
            },
            "scope": 14616,
            "src": "6508:350:75",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              18300
            ],
            "body": {
              "id": 14614,
              "nodeType": "Block",
              "src": "7554:99:75",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 14604,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14597,
                        "src": "7564:15:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 14606,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mustNotBeZero",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19136,
                      "src": "7564:29:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (address)"
                      }
                    },
                    "id": 14607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7564:31:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14608,
                  "nodeType": "ExpressionStatement",
                  "src": "7564:31:75"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14610,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14595,
                        "src": "7618:10:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 14611,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14597,
                        "src": "7630:15:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14609,
                      "name": "_setResource",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14742,
                      "src": "7605:12:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 14612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7605:41:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14613,
                  "nodeType": "ExpressionStatement",
                  "src": "7605:41:75"
                }
              ]
            },
            "documentation": {
              "id": 14593,
              "nodeType": "StructuredDocumentation",
              "src": "6864:578:75",
              "text": "@notice Sets {_resourceIDToContractAddress} with {contractAddress},\n{_tokenContractAddressToTokenProperties[tokenAddress].resourceID} with {resourceID} and\n{_tokenContractAddressToTokenProperties[tokenAddress].isWhitelisted} to true for {contractAddress} in ERCHandlerHelpers contract.\n@param resourceID ResourceID to be used when making deposits.\n@param contractAddress Address of contract to be called when a deposit is made and a deposited is executed.\n@param args Additional data to be passed to specified handler."
            },
            "functionSelector": "fa8675b0",
            "id": 14615,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14602,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14601,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "7543:10:75"
                },
                "nodeType": "ModifierInvocation",
                "src": "7543:10:75"
              }
            ],
            "name": "setResource",
            "nameLocation": "7456:11:75",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14600,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14595,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "7476:10:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14615,
                  "src": "7468:18:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14594,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7468:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14597,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nameLocation": "7496:15:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14615,
                  "src": "7488:23:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14596,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7488:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14599,
                  "mutability": "mutable",
                  "name": "args",
                  "nameLocation": "7528:4:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14615,
                  "src": "7513:19:75",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14598,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7513:5:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7467:66:75"
            },
            "returnParameters": {
              "id": 14603,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7554:0:75"
            },
            "scope": 14616,
            "src": "7447:206:75",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 14617,
        "src": "530:7125:75",
        "usedErrors": [
          14647,
          19110,
          19116
        ]
      }
    ],
    "src": "81:7575:75"
  },
  "legacyAST": {
    "absolutePath": "project:/contracts/handlers/ERC721Handler.sol",
    "exportedSymbols": {
      "AccessControl": [
        18612
      ],
      "Address": [
        5283
      ],
      "Context": [
        5305
      ],
      "Counters": [
        5379
      ],
      "ERC165": [
        6167
      ],
      "ERC165Checker": [
        6369
      ],
      "ERC721": [
        4605
      ],
      "ERC721Burnable": [
        4769
      ],
      "ERC721Handler": [
        14616
      ],
      "ERC721MinterBurnerPauser": [
        9425
      ],
      "ERC721Pausable": [
        4806
      ],
      "ERC721Safe": [
        9552
      ],
      "ERC721URIStorage": [
        4934
      ],
      "ERCHandlerHelpers": [
        14917
      ],
      "EnumerableSet": [
        7373
      ],
      "IERC165": [
        6381
      ],
      "IERC721": [
        4721
      ],
      "IERC721Metadata": [
        4961
      ],
      "IERC721Receiver": [
        4739
      ],
      "IERCHandler": [
        18195
      ],
      "IHandler": [
        18301
      ],
      "Pausable": [
        728
      ],
      "SanityChecks": [
        19158
      ],
      "Strings": [
        5582
      ]
    },
    "id": 14617,
    "license": "LGPL-3.0-only",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 14265,
        "literals": [
          "solidity",
          "0.8",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "81:23:75"
      },
      {
        "absolutePath": "project:/contracts/interfaces/IHandler.sol",
        "file": "../interfaces/IHandler.sol",
        "id": 14266,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14617,
        "sourceUnit": 18302,
        "src": "106:36:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/handlers/ERCHandlerHelpers.sol",
        "file": "./ERCHandlerHelpers.sol",
        "id": 14267,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14617,
        "sourceUnit": 14918,
        "src": "143:33:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/ERC721Safe.sol",
        "file": "../ERC721Safe.sol",
        "id": 14268,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14617,
        "sourceUnit": 9553,
        "src": "177:27:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
        "file": "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol",
        "id": 14269,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14617,
        "sourceUnit": 6370,
        "src": "205:71:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
        "file": "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol",
        "id": 14270,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 14617,
        "sourceUnit": 4962,
        "src": "277:77:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 14272,
              "name": "IHandler",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 18301,
              "src": "556:8:75"
            },
            "id": 14273,
            "nodeType": "InheritanceSpecifier",
            "src": "556:8:75"
          },
          {
            "baseName": {
              "id": 14274,
              "name": "ERCHandlerHelpers",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 14917,
              "src": "566:17:75"
            },
            "id": 14275,
            "nodeType": "InheritanceSpecifier",
            "src": "566:17:75"
          },
          {
            "baseName": {
              "id": 14276,
              "name": "ERC721Safe",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 9552,
              "src": "585:10:75"
            },
            "id": 14277,
            "nodeType": "InheritanceSpecifier",
            "src": "585:10:75"
          }
        ],
        "canonicalName": "ERC721Handler",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 14271,
          "nodeType": "StructuredDocumentation",
          "src": "357:172:75",
          "text": "@title Handles ERC721 deposits and deposit executions.\n@author ChainSafe Systems.\n@notice This contract is intended to be used with the Bridge contract."
        },
        "fullyImplemented": true,
        "id": 14616,
        "linearizedBaseContracts": [
          14616,
          9552,
          14917,
          18195,
          18301
        ],
        "name": "ERC721Handler",
        "nameLocation": "539:13:75",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 14279,
            "libraryName": {
              "id": 14278,
              "name": "SanityChecks",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 19158,
              "src": "608:12:75"
            },
            "nodeType": "UsingForDirective",
            "src": "602:25:75"
          },
          {
            "id": 14282,
            "libraryName": {
              "id": 14280,
              "name": "ERC165Checker",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 6369,
              "src": "638:13:75"
            },
            "nodeType": "UsingForDirective",
            "src": "632:32:75",
            "typeName": {
              "id": 14281,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "656:7:75",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "constant": true,
            "id": 14285,
            "mutability": "constant",
            "name": "_INTERFACE_ERC721_METADATA",
            "nameLocation": "694:26:75",
            "nodeType": "VariableDeclaration",
            "scope": 14616,
            "src": "670:63:75",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes4",
              "typeString": "bytes4"
            },
            "typeName": {
              "id": 14283,
              "name": "bytes4",
              "nodeType": "ElementaryTypeName",
              "src": "670:6:75",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes4",
                "typeString": "bytes4"
              }
            },
            "value": {
              "hexValue": "30783562356531333966",
              "id": 14284,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "723:10:75",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1532892063_by_1",
                "typeString": "int_const 1532892063"
              },
              "value": "0x5b5e139f"
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 14294,
              "nodeType": "Block",
              "src": "915:7:75",
              "statements": []
            },
            "documentation": {
              "id": 14286,
              "nodeType": "StructuredDocumentation",
              "src": "740:88:75",
              "text": "@param bridgeAddress Contract address of previously deployed Bridge."
            },
            "id": 14295,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 14291,
                    "name": "bridgeAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 14288,
                    "src": "900:13:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 14292,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 14290,
                  "name": "ERCHandlerHelpers",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14917,
                  "src": "882:17:75"
                },
                "nodeType": "ModifierInvocation",
                "src": "882:32:75"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14288,
                  "mutability": "mutable",
                  "name": "bridgeAddress",
                  "nameLocation": "862:13:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14295,
                  "src": "854:21:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14287,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "854:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "844:37:75"
            },
            "returnParameters": {
              "id": 14293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "915:0:75"
            },
            "scope": 14616,
            "src": "833:89:75",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              18280
            ],
            "body": {
              "id": 14386,
              "nodeType": "Block",
              "src": "2661:815:75",
              "statements": [
                {
                  "assignments": [
                    14311
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14311,
                      "mutability": "mutable",
                      "name": "tokenID",
                      "nameLocation": "2684:7:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14386,
                      "src": "2671:20:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14310,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2671:4:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14312,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2671:20:75"
                },
                {
                  "expression": {
                    "id": 14322,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 14313,
                          "name": "tokenID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14311,
                          "src": "2703:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 14314,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "2702:9:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 14317,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14302,
                          "src": "2725:4:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 14319,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2732:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 14318,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "2732:4:75",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 14320,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "2731:6:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        ],
                        "expression": {
                          "id": 14315,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967295,
                          "src": "2714:3:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 14316,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "2714:10:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 14321,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2714:24:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2702:36:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14323,
                  "nodeType": "ExpressionStatement",
                  "src": "2702:36:75"
                },
                {
                  "assignments": [
                    14325
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14325,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "2757:12:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14386,
                      "src": "2749:20:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14324,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2749:7:75",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14329,
                  "initialValue": {
                    "baseExpression": {
                      "id": 14326,
                      "name": "_resourceIDToTokenContractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14651,
                      "src": "2772:33:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 14328,
                    "indexExpression": {
                      "id": 14327,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14298,
                      "src": "2806:10:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2772:45:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2749:68:75"
                },
                {
                  "condition": {
                    "id": 14334,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "2831:67:75",
                    "subExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 14330,
                          "name": "_tokenContractAddressToTokenProperties",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14656,
                          "src": "2832:38:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                            "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                          }
                        },
                        "id": 14332,
                        "indexExpression": {
                          "id": 14331,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14325,
                          "src": "2871:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2832:52:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                          "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                        }
                      },
                      "id": 14333,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isWhitelisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14637,
                      "src": "2832:66:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14339,
                  "nodeType": "IfStatement",
                  "src": "2827:123:75",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "id": 14336,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14325,
                          "src": "2937:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 14335,
                        "name": "ContractAddressNotWhitelisted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14647,
                        "src": "2907:29:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                          "typeString": "function (address) pure"
                        }
                      },
                      "id": 14337,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2907:43:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 14338,
                    "nodeType": "RevertStatement",
                    "src": "2900:50:75"
                  }
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 14342,
                        "name": "_INTERFACE_ERC721_METADATA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14285,
                        "src": "3068:26:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      ],
                      "expression": {
                        "id": 14340,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14325,
                        "src": "3037:12:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 14341,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "supportsInterface",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6217,
                      "src": "3037:30:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$bound_to$_t_address_$",
                        "typeString": "function (address,bytes4) view returns (bool)"
                      }
                    },
                    "id": 14343,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3037:58:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14362,
                  "nodeType": "IfStatement",
                  "src": "3033:199:75",
                  "trueBody": {
                    "id": 14361,
                    "nodeType": "Block",
                    "src": "3097:135:75",
                    "statements": [
                      {
                        "assignments": [
                          14346
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 14346,
                            "mutability": "mutable",
                            "name": "erc721",
                            "nameLocation": "3127:6:75",
                            "nodeType": "VariableDeclaration",
                            "scope": 14361,
                            "src": "3111:22:75",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC721Metadata_$4961",
                              "typeString": "contract IERC721Metadata"
                            },
                            "typeName": {
                              "id": 14345,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 14344,
                                "name": "IERC721Metadata",
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 4961,
                                "src": "3111:15:75"
                              },
                              "referencedDeclaration": 4961,
                              "src": "3111:15:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC721Metadata_$4961",
                                "typeString": "contract IERC721Metadata"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 14350,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 14348,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14325,
                              "src": "3152:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 14347,
                            "name": "IERC721Metadata",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4961,
                            "src": "3136:15:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_IERC721Metadata_$4961_$",
                              "typeString": "type(contract IERC721Metadata)"
                            }
                          },
                          "id": 14349,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3136:29:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IERC721Metadata_$4961",
                            "typeString": "contract IERC721Metadata"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "3111:54:75"
                      },
                      {
                        "expression": {
                          "id": 14359,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 14351,
                            "name": "metaData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14308,
                            "src": "3179:8:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "id": 14356,
                                    "name": "tokenID",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14311,
                                    "src": "3212:7:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "id": 14354,
                                    "name": "erc721",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14346,
                                    "src": "3196:6:75",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC721Metadata_$4961",
                                      "typeString": "contract IERC721Metadata"
                                    }
                                  },
                                  "id": 14355,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "tokenURI",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 4960,
                                  "src": "3196:15:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_string_memory_ptr_$",
                                    "typeString": "function (uint256) view external returns (string memory)"
                                  }
                                },
                                "id": 14357,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3196:24:75",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_memory_ptr",
                                  "typeString": "string memory"
                                }
                              ],
                              "id": 14353,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3190:5:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                "typeString": "type(bytes storage pointer)"
                              },
                              "typeName": {
                                "id": 14352,
                                "name": "bytes",
                                "nodeType": "ElementaryTypeName",
                                "src": "3190:5:75",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 14358,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3190:31:75",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "src": "3179:42:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 14360,
                        "nodeType": "ExpressionStatement",
                        "src": "3179:42:75"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "expression": {
                      "baseExpression": {
                        "id": 14363,
                        "name": "_tokenContractAddressToTokenProperties",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14656,
                        "src": "3246:38:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                          "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                        }
                      },
                      "id": 14365,
                      "indexExpression": {
                        "id": 14364,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14325,
                        "src": "3285:12:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3246:52:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                        "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                      }
                    },
                    "id": 14366,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isBurnable",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14639,
                    "src": "3246:63:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 14384,
                    "nodeType": "Block",
                    "src": "3386:84:75",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14375,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14325,
                              "src": "3411:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14376,
                              "name": "depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14300,
                              "src": "3425:9:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 14379,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "3444:4:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC721Handler_$14616",
                                    "typeString": "contract ERC721Handler"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ERC721Handler_$14616",
                                    "typeString": "contract ERC721Handler"
                                  }
                                ],
                                "id": 14378,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3436:7:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 14377,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3436:7:75",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 14380,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3436:13:75",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14381,
                              "name": "tokenID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14311,
                              "src": "3451:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14374,
                            "name": "lockERC721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9458,
                            "src": "3400:10:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 14382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3400:59:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14383,
                        "nodeType": "ExpressionStatement",
                        "src": "3400:59:75"
                      }
                    ]
                  },
                  "id": 14385,
                  "nodeType": "IfStatement",
                  "src": "3242:228:75",
                  "trueBody": {
                    "id": 14373,
                    "nodeType": "Block",
                    "src": "3311:69:75",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14368,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14325,
                              "src": "3336:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14369,
                              "name": "depositor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14300,
                              "src": "3350:9:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14370,
                              "name": "tokenID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14311,
                              "src": "3361:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14367,
                            "name": "burnERC721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9551,
                            "src": "3325:10:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 14371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3325:44:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14372,
                        "nodeType": "ExpressionStatement",
                        "src": "3325:44:75"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 14296,
              "nodeType": "StructuredDocumentation",
              "src": "928:1547:75",
              "text": "@notice A deposit is initiated by making a deposit in the Bridge contract.\n@param resourceID ResourceID used to find address of token to be used for deposit.\n@param depositor Address of account making the deposit in the Bridge contract.\n@param data Consists of {tokenID} padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenID                                     uint256    bytes    0  - 32\ndestinationRecipientAddress     length      uint256    bytes    32 - 64\ndestinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress))\nmetadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32)\nmetadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - END\n@notice If the corresponding {tokenAddress} for the parsed {resourceID} supports {_INTERFACE_ERC721_METADATA},\nthen {metaData} will be set according to the {tokenURI} method in the token contract.\n@dev Depending if the corresponding {tokenAddress} for the parsed {resourceID} is\nmarked true in {_tokenContractAddressToTokenProperties[tokenAddress].isBurnable}, deposited tokens will be burned, if not, they will be locked.\n@return metaData : the deposited token metadata acquired by calling a {tokenURI} method in the token contract."
            },
            "functionSelector": "b07e54bb",
            "id": 14387,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14306,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14305,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "2618:10:75"
                },
                "nodeType": "ModifierInvocation",
                "src": "2618:10:75"
              }
            ],
            "name": "deposit",
            "nameLocation": "2489:7:75",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14304,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2609:8:75"
            },
            "parameters": {
              "id": 14303,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14298,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "2517:10:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14387,
                  "src": "2506:21:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14297,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2506:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14300,
                  "mutability": "mutable",
                  "name": "depositor",
                  "nameLocation": "2549:9:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14387,
                  "src": "2537:21:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14299,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2537:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14302,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "2589:4:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14387,
                  "src": "2568:25:75",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14301,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2568:5:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2496:103:75"
            },
            "returnParameters": {
              "id": 14309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14308,
                  "mutability": "mutable",
                  "name": "metaData",
                  "nameLocation": "2651:8:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14387,
                  "src": "2638:21:75",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14307,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2638:5:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2637:23:75"
            },
            "scope": 14616,
            "src": "2480:996:75",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              18290
            ],
            "body": {
              "id": 14540,
              "nodeType": "Block",
              "src": "4670:1344:75",
              "statements": [
                {
                  "assignments": [
                    14401
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14401,
                      "mutability": "mutable",
                      "name": "tokenID",
                      "nameLocation": "4693:7:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "4680:20:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14400,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4680:4:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14402,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4680:20:75"
                },
                {
                  "assignments": [
                    14404
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14404,
                      "mutability": "mutable",
                      "name": "lenDestinationRecipientAddress",
                      "nameLocation": "4723:30:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "4710:43:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14403,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4710:4:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14405,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4710:43:75"
                },
                {
                  "assignments": [
                    14407
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14407,
                      "mutability": "mutable",
                      "name": "destinationRecipientAddress",
                      "nameLocation": "4776:27:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "4763:40:75",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 14406,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4763:5:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14408,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4763:40:75"
                },
                {
                  "assignments": [
                    14410
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14410,
                      "mutability": "mutable",
                      "name": "offsetMetaData",
                      "nameLocation": "4826:14:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "4813:27:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14409,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4813:4:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14411,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4813:27:75"
                },
                {
                  "assignments": [
                    14413
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14413,
                      "mutability": "mutable",
                      "name": "lenMetaData",
                      "nameLocation": "4863:11:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "4850:24:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14412,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4850:4:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14414,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4850:24:75"
                },
                {
                  "assignments": [
                    14416
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14416,
                      "mutability": "mutable",
                      "name": "metaData",
                      "nameLocation": "4897:8:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "4884:21:75",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 14415,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4884:5:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14417,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4884:21:75"
                },
                {
                  "expression": {
                    "id": 14430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 14418,
                          "name": "tokenID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14401,
                          "src": "4917:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "id": 14419,
                          "name": "lenDestinationRecipientAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14404,
                          "src": "4926:30:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 14420,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "4916:41:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 14423,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14392,
                          "src": "4971:4:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 14425,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4978:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 14424,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "4978:4:75",
                                "typeDescriptions": {}
                              }
                            },
                            {
                              "id": 14427,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4984:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 14426,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "4984:4:75",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 14428,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4977:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(uint256),type(uint256))"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(uint256),type(uint256))"
                          }
                        ],
                        "expression": {
                          "id": 14421,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967295,
                          "src": "4960:3:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 14422,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "4960:10:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 14429,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4960:30:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$",
                        "typeString": "tuple(uint256,uint256)"
                      }
                    },
                    "src": "4916:74:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14431,
                  "nodeType": "ExpressionStatement",
                  "src": "4916:74:75"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "3230",
                        "id": 14435,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5038:2:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_20_by_1",
                          "typeString": "int_const 20"
                        },
                        "value": "20"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_20_by_1",
                          "typeString": "int_const 20"
                        }
                      ],
                      "expression": {
                        "id": 14432,
                        "name": "lenDestinationRecipientAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14404,
                        "src": "5000:30:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 14434,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mustBe",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19157,
                      "src": "5000:37:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 14436,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5000:41:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14437,
                  "nodeType": "ExpressionStatement",
                  "src": "5000:41:75"
                },
                {
                  "expression": {
                    "id": 14440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14438,
                      "name": "offsetMetaData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14410,
                      "src": "5051:14:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "3834",
                      "id": 14439,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5068:2:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_84_by_1",
                        "typeString": "int_const 84"
                      },
                      "value": "84"
                    },
                    "src": "5051:19:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14441,
                  "nodeType": "ExpressionStatement",
                  "src": "5051:19:75"
                },
                {
                  "expression": {
                    "id": 14450,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14442,
                      "name": "destinationRecipientAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14407,
                      "src": "5080:27:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "id": 14445,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14392,
                            "src": "5116:4:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "endExpression": {
                            "id": 14447,
                            "name": "offsetMetaData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14410,
                            "src": "5124:14:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 14448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "5116:23:75",
                          "startExpression": {
                            "hexValue": "3634",
                            "id": 14446,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5121:2:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_64_by_1",
                              "typeString": "int_const 64"
                            },
                            "value": "64"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        ],
                        "id": 14444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5110:5:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                          "typeString": "type(bytes storage pointer)"
                        },
                        "typeName": {
                          "id": 14443,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5110:5:75",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 14449,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5110:30:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_calldata_ptr",
                        "typeString": "bytes calldata"
                      }
                    },
                    "src": "5080:60:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 14451,
                  "nodeType": "ExpressionStatement",
                  "src": "5080:60:75"
                },
                {
                  "expression": {
                    "id": 14462,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14452,
                      "name": "lenMetaData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14413,
                      "src": "5150:11:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "id": 14455,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14392,
                            "src": "5175:4:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "id": 14457,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "5175:21:75",
                          "startExpression": {
                            "id": 14456,
                            "name": "offsetMetaData",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14410,
                            "src": "5180:14:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 14459,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5199:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 14458,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "5199:4:75",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 14460,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "5198:6:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          },
                          {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          }
                        ],
                        "expression": {
                          "id": 14453,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967295,
                          "src": "5164:3:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 14454,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "5164:10:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 14461,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5164:41:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5150:55:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 14463,
                  "nodeType": "ExpressionStatement",
                  "src": "5150:55:75"
                },
                {
                  "expression": {
                    "id": 14478,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 14464,
                      "name": "metaData",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14416,
                      "src": "5215:8:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "baseExpression": {
                            "id": 14467,
                            "name": "data",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14392,
                            "src": "5232:4:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          },
                          "endExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14475,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 14473,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 14471,
                                "name": "offsetMetaData",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14410,
                                "src": "5257:14:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "+",
                              "rightExpression": {
                                "hexValue": "3332",
                                "id": 14472,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5274:2:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "32"
                              },
                              "src": "5257:19:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "id": 14474,
                              "name": "lenMetaData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14413,
                              "src": "5279:11:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "5257:33:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 14476,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexRangeAccess",
                          "src": "5232:59:75",
                          "startExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 14470,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 14468,
                              "name": "offsetMetaData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14410,
                              "src": "5237:14:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "hexValue": "3332",
                              "id": 14469,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5254:2:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "src": "5237:19:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr_slice",
                            "typeString": "bytes calldata slice"
                          }
                        ],
                        "id": 14466,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "5226:5:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                          "typeString": "type(bytes storage pointer)"
                        },
                        "typeName": {
                          "id": 14465,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "5226:5:75",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 14477,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5226:66:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_calldata_ptr",
                        "typeString": "bytes calldata"
                      }
                    },
                    "src": "5215:77:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 14479,
                  "nodeType": "ExpressionStatement",
                  "src": "5215:77:75"
                },
                {
                  "assignments": [
                    14481
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14481,
                      "mutability": "mutable",
                      "name": "recipientAddress",
                      "nameLocation": "5311:16:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "5303:24:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes20",
                        "typeString": "bytes20"
                      },
                      "typeName": {
                        "id": 14480,
                        "name": "bytes20",
                        "nodeType": "ElementaryTypeName",
                        "src": "5303:7:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes20",
                          "typeString": "bytes20"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14482,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5303:24:75"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "5347:89:75",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "5361:65:75",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "destinationRecipientAddress",
                                  "nodeType": "YulIdentifier",
                                  "src": "5391:27:75"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "5420:4:75",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "5387:3:75"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "5387:38:75"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "5381:5:75"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5381:45:75"
                        },
                        "variableNames": [
                          {
                            "name": "recipientAddress",
                            "nodeType": "YulIdentifier",
                            "src": "5361:16:75"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "london",
                  "externalReferences": [
                    {
                      "declaration": 14407,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5391:27:75",
                      "valueSize": 1
                    },
                    {
                      "declaration": 14481,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5361:16:75",
                      "valueSize": 1
                    }
                  ],
                  "id": 14483,
                  "nodeType": "InlineAssembly",
                  "src": "5338:98:75"
                },
                {
                  "assignments": [
                    14485
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14485,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "5454:12:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14540,
                      "src": "5446:20:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14484,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5446:7:75",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14489,
                  "initialValue": {
                    "baseExpression": {
                      "id": 14486,
                      "name": "_resourceIDToTokenContractAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14651,
                      "src": "5469:33:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_address_$",
                        "typeString": "mapping(bytes32 => address)"
                      }
                    },
                    "id": 14488,
                    "indexExpression": {
                      "id": 14487,
                      "name": "resourceID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14390,
                      "src": "5503:10:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5469:45:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5446:68:75"
                },
                {
                  "condition": {
                    "id": 14494,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5528:67:75",
                    "subExpression": {
                      "expression": {
                        "baseExpression": {
                          "id": 14490,
                          "name": "_tokenContractAddressToTokenProperties",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14656,
                          "src": "5529:38:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                            "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                          }
                        },
                        "id": 14492,
                        "indexExpression": {
                          "id": 14491,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14485,
                          "src": "5568:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5529:52:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                          "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                        }
                      },
                      "id": 14493,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "isWhitelisted",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14637,
                      "src": "5529:66:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 14499,
                  "nodeType": "IfStatement",
                  "src": "5524:123:75",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [
                        {
                          "id": 14496,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14485,
                          "src": "5634:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 14495,
                        "name": "ContractAddressNotWhitelisted",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14647,
                        "src": "5604:29:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$",
                          "typeString": "function (address) pure"
                        }
                      },
                      "id": 14497,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5604:43:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 14498,
                    "nodeType": "RevertStatement",
                    "src": "5597:50:75"
                  }
                },
                {
                  "condition": {
                    "expression": {
                      "baseExpression": {
                        "id": 14500,
                        "name": "_tokenContractAddressToTokenProperties",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14656,
                        "src": "5662:38:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_ERCTokenContractProperties_$14643_storage_$",
                          "typeString": "mapping(address => struct ERCHandlerHelpers.ERCTokenContractProperties storage ref)"
                        }
                      },
                      "id": 14502,
                      "indexExpression": {
                        "id": 14501,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14485,
                        "src": "5701:12:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5662:52:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ERCTokenContractProperties_$14643_storage",
                        "typeString": "struct ERCHandlerHelpers.ERCTokenContractProperties storage ref"
                      }
                    },
                    "id": 14503,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "isBurnable",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 14639,
                    "src": "5662:63:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 14528,
                    "nodeType": "Block",
                    "src": "5828:103:75",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14516,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14485,
                              "src": "5856:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 14519,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967268,
                                  "src": "5878:4:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC721Handler_$14616",
                                    "typeString": "contract ERC721Handler"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_ERC721Handler_$14616",
                                    "typeString": "contract ERC721Handler"
                                  }
                                ],
                                "id": 14518,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5870:7:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 14517,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5870:7:75",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 14520,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5870:13:75",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 14523,
                                  "name": "recipientAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14481,
                                  "src": "5893:16:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                ],
                                "id": 14522,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5885:7:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 14521,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5885:7:75",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 14524,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5885:25:75",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14525,
                              "name": "tokenID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14401,
                              "src": "5912:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 14515,
                            "name": "releaseERC721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9486,
                            "src": "5842:13:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,address,uint256)"
                            }
                          },
                          "id": 14526,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5842:78:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14527,
                        "nodeType": "ExpressionStatement",
                        "src": "5842:78:75"
                      }
                    ]
                  },
                  "id": 14529,
                  "nodeType": "IfStatement",
                  "src": "5658:273:75",
                  "trueBody": {
                    "id": 14514,
                    "nodeType": "Block",
                    "src": "5727:95:75",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 14505,
                              "name": "tokenAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14485,
                              "src": "5752:12:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 14508,
                                  "name": "recipientAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 14481,
                                  "src": "5774:16:75",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes20",
                                    "typeString": "bytes20"
                                  }
                                ],
                                "id": 14507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5766:7:75",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 14506,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "5766:7:75",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 14509,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5766:25:75",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 14510,
                              "name": "tokenID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14401,
                              "src": "5793:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 14511,
                              "name": "metaData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14416,
                              "src": "5802:8:75",
                              "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": 14504,
                            "name": "mintERC721",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9517,
                            "src": "5741:10:75",
                            "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": 14512,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5741:70:75",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 14513,
                        "nodeType": "ExpressionStatement",
                        "src": "5741:70:75"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14532,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14485,
                        "src": "5958:12:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 14535,
                            "name": "recipientAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14481,
                            "src": "5980:16:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes20",
                              "typeString": "bytes20"
                            }
                          ],
                          "id": 14534,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5972:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 14533,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5972:7:75",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14536,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5972:25:75",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14537,
                        "name": "tokenID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14401,
                        "src": "5999:7:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 14530,
                        "name": "abi",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967295,
                        "src": "5947:3:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_abi",
                          "typeString": "abi"
                        }
                      },
                      "id": 14531,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "encode",
                      "nodeType": "MemberAccess",
                      "src": "5947:10:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function () pure returns (bytes memory)"
                      }
                    },
                    "id": 14538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5947:60:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "functionReturnParameters": 14399,
                  "id": 14539,
                  "nodeType": "Return",
                  "src": "5940:67:75"
                }
              ]
            },
            "documentation": {
              "id": 14388,
              "nodeType": "StructuredDocumentation",
              "src": "3482:1065:75",
              "text": "@notice Proposal execution should be initiated when a proposal is finalized in the Bridge contract.\nby a relayer on the deposit's destination chain.\n@param resourceID ResourceID to be used when making deposits.\n@param data Consists of {tokenID}, {resourceID}, {lenDestinationRecipientAddress},\n{destinationRecipientAddress}, {lenMeta}, and {metaData} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenID                                     uint256    bytes    0  - 32\ndestinationRecipientAddress     length      uint256    bytes    32 - 64\ndestinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress))\nmetadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32)\nmetadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - END"
            },
            "functionSelector": "e248cff2",
            "id": 14541,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14396,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14395,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "4636:10:75"
                },
                "nodeType": "ModifierInvocation",
                "src": "4636:10:75"
              }
            ],
            "name": "executeProposal",
            "nameLocation": "4561:15:75",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14394,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4627:8:75"
            },
            "parameters": {
              "id": 14393,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14390,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "4585:10:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14541,
                  "src": "4577:18:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14389,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4577:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14392,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "4612:4:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14541,
                  "src": "4597:19:75",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14391,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4597:5:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4576:41:75"
            },
            "returnParameters": {
              "id": 14399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14398,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 14541,
                  "src": "4656:12:75",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14397,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4656:5:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4655:14:75"
            },
            "scope": 14616,
            "src": "4552:1462:75",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              14707
            ],
            "body": {
              "id": 14591,
              "nodeType": "Block",
              "src": "6574:284:75",
              "statements": [
                {
                  "assignments": [
                    14551
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14551,
                      "mutability": "mutable",
                      "name": "tokenAddress",
                      "nameLocation": "6592:12:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14591,
                      "src": "6584:20:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14550,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6584:7:75",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14552,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6584:20:75"
                },
                {
                  "assignments": [
                    14554
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14554,
                      "mutability": "mutable",
                      "name": "recipient",
                      "nameLocation": "6622:9:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14591,
                      "src": "6614:17:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 14553,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "6614:7:75",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14555,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6614:17:75"
                },
                {
                  "assignments": [
                    14557
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 14557,
                      "mutability": "mutable",
                      "name": "tokenID",
                      "nameLocation": "6646:7:75",
                      "nodeType": "VariableDeclaration",
                      "scope": 14591,
                      "src": "6641:12:75",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 14556,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6641:4:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 14558,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6641:12:75"
                },
                {
                  "expression": {
                    "id": 14574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "components": [
                        {
                          "id": 14559,
                          "name": "tokenAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14551,
                          "src": "6665:12:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 14560,
                          "name": "recipient",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14554,
                          "src": "6679:9:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 14561,
                          "name": "tokenID",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14557,
                          "src": "6690:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 14562,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "6664:34:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_$_t_address_$_t_uint256_$",
                        "typeString": "tuple(address,address,uint256)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 14565,
                          "name": "data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14544,
                          "src": "6712:4:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "components": [
                            {
                              "id": 14567,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6719:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 14566,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6719:7:75",
                                "typeDescriptions": {}
                              }
                            },
                            {
                              "id": 14569,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6728:7:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 14568,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "6728:7:75",
                                "typeDescriptions": {}
                              }
                            },
                            {
                              "id": 14571,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "6737:4:75",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 14570,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "6737:4:75",
                                "typeDescriptions": {}
                              }
                            }
                          ],
                          "id": 14572,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "6718:24:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(address),type(address),type(uint256))"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_tuple$_t_type$_t_address_$_$_t_type$_t_address_$_$_t_type$_t_uint256_$_$",
                            "typeString": "tuple(type(address),type(address),type(uint256))"
                          }
                        ],
                        "expression": {
                          "id": 14563,
                          "name": "abi",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967295,
                          "src": "6701:3:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_abi",
                            "typeString": "abi"
                          }
                        },
                        "id": 14564,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberName": "decode",
                        "nodeType": "MemberAccess",
                        "src": "6701:10:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
                          "typeString": "function () pure"
                        }
                      },
                      "id": 14573,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6701:42:75",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_address_payable_$_t_address_payable_$_t_uint256_$",
                        "typeString": "tuple(address payable,address payable,uint256)"
                      }
                    },
                    "src": "6664:79:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14575,
                  "nodeType": "ExpressionStatement",
                  "src": "6664:79:75"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 14576,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14554,
                        "src": "6754:9:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 14578,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mustNotBeZero",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19136,
                      "src": "6754:23:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (address)"
                      }
                    },
                    "id": 14579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6754:25:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14580,
                  "nodeType": "ExpressionStatement",
                  "src": "6754:25:75"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14582,
                        "name": "tokenAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14551,
                        "src": "6803:12:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 14585,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967268,
                            "src": "6825:4:75",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC721Handler_$14616",
                              "typeString": "contract ERC721Handler"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC721Handler_$14616",
                              "typeString": "contract ERC721Handler"
                            }
                          ],
                          "id": 14584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6817:7:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 14583,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6817:7:75",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 14586,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6817:13:75",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14587,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14554,
                        "src": "6832:9:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 14588,
                        "name": "tokenID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14557,
                        "src": "6843:7:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 14581,
                      "name": "releaseERC721",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9486,
                      "src": "6789:13:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 14589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6789:62:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14590,
                  "nodeType": "ExpressionStatement",
                  "src": "6789:62:75"
                }
              ]
            },
            "documentation": {
              "id": 14542,
              "nodeType": "StructuredDocumentation",
              "src": "6020:483:75",
              "text": "@notice Used to manually release ERC721 tokens from ERC721Safe.\n@param data Consists of {tokenAddress}, {recipient}, and {tokenID} all padded to 32 bytes.\n@notice Data passed into the function should be constructed as follows:\ntokenAddress                           address     bytes  0 - 32\nrecipient                              address     bytes  32 - 64\ntokenID                                uint        bytes  64 - 96"
            },
            "functionSelector": "0968f264",
            "id": 14592,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14548,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14547,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "6563:10:75"
                },
                "nodeType": "ModifierInvocation",
                "src": "6563:10:75"
              }
            ],
            "name": "withdraw",
            "nameLocation": "6517:8:75",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 14546,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6554:8:75"
            },
            "parameters": {
              "id": 14545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14544,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6539:4:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14592,
                  "src": "6526:17:75",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14543,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6526:5:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6525:19:75"
            },
            "returnParameters": {
              "id": 14549,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6574:0:75"
            },
            "scope": 14616,
            "src": "6508:350:75",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              18300
            ],
            "body": {
              "id": 14614,
              "nodeType": "Block",
              "src": "7554:99:75",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "id": 14604,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14597,
                        "src": "7564:15:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 14606,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mustNotBeZero",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 19136,
                      "src": "7564:29:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_address_$bound_to$_t_address_$",
                        "typeString": "function (address) pure returns (address)"
                      }
                    },
                    "id": 14607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7564:31:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 14608,
                  "nodeType": "ExpressionStatement",
                  "src": "7564:31:75"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 14610,
                        "name": "resourceID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14595,
                        "src": "7618:10:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 14611,
                        "name": "contractAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14597,
                        "src": "7630:15:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 14609,
                      "name": "_setResource",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14742,
                      "src": "7605:12:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 14612,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7605:41:75",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 14613,
                  "nodeType": "ExpressionStatement",
                  "src": "7605:41:75"
                }
              ]
            },
            "documentation": {
              "id": 14593,
              "nodeType": "StructuredDocumentation",
              "src": "6864:578:75",
              "text": "@notice Sets {_resourceIDToContractAddress} with {contractAddress},\n{_tokenContractAddressToTokenProperties[tokenAddress].resourceID} with {resourceID} and\n{_tokenContractAddressToTokenProperties[tokenAddress].isWhitelisted} to true for {contractAddress} in ERCHandlerHelpers contract.\n@param resourceID ResourceID to be used when making deposits.\n@param contractAddress Address of contract to be called when a deposit is made and a deposited is executed.\n@param args Additional data to be passed to specified handler."
            },
            "functionSelector": "fa8675b0",
            "id": 14615,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 14602,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 14601,
                  "name": "onlyBridge",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 14663,
                  "src": "7543:10:75"
                },
                "nodeType": "ModifierInvocation",
                "src": "7543:10:75"
              }
            ],
            "name": "setResource",
            "nameLocation": "7456:11:75",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 14600,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 14595,
                  "mutability": "mutable",
                  "name": "resourceID",
                  "nameLocation": "7476:10:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14615,
                  "src": "7468:18:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 14594,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7468:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14597,
                  "mutability": "mutable",
                  "name": "contractAddress",
                  "nameLocation": "7496:15:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14615,
                  "src": "7488:23:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 14596,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7488:7:75",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 14599,
                  "mutability": "mutable",
                  "name": "args",
                  "nameLocation": "7528:4:75",
                  "nodeType": "VariableDeclaration",
                  "scope": 14615,
                  "src": "7513:19:75",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 14598,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7513:5:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7467:66:75"
            },
            "returnParameters": {
              "id": 14603,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7554:0:75"
            },
            "scope": 14616,
            "src": "7447:206:75",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 14617,
        "src": "530:7125:75",
        "usedErrors": [
          14647,
          19110,
          19116
        ]
      }
    ],
    "src": "81:7575:75"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.11+commit.d7f03943.Emscripten.clang"
  },
  "networks": {
    "1727170272871": {
      "events": {},
      "links": {},
      "address": "0xF28c11CB14C6d2B806f99EA8b138F65e74a1Ed66",
      "transactionHash": "0xed1a4013041fbd4bd76f88893ed5516cfbbb283b4ad7379f01e343bd0cfa490a"
    },
    "1727170313921": {
      "events": {},
      "links": {},
      "address": "0xF28c11CB14C6d2B806f99EA8b138F65e74a1Ed66",
      "transactionHash": "0x25e033ba7fce79172813dad4bb85ff48a6cc9c4ed29dce4fac254ea5f428854b"
    }
  },
  "schemaVersion": "3.4.6",
  "updatedAt": "2024-09-24T09:32:08.425Z",
  "networkType": "ethereum",
  "devdoc": {
    "author": "ChainSafe Systems.",
    "kind": "dev",
    "methods": {
      "constructor": {
        "params": {
          "bridgeAddress": "Contract address of previously deployed Bridge."
        }
      },
      "deposit(bytes32,address,bytes)": {
        "details": "Depending if the corresponding {tokenAddress} for the parsed {resourceID} is marked true in {_tokenContractAddressToTokenProperties[tokenAddress].isBurnable}, deposited tokens will be burned, if not, they will be locked.",
        "params": {
          "data": "Consists of {tokenID} padded to 32 bytes.",
          "depositor": "Address of account making the deposit in the Bridge contract.",
          "resourceID": "ResourceID used to find address of token to be used for deposit."
        },
        "returns": {
          "metaData": ": the deposited token metadata acquired by calling a {tokenURI} method in the token contract."
        }
      },
      "executeProposal(bytes32,bytes)": {
        "params": {
          "data": "Consists of {tokenID}, {resourceID}, {lenDestinationRecipientAddress}, {destinationRecipientAddress}, {lenMeta}, and {metaData} all padded to 32 bytes.",
          "resourceID": "ResourceID to be used when making deposits."
        }
      },
      "setBurnable(address)": {
        "params": {
          "contractAddress": "Address of contract to be used when making or executing deposits."
        }
      },
      "setResource(bytes32,address,bytes)": {
        "params": {
          "args": "Additional data to be passed to specified handler.",
          "contractAddress": "Address of contract to be called when a deposit is made and a deposited is executed.",
          "resourceID": "ResourceID to be used when making deposits."
        }
      },
      "withdraw(bytes)": {
        "params": {
          "data": "Consists of {tokenAddress}, {recipient}, and {tokenID} all padded to 32 bytes."
        }
      }
    },
    "title": "Handles ERC721 deposits and deposit executions.",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "_resourceIDToTokenContractAddress(bytes32)": {
        "notice": "Exposing getter for {_resourceIDToTokenContractAddress}."
      },
      "deposit(bytes32,address,bytes)": {
        "notice": "A deposit is initiated by making a deposit in the Bridge contract.Data passed into the function should be constructed as follows: tokenID                                     uint256    bytes    0  - 32 destinationRecipientAddress     length      uint256    bytes    32 - 64 destinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress)) metadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32) metadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - ENDIf the corresponding {tokenAddress} for the parsed {resourceID} supports {_INTERFACE_ERC721_METADATA}, then {metaData} will be set according to the {tokenURI} method in the token contract."
      },
      "executeProposal(bytes32,bytes)": {
        "notice": "Proposal execution should be initiated when a proposal is finalized in the Bridge contract. by a relayer on the deposit's destination chain.Data passed into the function should be constructed as follows: tokenID                                     uint256    bytes    0  - 32 destinationRecipientAddress     length      uint256    bytes    32 - 64 destinationRecipientAddress                   bytes    bytes    64 - (64 + len(destinationRecipientAddress)) metadata                        length      uint256    bytes    (64 + len(destinationRecipientAddress)) - (64 + len(destinationRecipientAddress) + 32) metadata                                      bytes    bytes    (64 + len(destinationRecipientAddress) + 32) - END"
      },
      "setBurnable(address)": {
        "notice": "First verifies {contractAddress} is whitelisted, then sets {_tokenContractAddressToTokenProperties[contractAddress].isBurnable} to true."
      },
      "setResource(bytes32,address,bytes)": {
        "notice": "Sets {_resourceIDToContractAddress} with {contractAddress}, {_tokenContractAddressToTokenProperties[tokenAddress].resourceID} with {resourceID} and {_tokenContractAddressToTokenProperties[tokenAddress].isWhitelisted} to true for {contractAddress} in ERCHandlerHelpers contract."
      },
      "withdraw(bytes)": {
        "notice": "Used to manually release ERC721 tokens from ERC721Safe.Data passed into the function should be constructed as follows: tokenAddress                           address     bytes  0 - 32 recipient                              address     bytes  32 - 64 tokenID                                uint        bytes  64 - 96"
      }
    },
    "notice": "This contract is intended to be used with the Bridge contract.",
    "version": 1
  }
}