{
  "contractName": "WitnetDeployerMeter",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_initCode",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "_salt",
          "type": "bytes32"
        }
      ],
      "name": "deploy",
      "outputs": [
        {
          "internalType": "address",
          "name": "_deployed",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_initCode",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "_salt",
          "type": "bytes32"
        }
      ],
      "name": "determineAddr",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_salt",
          "type": "bytes32"
        }
      ],
      "name": "determineProxyAddr",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_proxySalt",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_firstImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_initData",
          "type": "bytes"
        }
      ],
      "name": "proxify",
      "outputs": [
        {
          "internalType": "contract WitnetProxy",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"deploy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_deployed\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"determineAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"determineProxyAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proxySalt\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_firstImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initData\",\"type\":\"bytes\"}],\"name\":\"proxify\",\"outputs\":[{\"internalType\":\"contract WitnetProxy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Guillermo D\\u00edaz <guillermo@otherplane.com>\",\"kind\":\"dev\",\"methods\":{\"deploy(bytes,bytes32)\":{\"details\":\"The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the addressnor the nonce of the caller (i.e. see EIP-1014). \",\"params\":{\"_initCode\":\"Creation code, including construction logic and input parameters.\",\"_salt\":\"Arbitrary value to modify resulting address.\"},\"returns\":{\"_deployed\":\"Just deployed contract address.\"}},\"determineAddr(bytes,bytes32)\":{\"params\":{\"_initCode\":\"Creation code, including construction logic and input parameters.\",\"_salt\":\"Arbitrary value to modify resulting address.\"},\"returns\":{\"_0\":\"Deterministic contract address.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deploy(bytes,bytes32)\":{\"notice\":\"Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \"},\"determineAddr(bytes,bytes32)\":{\"notice\":\"Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\"}},\"notice\":\"WitnetDeployer contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, and CREATE3 factory (EIP-3171) for Witnet proxies, on the Meter Ecosystem.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/core/customs/WitnetDeployerMeter.sol\":\"WitnetDeployerMeter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"project:/contracts/core/WitnetProxy.sol\":{\"keccak256\":\"0x2b2f56fc69bf0e01f6f1062202d1682cd394fa3b3d9ff2f8f833ab51c9e866cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8017f76a71e4a52a5a5e249081c92510bac5b91f03f727e66ff4406238521337\",\"dweb:/ipfs/QmdWcPAL3MGtxGdpX5CMfgzz4YzxYEeCiFRoGHVCr8rLEL\"]},\"project:/contracts/core/customs/WitnetDeployerMeter.sol\":{\"keccak256\":\"0xa3cd53a9960cdb796979f8eea8757bf13b4d924942d01416e839bbffe4978451\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://988377ca97ffad092d9b497595f4c27ed61f474ff0922566e8761edce82b4784\",\"dweb:/ipfs/QmapuEsrVG9FgycnvnP66wQ8R7wy4rqt3MtcJtqDYtyh29\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]},\"project:/contracts/patterns/Proxiable.sol\":{\"keccak256\":\"0x86032205378fed9ed2bf155eed8ce4bdbb13b7f5960850c6d50954a38b61a3d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f89978eda4244a13f42a6092a94ac829bb3e38c92d77d4978b9f32894b187a63\",\"dweb:/ipfs/Qmbc1XaFCvLm3Sxvh7tP29Ug32jBGy3avsCqBGAptxs765\"]},\"project:/contracts/patterns/Upgradeable.sol\":{\"keccak256\":\"0xbeb025c71f037acb1a668174eb6930631bf397129beb825f2660e5d8cf19614f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fe6ce4dcd500093ae069d35b91829ccb471e1ca33ed0851fb053fbfe76c78aba\",\"dweb:/ipfs/QmT7huvCFS6bHDxt7HhEogJmyvYNbeb6dFTJudsVSX6nEs\"]}},\"version\":1}",
  "bytecode": "0x6080604052348015600f57600080fd5b50610f528061001f6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634998f038146100515780634af63f02146100805780635ba489e714610093578063d3933c29146100a6575b600080fd5b61006461005f366004610331565b6100b9565b6040516001600160a01b03909116815260200160405180910390f35b61006461008e3660046103ed565b6100ed565b6100646100a1366004610432565b610183565b6100646100b43660046103ed565b6102c8565b60006100e7604051806020016100ce90610324565b601f1982820381018352601f90910116604052836102c8565b92915050565b60006100f983836102c8565b9050806001600160a01b03163b6000036100e757818351602085016000f590506001600160a01b0381166100e75760405162461bcd60e51b815260206004820152602660248201527f5769746e65744465706c6f7965724d657465723a206465706c6f796d656e742060448201526519985a5b195960d21b60648201526084015b60405180910390fd5b60008061018f856100b9565b9050806001600160a01b03163b60000361026a576101cf604051806020016101b690610324565b601f1982820381018352601f90910116604052866100ed565b50806001600160a01b0316636fbc15e98533866040516020016101f3929190610497565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161021f929190610497565b6020604051808303816000875af115801561023e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026291906104f6565b5090506102c1565b60405162461bcd60e51b815260206004820152602660248201527f5769746e65744465706c6f7965724d657465723a20616c72656164792070726f6044820152651e1a599a595960d21b606482015260840161017a565b9392505050565b8151602092830120604080516001600160f81b0319818601523060601b6bffffffffffffffffffffffff191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b610a048061051983390190565b60006020828403121561034357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261037157600080fd5b813567ffffffffffffffff8082111561038c5761038c61034a565b604051601f8301601f19908116603f011681019082821181831017156103b4576103b461034a565b816040528381528660208588010111156103cd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561040057600080fd5b823567ffffffffffffffff81111561041757600080fd5b61042385828601610360565b95602094909401359450505050565b60008060006060848603121561044757600080fd5b8335925060208401356001600160a01b038116811461046557600080fd5b9150604084013567ffffffffffffffff81111561048157600080fd5b61048d86828701610360565b9150509250925092565b60018060a01b03831681526000602060406020840152835180604085015260005b818110156104d4578581018301518582016060015282016104b8565b506000606082860101526060601f19601f830116850101925050509392505050565b60006020828403121561050857600080fd5b815180151581146102c157600080fdfe6080604052348015600f57600080fd5b506109e58061001f6000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033a264697066735822122076ef67d5f32cacd27440bce7a70fcf962ccc64e1fbd3107940abae42016cdc3d64736f6c63430008190033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80634998f038146100515780634af63f02146100805780635ba489e714610093578063d3933c29146100a6575b600080fd5b61006461005f366004610331565b6100b9565b6040516001600160a01b03909116815260200160405180910390f35b61006461008e3660046103ed565b6100ed565b6100646100a1366004610432565b610183565b6100646100b43660046103ed565b6102c8565b60006100e7604051806020016100ce90610324565b601f1982820381018352601f90910116604052836102c8565b92915050565b60006100f983836102c8565b9050806001600160a01b03163b6000036100e757818351602085016000f590506001600160a01b0381166100e75760405162461bcd60e51b815260206004820152602660248201527f5769746e65744465706c6f7965724d657465723a206465706c6f796d656e742060448201526519985a5b195960d21b60648201526084015b60405180910390fd5b60008061018f856100b9565b9050806001600160a01b03163b60000361026a576101cf604051806020016101b690610324565b601f1982820381018352601f90910116604052866100ed565b50806001600160a01b0316636fbc15e98533866040516020016101f3929190610497565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161021f929190610497565b6020604051808303816000875af115801561023e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026291906104f6565b5090506102c1565b60405162461bcd60e51b815260206004820152602660248201527f5769746e65744465706c6f7965724d657465723a20616c72656164792070726f6044820152651e1a599a595960d21b606482015260840161017a565b9392505050565b8151602092830120604080516001600160f81b0319818601523060601b6bffffffffffffffffffffffff191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b610a048061051983390190565b60006020828403121561034357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261037157600080fd5b813567ffffffffffffffff8082111561038c5761038c61034a565b604051601f8301601f19908116603f011681019082821181831017156103b4576103b461034a565b816040528381528660208588010111156103cd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561040057600080fd5b823567ffffffffffffffff81111561041757600080fd5b61042385828601610360565b95602094909401359450505050565b60008060006060848603121561044757600080fd5b8335925060208401356001600160a01b038116811461046557600080fd5b9150604084013567ffffffffffffffff81111561048157600080fd5b61048d86828701610360565b9150509250925092565b60018060a01b03831681526000602060406020840152835180604085015260005b818110156104d4578581018301518582016060015282016104b8565b506000606082860101526060601f19601f830116850101925050509392505050565b60006020828403121561050857600080fd5b815180151581146102c157600080fdfe6080604052348015600f57600080fd5b506109e58061001f6000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033a264697066735822122076ef67d5f32cacd27440bce7a70fcf962ccc64e1fbd3107940abae42016cdc3d64736f6c63430008190033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nativeSrc": "0:4645:84",
        "nodeType": "YulBlock",
        "src": "0:4645:84",
        "statements": [
          {
            "nativeSrc": "6:3:84",
            "nodeType": "YulBlock",
            "src": "6:3:84",
            "statements": []
          },
          {
            "body": {
              "nativeSrc": "84:110:84",
              "nodeType": "YulBlock",
              "src": "84:110:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "130:16:84",
                    "nodeType": "YulBlock",
                    "src": "130:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "139:1:84",
                              "nodeType": "YulLiteral",
                              "src": "139:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "142:1:84",
                              "nodeType": "YulLiteral",
                              "src": "142:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "132:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "132:6:84"
                          },
                          "nativeSrc": "132:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "132:12:84"
                        },
                        "nativeSrc": "132:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "132:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "105:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "105:7:84"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "114:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "114:9:84"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "101:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "101:3:84"
                        },
                        "nativeSrc": "101:23:84",
                        "nodeType": "YulFunctionCall",
                        "src": "101:23:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "126:2:84",
                        "nodeType": "YulLiteral",
                        "src": "126:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "97:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "97:3:84"
                    },
                    "nativeSrc": "97:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "97:32:84"
                  },
                  "nativeSrc": "94:52:84",
                  "nodeType": "YulIf",
                  "src": "94:52:84"
                },
                {
                  "nativeSrc": "155:33:84",
                  "nodeType": "YulAssignment",
                  "src": "155:33:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "178:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "178:9:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "165:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "165:12:84"
                    },
                    "nativeSrc": "165:23:84",
                    "nodeType": "YulFunctionCall",
                    "src": "165:23:84"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "155:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "155:6:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32",
            "nativeSrc": "14:180:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "50:9:84",
                "nodeType": "YulTypedName",
                "src": "50:9:84",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "61:7:84",
                "nodeType": "YulTypedName",
                "src": "61:7:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "73:6:84",
                "nodeType": "YulTypedName",
                "src": "73:6:84",
                "type": ""
              }
            ],
            "src": "14:180:84"
          },
          {
            "body": {
              "nativeSrc": "300:102:84",
              "nodeType": "YulBlock",
              "src": "300:102:84",
              "statements": [
                {
                  "nativeSrc": "310:26:84",
                  "nodeType": "YulAssignment",
                  "src": "310:26:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "322:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "322:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "333:2:84",
                        "nodeType": "YulLiteral",
                        "src": "333:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "318:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "318:3:84"
                    },
                    "nativeSrc": "318:18:84",
                    "nodeType": "YulFunctionCall",
                    "src": "318:18:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "310:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "310:4:84"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "352:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "352:9:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "367:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "367:6:84"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "383:3:84",
                                    "nodeType": "YulLiteral",
                                    "src": "383:3:84",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "388:1:84",
                                    "nodeType": "YulLiteral",
                                    "src": "388:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "379:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "379:3:84"
                                },
                                "nativeSrc": "379:11:84",
                                "nodeType": "YulFunctionCall",
                                "src": "379:11:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "392:1:84",
                                "nodeType": "YulLiteral",
                                "src": "392:1:84",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "375:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "375:3:84"
                            },
                            "nativeSrc": "375:19:84",
                            "nodeType": "YulFunctionCall",
                            "src": "375:19:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "363:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "363:3:84"
                        },
                        "nativeSrc": "363:32:84",
                        "nodeType": "YulFunctionCall",
                        "src": "363:32:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "345:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "345:6:84"
                    },
                    "nativeSrc": "345:51:84",
                    "nodeType": "YulFunctionCall",
                    "src": "345:51:84"
                  },
                  "nativeSrc": "345:51:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "345:51:84"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nativeSrc": "199:203:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "269:9:84",
                "nodeType": "YulTypedName",
                "src": "269:9:84",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "280:6:84",
                "nodeType": "YulTypedName",
                "src": "280:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "291:4:84",
                "nodeType": "YulTypedName",
                "src": "291:4:84",
                "type": ""
              }
            ],
            "src": "199:203:84"
          },
          {
            "body": {
              "nativeSrc": "439:95:84",
              "nodeType": "YulBlock",
              "src": "439:95:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "456:1:84",
                        "nodeType": "YulLiteral",
                        "src": "456:1:84",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nativeSrc": "463:3:84",
                            "nodeType": "YulLiteral",
                            "src": "463:3:84",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "468:10:84",
                            "nodeType": "YulLiteral",
                            "src": "468:10:84",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nativeSrc": "459:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "459:3:84"
                        },
                        "nativeSrc": "459:20:84",
                        "nodeType": "YulFunctionCall",
                        "src": "459:20:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "449:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "449:6:84"
                    },
                    "nativeSrc": "449:31:84",
                    "nodeType": "YulFunctionCall",
                    "src": "449:31:84"
                  },
                  "nativeSrc": "449:31:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "449:31:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "496:1:84",
                        "nodeType": "YulLiteral",
                        "src": "496:1:84",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "499:4:84",
                        "nodeType": "YulLiteral",
                        "src": "499:4:84",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "489:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "489:6:84"
                    },
                    "nativeSrc": "489:15:84",
                    "nodeType": "YulFunctionCall",
                    "src": "489:15:84"
                  },
                  "nativeSrc": "489:15:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "489:15:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "520:1:84",
                        "nodeType": "YulLiteral",
                        "src": "520:1:84",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "523:4:84",
                        "nodeType": "YulLiteral",
                        "src": "523:4:84",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nativeSrc": "513:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "513:6:84"
                    },
                    "nativeSrc": "513:15:84",
                    "nodeType": "YulFunctionCall",
                    "src": "513:15:84"
                  },
                  "nativeSrc": "513:15:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "513:15:84"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nativeSrc": "407:127:84",
            "nodeType": "YulFunctionDefinition",
            "src": "407:127:84"
          },
          {
            "body": {
              "nativeSrc": "591:666:84",
              "nodeType": "YulBlock",
              "src": "591:666:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "640:16:84",
                    "nodeType": "YulBlock",
                    "src": "640:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "649:1:84",
                              "nodeType": "YulLiteral",
                              "src": "649:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "652:1:84",
                              "nodeType": "YulLiteral",
                              "src": "652:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "642:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "642:6:84"
                          },
                          "nativeSrc": "642:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "642:12:84"
                        },
                        "nativeSrc": "642:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "642:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nativeSrc": "619:6:84",
                                "nodeType": "YulIdentifier",
                                "src": "619:6:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "627:4:84",
                                "nodeType": "YulLiteral",
                                "src": "627:4:84",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "615:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "615:3:84"
                            },
                            "nativeSrc": "615:17:84",
                            "nodeType": "YulFunctionCall",
                            "src": "615:17:84"
                          },
                          {
                            "name": "end",
                            "nativeSrc": "634:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "634:3:84"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nativeSrc": "611:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "611:3:84"
                        },
                        "nativeSrc": "611:27:84",
                        "nodeType": "YulFunctionCall",
                        "src": "611:27:84"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "604:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "604:6:84"
                    },
                    "nativeSrc": "604:35:84",
                    "nodeType": "YulFunctionCall",
                    "src": "604:35:84"
                  },
                  "nativeSrc": "601:55:84",
                  "nodeType": "YulIf",
                  "src": "601:55:84"
                },
                {
                  "nativeSrc": "665:30:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "665:30:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "688:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "688:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "675:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "675:12:84"
                    },
                    "nativeSrc": "675:20:84",
                    "nodeType": "YulFunctionCall",
                    "src": "675:20:84"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nativeSrc": "669:2:84",
                      "nodeType": "YulTypedName",
                      "src": "669:2:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "704:28:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "704:28:84",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "714:18:84",
                    "nodeType": "YulLiteral",
                    "src": "714:18:84",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nativeSrc": "708:2:84",
                      "nodeType": "YulTypedName",
                      "src": "708:2:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "755:22:84",
                    "nodeType": "YulBlock",
                    "src": "755:22:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nativeSrc": "757:16:84",
                            "nodeType": "YulIdentifier",
                            "src": "757:16:84"
                          },
                          "nativeSrc": "757:18:84",
                          "nodeType": "YulFunctionCall",
                          "src": "757:18:84"
                        },
                        "nativeSrc": "757:18:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "757:18:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nativeSrc": "747:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "747:2:84"
                      },
                      {
                        "name": "_2",
                        "nativeSrc": "751:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "751:2:84"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "744:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "744:2:84"
                    },
                    "nativeSrc": "744:10:84",
                    "nodeType": "YulFunctionCall",
                    "src": "744:10:84"
                  },
                  "nativeSrc": "741:36:84",
                  "nodeType": "YulIf",
                  "src": "741:36:84"
                },
                {
                  "nativeSrc": "786:17:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "786:17:84",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "800:2:84",
                        "nodeType": "YulLiteral",
                        "src": "800:2:84",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "not",
                      "nativeSrc": "796:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "796:3:84"
                    },
                    "nativeSrc": "796:7:84",
                    "nodeType": "YulFunctionCall",
                    "src": "796:7:84"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nativeSrc": "790:2:84",
                      "nodeType": "YulTypedName",
                      "src": "790:2:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "812:23:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "812:23:84",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "832:2:84",
                        "nodeType": "YulLiteral",
                        "src": "832:2:84",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "826:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "826:5:84"
                    },
                    "nativeSrc": "826:9:84",
                    "nodeType": "YulFunctionCall",
                    "src": "826:9:84"
                  },
                  "variables": [
                    {
                      "name": "memPtr",
                      "nativeSrc": "816:6:84",
                      "nodeType": "YulTypedName",
                      "src": "816:6:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "nativeSrc": "844:71:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "844:71:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nativeSrc": "866:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "866:6:84"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nativeSrc": "890:2:84",
                                        "nodeType": "YulIdentifier",
                                        "src": "890:2:84"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "894:4:84",
                                        "nodeType": "YulLiteral",
                                        "src": "894:4:84",
                                        "type": "",
                                        "value": "0x1f"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "886:3:84",
                                      "nodeType": "YulIdentifier",
                                      "src": "886:3:84"
                                    },
                                    "nativeSrc": "886:13:84",
                                    "nodeType": "YulFunctionCall",
                                    "src": "886:13:84"
                                  },
                                  {
                                    "name": "_3",
                                    "nativeSrc": "901:2:84",
                                    "nodeType": "YulIdentifier",
                                    "src": "901:2:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nativeSrc": "882:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "882:3:84"
                                },
                                "nativeSrc": "882:22:84",
                                "nodeType": "YulFunctionCall",
                                "src": "882:22:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "906:2:84",
                                "nodeType": "YulLiteral",
                                "src": "906:2:84",
                                "type": "",
                                "value": "63"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "878:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "878:3:84"
                            },
                            "nativeSrc": "878:31:84",
                            "nodeType": "YulFunctionCall",
                            "src": "878:31:84"
                          },
                          {
                            "name": "_3",
                            "nativeSrc": "911:2:84",
                            "nodeType": "YulIdentifier",
                            "src": "911:2:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "874:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "874:3:84"
                        },
                        "nativeSrc": "874:40:84",
                        "nodeType": "YulFunctionCall",
                        "src": "874:40:84"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "862:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "862:3:84"
                    },
                    "nativeSrc": "862:53:84",
                    "nodeType": "YulFunctionCall",
                    "src": "862:53:84"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nativeSrc": "848:10:84",
                      "nodeType": "YulTypedName",
                      "src": "848:10:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "974:22:84",
                    "nodeType": "YulBlock",
                    "src": "974:22:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nativeSrc": "976:16:84",
                            "nodeType": "YulIdentifier",
                            "src": "976:16:84"
                          },
                          "nativeSrc": "976:18:84",
                          "nodeType": "YulFunctionCall",
                          "src": "976:18:84"
                        },
                        "nativeSrc": "976:18:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "976:18:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nativeSrc": "933:10:84",
                            "nodeType": "YulIdentifier",
                            "src": "933:10:84"
                          },
                          {
                            "name": "_2",
                            "nativeSrc": "945:2:84",
                            "nodeType": "YulIdentifier",
                            "src": "945:2:84"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nativeSrc": "930:2:84",
                          "nodeType": "YulIdentifier",
                          "src": "930:2:84"
                        },
                        "nativeSrc": "930:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "930:18:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nativeSrc": "953:10:84",
                            "nodeType": "YulIdentifier",
                            "src": "953:10:84"
                          },
                          {
                            "name": "memPtr",
                            "nativeSrc": "965:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "965:6:84"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nativeSrc": "950:2:84",
                          "nodeType": "YulIdentifier",
                          "src": "950:2:84"
                        },
                        "nativeSrc": "950:22:84",
                        "nodeType": "YulFunctionCall",
                        "src": "950:22:84"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nativeSrc": "927:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "927:2:84"
                    },
                    "nativeSrc": "927:46:84",
                    "nodeType": "YulFunctionCall",
                    "src": "927:46:84"
                  },
                  "nativeSrc": "924:72:84",
                  "nodeType": "YulIf",
                  "src": "924:72:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nativeSrc": "1012:2:84",
                        "nodeType": "YulLiteral",
                        "src": "1012:2:84",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nativeSrc": "1016:10:84",
                        "nodeType": "YulIdentifier",
                        "src": "1016:10:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1005:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1005:6:84"
                    },
                    "nativeSrc": "1005:22:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1005:22:84"
                  },
                  "nativeSrc": "1005:22:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "1005:22:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nativeSrc": "1043:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "1043:6:84"
                      },
                      {
                        "name": "_1",
                        "nativeSrc": "1051:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "1051:2:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1036:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1036:6:84"
                    },
                    "nativeSrc": "1036:18:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1036:18:84"
                  },
                  "nativeSrc": "1036:18:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "1036:18:84"
                },
                {
                  "body": {
                    "nativeSrc": "1102:16:84",
                    "nodeType": "YulBlock",
                    "src": "1102:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1111:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1111:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1114:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1114:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1104:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1104:6:84"
                          },
                          "nativeSrc": "1104:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1104:12:84"
                        },
                        "nativeSrc": "1104:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1104:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nativeSrc": "1077:6:84",
                                "nodeType": "YulIdentifier",
                                "src": "1077:6:84"
                              },
                              {
                                "name": "_1",
                                "nativeSrc": "1085:2:84",
                                "nodeType": "YulIdentifier",
                                "src": "1085:2:84"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "1073:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "1073:3:84"
                            },
                            "nativeSrc": "1073:15:84",
                            "nodeType": "YulFunctionCall",
                            "src": "1073:15:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1090:4:84",
                            "nodeType": "YulLiteral",
                            "src": "1090:4:84",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1069:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1069:3:84"
                        },
                        "nativeSrc": "1069:26:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1069:26:84"
                      },
                      {
                        "name": "end",
                        "nativeSrc": "1097:3:84",
                        "nodeType": "YulIdentifier",
                        "src": "1097:3:84"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "1066:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "1066:2:84"
                    },
                    "nativeSrc": "1066:35:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1066:35:84"
                  },
                  "nativeSrc": "1063:55:84",
                  "nodeType": "YulIf",
                  "src": "1063:55:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nativeSrc": "1144:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1144:6:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1152:4:84",
                            "nodeType": "YulLiteral",
                            "src": "1152:4:84",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1140:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1140:3:84"
                        },
                        "nativeSrc": "1140:17:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1140:17:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nativeSrc": "1163:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1163:6:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1171:4:84",
                            "nodeType": "YulLiteral",
                            "src": "1171:4:84",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1159:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1159:3:84"
                        },
                        "nativeSrc": "1159:17:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1159:17:84"
                      },
                      {
                        "name": "_1",
                        "nativeSrc": "1178:2:84",
                        "nodeType": "YulIdentifier",
                        "src": "1178:2:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nativeSrc": "1127:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1127:12:84"
                    },
                    "nativeSrc": "1127:54:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1127:54:84"
                  },
                  "nativeSrc": "1127:54:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "1127:54:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "memPtr",
                                "nativeSrc": "1205:6:84",
                                "nodeType": "YulIdentifier",
                                "src": "1205:6:84"
                              },
                              {
                                "name": "_1",
                                "nativeSrc": "1213:2:84",
                                "nodeType": "YulIdentifier",
                                "src": "1213:2:84"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "1201:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "1201:3:84"
                            },
                            "nativeSrc": "1201:15:84",
                            "nodeType": "YulFunctionCall",
                            "src": "1201:15:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1218:4:84",
                            "nodeType": "YulLiteral",
                            "src": "1218:4:84",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1197:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1197:3:84"
                        },
                        "nativeSrc": "1197:26:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1197:26:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1225:1:84",
                        "nodeType": "YulLiteral",
                        "src": "1225:1:84",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "1190:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1190:6:84"
                    },
                    "nativeSrc": "1190:37:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1190:37:84"
                  },
                  "nativeSrc": "1190:37:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "1190:37:84"
                },
                {
                  "nativeSrc": "1236:15:84",
                  "nodeType": "YulAssignment",
                  "src": "1236:15:84",
                  "value": {
                    "name": "memPtr",
                    "nativeSrc": "1245:6:84",
                    "nodeType": "YulIdentifier",
                    "src": "1245:6:84"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nativeSrc": "1236:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "1236:5:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_bytes",
            "nativeSrc": "539:718:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nativeSrc": "565:6:84",
                "nodeType": "YulTypedName",
                "src": "565:6:84",
                "type": ""
              },
              {
                "name": "end",
                "nativeSrc": "573:3:84",
                "nodeType": "YulTypedName",
                "src": "573:3:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nativeSrc": "581:5:84",
                "nodeType": "YulTypedName",
                "src": "581:5:84",
                "type": ""
              }
            ],
            "src": "539:718:84"
          },
          {
            "body": {
              "nativeSrc": "1358:292:84",
              "nodeType": "YulBlock",
              "src": "1358:292:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "1404:16:84",
                    "nodeType": "YulBlock",
                    "src": "1404:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1413:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1413:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1416:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1416:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1406:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1406:6:84"
                          },
                          "nativeSrc": "1406:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1406:12:84"
                        },
                        "nativeSrc": "1406:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1406:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "1379:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "1379:7:84"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "1388:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "1388:9:84"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "1375:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1375:3:84"
                        },
                        "nativeSrc": "1375:23:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1375:23:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1400:2:84",
                        "nodeType": "YulLiteral",
                        "src": "1400:2:84",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "1371:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "1371:3:84"
                    },
                    "nativeSrc": "1371:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1371:32:84"
                  },
                  "nativeSrc": "1368:52:84",
                  "nodeType": "YulIf",
                  "src": "1368:52:84"
                },
                {
                  "nativeSrc": "1429:37:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1429:37:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1456:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "1456:9:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1443:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1443:12:84"
                    },
                    "nativeSrc": "1443:23:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1443:23:84"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nativeSrc": "1433:6:84",
                      "nodeType": "YulTypedName",
                      "src": "1433:6:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "1509:16:84",
                    "nodeType": "YulBlock",
                    "src": "1509:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1518:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1518:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1521:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1521:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1511:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1511:6:84"
                          },
                          "nativeSrc": "1511:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1511:12:84"
                        },
                        "nativeSrc": "1511:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1511:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "1481:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "1481:6:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1489:18:84",
                        "nodeType": "YulLiteral",
                        "src": "1489:18:84",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "1478:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "1478:2:84"
                    },
                    "nativeSrc": "1478:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1478:30:84"
                  },
                  "nativeSrc": "1475:50:84",
                  "nodeType": "YulIf",
                  "src": "1475:50:84"
                },
                {
                  "nativeSrc": "1534:59:84",
                  "nodeType": "YulAssignment",
                  "src": "1534:59:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "1565:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "1565:9:84"
                          },
                          {
                            "name": "offset",
                            "nativeSrc": "1576:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1576:6:84"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1561:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1561:3:84"
                        },
                        "nativeSrc": "1561:22:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1561:22:84"
                      },
                      {
                        "name": "dataEnd",
                        "nativeSrc": "1585:7:84",
                        "nodeType": "YulIdentifier",
                        "src": "1585:7:84"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nativeSrc": "1544:16:84",
                      "nodeType": "YulIdentifier",
                      "src": "1544:16:84"
                    },
                    "nativeSrc": "1544:49:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1544:49:84"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "1534:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1534:6:84"
                    }
                  ]
                },
                {
                  "nativeSrc": "1602:42:84",
                  "nodeType": "YulAssignment",
                  "src": "1602:42:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "1629:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "1629:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1640:2:84",
                            "nodeType": "YulLiteral",
                            "src": "1640:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1625:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1625:3:84"
                        },
                        "nativeSrc": "1625:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1625:18:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1612:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1612:12:84"
                    },
                    "nativeSrc": "1612:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1612:32:84"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nativeSrc": "1602:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1602:6:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes_memory_ptrt_bytes32",
            "nativeSrc": "1262:388:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "1316:9:84",
                "nodeType": "YulTypedName",
                "src": "1316:9:84",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "1327:7:84",
                "nodeType": "YulTypedName",
                "src": "1327:7:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "1339:6:84",
                "nodeType": "YulTypedName",
                "src": "1339:6:84",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "1347:6:84",
                "nodeType": "YulTypedName",
                "src": "1347:6:84",
                "type": ""
              }
            ],
            "src": "1262:388:84"
          },
          {
            "body": {
              "nativeSrc": "1768:449:84",
              "nodeType": "YulBlock",
              "src": "1768:449:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "1814:16:84",
                    "nodeType": "YulBlock",
                    "src": "1814:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1823:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1823:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "1826:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1826:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1816:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1816:6:84"
                          },
                          "nativeSrc": "1816:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1816:12:84"
                        },
                        "nativeSrc": "1816:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1816:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "1789:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "1789:7:84"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "1798:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "1798:9:84"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "1785:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1785:3:84"
                        },
                        "nativeSrc": "1785:23:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1785:23:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "1810:2:84",
                        "nodeType": "YulLiteral",
                        "src": "1810:2:84",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "1781:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "1781:3:84"
                    },
                    "nativeSrc": "1781:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1781:32:84"
                  },
                  "nativeSrc": "1778:52:84",
                  "nodeType": "YulIf",
                  "src": "1778:52:84"
                },
                {
                  "nativeSrc": "1839:33:84",
                  "nodeType": "YulAssignment",
                  "src": "1839:33:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "1862:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "1862:9:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1849:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1849:12:84"
                    },
                    "nativeSrc": "1849:23:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1849:23:84"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "1839:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1839:6:84"
                    }
                  ]
                },
                {
                  "nativeSrc": "1881:45:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "1881:45:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "1911:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "1911:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "1922:2:84",
                            "nodeType": "YulLiteral",
                            "src": "1922:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "1907:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "1907:3:84"
                        },
                        "nativeSrc": "1907:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1907:18:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "1894:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "1894:12:84"
                    },
                    "nativeSrc": "1894:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1894:32:84"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "1885:5:84",
                      "nodeType": "YulTypedName",
                      "src": "1885:5:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "1989:16:84",
                    "nodeType": "YulBlock",
                    "src": "1989:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "1998:1:84",
                              "nodeType": "YulLiteral",
                              "src": "1998:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2001:1:84",
                              "nodeType": "YulLiteral",
                              "src": "2001:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "1991:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "1991:6:84"
                          },
                          "nativeSrc": "1991:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "1991:12:84"
                        },
                        "nativeSrc": "1991:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "1991:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "1948:5:84",
                            "nodeType": "YulIdentifier",
                            "src": "1948:5:84"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nativeSrc": "1959:5:84",
                                "nodeType": "YulIdentifier",
                                "src": "1959:5:84"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1974:3:84",
                                        "nodeType": "YulLiteral",
                                        "src": "1974:3:84",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1979:1:84",
                                        "nodeType": "YulLiteral",
                                        "src": "1979:1:84",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nativeSrc": "1970:3:84",
                                      "nodeType": "YulIdentifier",
                                      "src": "1970:3:84"
                                    },
                                    "nativeSrc": "1970:11:84",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1970:11:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1983:1:84",
                                    "nodeType": "YulLiteral",
                                    "src": "1983:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nativeSrc": "1966:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "1966:3:84"
                                },
                                "nativeSrc": "1966:19:84",
                                "nodeType": "YulFunctionCall",
                                "src": "1966:19:84"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "1955:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "1955:3:84"
                            },
                            "nativeSrc": "1955:31:84",
                            "nodeType": "YulFunctionCall",
                            "src": "1955:31:84"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "1945:2:84",
                          "nodeType": "YulIdentifier",
                          "src": "1945:2:84"
                        },
                        "nativeSrc": "1945:42:84",
                        "nodeType": "YulFunctionCall",
                        "src": "1945:42:84"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "1938:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "1938:6:84"
                    },
                    "nativeSrc": "1938:50:84",
                    "nodeType": "YulFunctionCall",
                    "src": "1938:50:84"
                  },
                  "nativeSrc": "1935:70:84",
                  "nodeType": "YulIf",
                  "src": "1935:70:84"
                },
                {
                  "nativeSrc": "2014:15:84",
                  "nodeType": "YulAssignment",
                  "src": "2014:15:84",
                  "value": {
                    "name": "value",
                    "nativeSrc": "2024:5:84",
                    "nodeType": "YulIdentifier",
                    "src": "2024:5:84"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nativeSrc": "2014:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2014:6:84"
                    }
                  ]
                },
                {
                  "nativeSrc": "2038:46:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "2038:46:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2069:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2069:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2080:2:84",
                            "nodeType": "YulLiteral",
                            "src": "2080:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2065:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2065:3:84"
                        },
                        "nativeSrc": "2065:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2065:18:84"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nativeSrc": "2052:12:84",
                      "nodeType": "YulIdentifier",
                      "src": "2052:12:84"
                    },
                    "nativeSrc": "2052:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2052:32:84"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nativeSrc": "2042:6:84",
                      "nodeType": "YulTypedName",
                      "src": "2042:6:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "2127:16:84",
                    "nodeType": "YulBlock",
                    "src": "2127:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "2136:1:84",
                              "nodeType": "YulLiteral",
                              "src": "2136:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "2139:1:84",
                              "nodeType": "YulLiteral",
                              "src": "2139:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "2129:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "2129:6:84"
                          },
                          "nativeSrc": "2129:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "2129:12:84"
                        },
                        "nativeSrc": "2129:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "2129:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nativeSrc": "2099:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "2099:6:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2107:18:84",
                        "nodeType": "YulLiteral",
                        "src": "2107:18:84",
                        "type": "",
                        "value": "0xffffffffffffffff"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nativeSrc": "2096:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "2096:2:84"
                    },
                    "nativeSrc": "2096:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2096:30:84"
                  },
                  "nativeSrc": "2093:50:84",
                  "nodeType": "YulIf",
                  "src": "2093:50:84"
                },
                {
                  "nativeSrc": "2152:59:84",
                  "nodeType": "YulAssignment",
                  "src": "2152:59:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2183:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2183:9:84"
                          },
                          {
                            "name": "offset",
                            "nativeSrc": "2194:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "2194:6:84"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2179:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2179:3:84"
                        },
                        "nativeSrc": "2179:22:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2179:22:84"
                      },
                      {
                        "name": "dataEnd",
                        "nativeSrc": "2203:7:84",
                        "nodeType": "YulIdentifier",
                        "src": "2203:7:84"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_bytes",
                      "nativeSrc": "2162:16:84",
                      "nodeType": "YulIdentifier",
                      "src": "2162:16:84"
                    },
                    "nativeSrc": "2162:49:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2162:49:84"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nativeSrc": "2152:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2152:6:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bytes32t_addresst_bytes_memory_ptr",
            "nativeSrc": "1655:562:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "1718:9:84",
                "nodeType": "YulTypedName",
                "src": "1718:9:84",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "1729:7:84",
                "nodeType": "YulTypedName",
                "src": "1729:7:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "1741:6:84",
                "nodeType": "YulTypedName",
                "src": "1741:6:84",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "1749:6:84",
                "nodeType": "YulTypedName",
                "src": "1749:6:84",
                "type": ""
              },
              {
                "name": "value2",
                "nativeSrc": "1757:6:84",
                "nodeType": "YulTypedName",
                "src": "1757:6:84",
                "type": ""
              }
            ],
            "src": "1655:562:84"
          },
          {
            "body": {
              "nativeSrc": "2351:102:84",
              "nodeType": "YulBlock",
              "src": "2351:102:84",
              "statements": [
                {
                  "nativeSrc": "2361:26:84",
                  "nodeType": "YulAssignment",
                  "src": "2361:26:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2373:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "2373:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2384:2:84",
                        "nodeType": "YulLiteral",
                        "src": "2384:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "2369:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "2369:3:84"
                    },
                    "nativeSrc": "2369:18:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2369:18:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "2361:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "2361:4:84"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2403:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "2403:9:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "2418:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "2418:6:84"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2434:3:84",
                                    "nodeType": "YulLiteral",
                                    "src": "2434:3:84",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "2439:1:84",
                                    "nodeType": "YulLiteral",
                                    "src": "2439:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "2430:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "2430:3:84"
                                },
                                "nativeSrc": "2430:11:84",
                                "nodeType": "YulFunctionCall",
                                "src": "2430:11:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "2443:1:84",
                                "nodeType": "YulLiteral",
                                "src": "2443:1:84",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "2426:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "2426:3:84"
                            },
                            "nativeSrc": "2426:19:84",
                            "nodeType": "YulFunctionCall",
                            "src": "2426:19:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "2414:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2414:3:84"
                        },
                        "nativeSrc": "2414:32:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2414:32:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2396:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2396:6:84"
                    },
                    "nativeSrc": "2396:51:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2396:51:84"
                  },
                  "nativeSrc": "2396:51:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2396:51:84"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_WitnetProxy_$3700__to_t_address_payable__fromStack_reversed",
            "nativeSrc": "2222:231:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2320:9:84",
                "nodeType": "YulTypedName",
                "src": "2320:9:84",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "2331:6:84",
                "nodeType": "YulTypedName",
                "src": "2331:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "2342:4:84",
                "nodeType": "YulTypedName",
                "src": "2342:4:84",
                "type": ""
              }
            ],
            "src": "2222:231:84"
          },
          {
            "body": {
              "nativeSrc": "2632:228:84",
              "nodeType": "YulBlock",
              "src": "2632:228:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2649:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "2649:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2660:2:84",
                        "nodeType": "YulLiteral",
                        "src": "2660:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2642:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2642:6:84"
                    },
                    "nativeSrc": "2642:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2642:21:84"
                  },
                  "nativeSrc": "2642:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2642:21:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2683:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2683:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2694:2:84",
                            "nodeType": "YulLiteral",
                            "src": "2694:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2679:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2679:3:84"
                        },
                        "nativeSrc": "2679:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2679:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2699:2:84",
                        "nodeType": "YulLiteral",
                        "src": "2699:2:84",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2672:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2672:6:84"
                    },
                    "nativeSrc": "2672:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2672:30:84"
                  },
                  "nativeSrc": "2672:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2672:30:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2722:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2722:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2733:2:84",
                            "nodeType": "YulLiteral",
                            "src": "2733:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2718:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2718:3:84"
                        },
                        "nativeSrc": "2718:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2718:18:84"
                      },
                      {
                        "hexValue": "5769746e65744465706c6f7965724d657465723a206465706c6f796d656e7420",
                        "kind": "string",
                        "nativeSrc": "2738:34:84",
                        "nodeType": "YulLiteral",
                        "src": "2738:34:84",
                        "type": "",
                        "value": "WitnetDeployerMeter: deployment "
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2711:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2711:6:84"
                    },
                    "nativeSrc": "2711:62:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2711:62:84"
                  },
                  "nativeSrc": "2711:62:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2711:62:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "2793:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "2793:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "2804:2:84",
                            "nodeType": "YulLiteral",
                            "src": "2804:2:84",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "2789:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "2789:3:84"
                        },
                        "nativeSrc": "2789:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "2789:18:84"
                      },
                      {
                        "hexValue": "6661696c6564",
                        "kind": "string",
                        "nativeSrc": "2809:8:84",
                        "nodeType": "YulLiteral",
                        "src": "2809:8:84",
                        "type": "",
                        "value": "failed"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "2782:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "2782:6:84"
                    },
                    "nativeSrc": "2782:36:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2782:36:84"
                  },
                  "nativeSrc": "2782:36:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "2782:36:84"
                },
                {
                  "nativeSrc": "2827:27:84",
                  "nodeType": "YulAssignment",
                  "src": "2827:27:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "2839:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "2839:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "2850:3:84",
                        "nodeType": "YulLiteral",
                        "src": "2850:3:84",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "2835:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "2835:3:84"
                    },
                    "nativeSrc": "2835:19:84",
                    "nodeType": "YulFunctionCall",
                    "src": "2835:19:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "2827:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "2827:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_c0febb5364a27499c6fec52585c29500617ce8e21006c354030fb3280a8ed5f2__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "2458:402:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2609:9:84",
                "nodeType": "YulTypedName",
                "src": "2609:9:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "2623:4:84",
                "nodeType": "YulTypedName",
                "src": "2623:4:84",
                "type": ""
              }
            ],
            "src": "2458:402:84"
          },
          {
            "body": {
              "nativeSrc": "3012:496:84",
              "nodeType": "YulBlock",
              "src": "3012:496:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3029:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "3029:9:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "3044:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "3044:6:84"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3060:3:84",
                                    "nodeType": "YulLiteral",
                                    "src": "3060:3:84",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3065:1:84",
                                    "nodeType": "YulLiteral",
                                    "src": "3065:1:84",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nativeSrc": "3056:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "3056:3:84"
                                },
                                "nativeSrc": "3056:11:84",
                                "nodeType": "YulFunctionCall",
                                "src": "3056:11:84"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "3069:1:84",
                                "nodeType": "YulLiteral",
                                "src": "3069:1:84",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nativeSrc": "3052:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "3052:3:84"
                            },
                            "nativeSrc": "3052:19:84",
                            "nodeType": "YulFunctionCall",
                            "src": "3052:19:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "3040:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3040:3:84"
                        },
                        "nativeSrc": "3040:32:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3040:32:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3022:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3022:6:84"
                    },
                    "nativeSrc": "3022:51:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3022:51:84"
                  },
                  "nativeSrc": "3022:51:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3022:51:84"
                },
                {
                  "nativeSrc": "3082:12:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3082:12:84",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "3092:2:84",
                    "nodeType": "YulLiteral",
                    "src": "3092:2:84",
                    "type": "",
                    "value": "32"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nativeSrc": "3086:2:84",
                      "nodeType": "YulTypedName",
                      "src": "3086:2:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3114:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "3114:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3125:2:84",
                            "nodeType": "YulLiteral",
                            "src": "3125:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3110:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3110:3:84"
                        },
                        "nativeSrc": "3110:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3110:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3130:2:84",
                        "nodeType": "YulLiteral",
                        "src": "3130:2:84",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3103:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3103:6:84"
                    },
                    "nativeSrc": "3103:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3103:30:84"
                  },
                  "nativeSrc": "3103:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3103:30:84"
                },
                {
                  "nativeSrc": "3142:27:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3142:27:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nativeSrc": "3162:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "3162:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "3156:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "3156:5:84"
                    },
                    "nativeSrc": "3156:13:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3156:13:84"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nativeSrc": "3146:6:84",
                      "nodeType": "YulTypedName",
                      "src": "3146:6:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3189:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "3189:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3200:2:84",
                            "nodeType": "YulLiteral",
                            "src": "3200:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3185:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3185:3:84"
                        },
                        "nativeSrc": "3185:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3185:18:84"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "3205:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "3205:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3178:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3178:6:84"
                    },
                    "nativeSrc": "3178:34:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3178:34:84"
                  },
                  "nativeSrc": "3178:34:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3178:34:84"
                },
                {
                  "nativeSrc": "3221:10:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3221:10:84",
                  "value": {
                    "kind": "number",
                    "nativeSrc": "3230:1:84",
                    "nodeType": "YulLiteral",
                    "src": "3230:1:84",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nativeSrc": "3225:1:84",
                      "nodeType": "YulTypedName",
                      "src": "3225:1:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "3290:90:84",
                    "nodeType": "YulBlock",
                    "src": "3290:90:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "headStart",
                                      "nativeSrc": "3319:9:84",
                                      "nodeType": "YulIdentifier",
                                      "src": "3319:9:84"
                                    },
                                    {
                                      "name": "i",
                                      "nativeSrc": "3330:1:84",
                                      "nodeType": "YulIdentifier",
                                      "src": "3330:1:84"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nativeSrc": "3315:3:84",
                                    "nodeType": "YulIdentifier",
                                    "src": "3315:3:84"
                                  },
                                  "nativeSrc": "3315:17:84",
                                  "nodeType": "YulFunctionCall",
                                  "src": "3315:17:84"
                                },
                                {
                                  "kind": "number",
                                  "nativeSrc": "3334:2:84",
                                  "nodeType": "YulLiteral",
                                  "src": "3334:2:84",
                                  "type": "",
                                  "value": "96"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nativeSrc": "3311:3:84",
                                "nodeType": "YulIdentifier",
                                "src": "3311:3:84"
                              },
                              "nativeSrc": "3311:26:84",
                              "nodeType": "YulFunctionCall",
                              "src": "3311:26:84"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "value1",
                                          "nativeSrc": "3353:6:84",
                                          "nodeType": "YulIdentifier",
                                          "src": "3353:6:84"
                                        },
                                        {
                                          "name": "i",
                                          "nativeSrc": "3361:1:84",
                                          "nodeType": "YulIdentifier",
                                          "src": "3361:1:84"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nativeSrc": "3349:3:84",
                                        "nodeType": "YulIdentifier",
                                        "src": "3349:3:84"
                                      },
                                      "nativeSrc": "3349:14:84",
                                      "nodeType": "YulFunctionCall",
                                      "src": "3349:14:84"
                                    },
                                    {
                                      "name": "_1",
                                      "nativeSrc": "3365:2:84",
                                      "nodeType": "YulIdentifier",
                                      "src": "3365:2:84"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nativeSrc": "3345:3:84",
                                    "nodeType": "YulIdentifier",
                                    "src": "3345:3:84"
                                  },
                                  "nativeSrc": "3345:23:84",
                                  "nodeType": "YulFunctionCall",
                                  "src": "3345:23:84"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nativeSrc": "3339:5:84",
                                "nodeType": "YulIdentifier",
                                "src": "3339:5:84"
                              },
                              "nativeSrc": "3339:30:84",
                              "nodeType": "YulFunctionCall",
                              "src": "3339:30:84"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nativeSrc": "3304:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "3304:6:84"
                          },
                          "nativeSrc": "3304:66:84",
                          "nodeType": "YulFunctionCall",
                          "src": "3304:66:84"
                        },
                        "nativeSrc": "3304:66:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "3304:66:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nativeSrc": "3251:1:84",
                        "nodeType": "YulIdentifier",
                        "src": "3251:1:84"
                      },
                      {
                        "name": "length",
                        "nativeSrc": "3254:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "3254:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nativeSrc": "3248:2:84",
                      "nodeType": "YulIdentifier",
                      "src": "3248:2:84"
                    },
                    "nativeSrc": "3248:13:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3248:13:84"
                  },
                  "nativeSrc": "3240:140:84",
                  "nodeType": "YulForLoop",
                  "post": {
                    "nativeSrc": "3262:19:84",
                    "nodeType": "YulBlock",
                    "src": "3262:19:84",
                    "statements": [
                      {
                        "nativeSrc": "3264:15:84",
                        "nodeType": "YulAssignment",
                        "src": "3264:15:84",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nativeSrc": "3273:1:84",
                              "nodeType": "YulIdentifier",
                              "src": "3273:1:84"
                            },
                            {
                              "name": "_1",
                              "nativeSrc": "3276:2:84",
                              "nodeType": "YulIdentifier",
                              "src": "3276:2:84"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nativeSrc": "3269:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "3269:3:84"
                          },
                          "nativeSrc": "3269:10:84",
                          "nodeType": "YulFunctionCall",
                          "src": "3269:10:84"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nativeSrc": "3264:1:84",
                            "nodeType": "YulIdentifier",
                            "src": "3264:1:84"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nativeSrc": "3244:3:84",
                    "nodeType": "YulBlock",
                    "src": "3244:3:84",
                    "statements": []
                  },
                  "src": "3240:140:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "headStart",
                                "nativeSrc": "3404:9:84",
                                "nodeType": "YulIdentifier",
                                "src": "3404:9:84"
                              },
                              {
                                "name": "length",
                                "nativeSrc": "3415:6:84",
                                "nodeType": "YulIdentifier",
                                "src": "3415:6:84"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nativeSrc": "3400:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "3400:3:84"
                            },
                            "nativeSrc": "3400:22:84",
                            "nodeType": "YulFunctionCall",
                            "src": "3400:22:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "3424:2:84",
                            "nodeType": "YulLiteral",
                            "src": "3424:2:84",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3396:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3396:3:84"
                        },
                        "nativeSrc": "3396:31:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3396:31:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3429:1:84",
                        "nodeType": "YulLiteral",
                        "src": "3429:1:84",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3389:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3389:6:84"
                    },
                    "nativeSrc": "3389:42:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3389:42:84"
                  },
                  "nativeSrc": "3389:42:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3389:42:84"
                },
                {
                  "nativeSrc": "3440:62:84",
                  "nodeType": "YulAssignment",
                  "src": "3440:62:84",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "3456:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "3456:9:84"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nativeSrc": "3475:6:84",
                                    "nodeType": "YulIdentifier",
                                    "src": "3475:6:84"
                                  },
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3483:2:84",
                                    "nodeType": "YulLiteral",
                                    "src": "3483:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nativeSrc": "3471:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "3471:3:84"
                                },
                                "nativeSrc": "3471:15:84",
                                "nodeType": "YulFunctionCall",
                                "src": "3471:15:84"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "3492:2:84",
                                    "nodeType": "YulLiteral",
                                    "src": "3492:2:84",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nativeSrc": "3488:3:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "3488:3:84"
                                },
                                "nativeSrc": "3488:7:84",
                                "nodeType": "YulFunctionCall",
                                "src": "3488:7:84"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nativeSrc": "3467:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "3467:3:84"
                            },
                            "nativeSrc": "3467:29:84",
                            "nodeType": "YulFunctionCall",
                            "src": "3467:29:84"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "3452:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3452:3:84"
                        },
                        "nativeSrc": "3452:45:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3452:45:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3499:2:84",
                        "nodeType": "YulLiteral",
                        "src": "3499:2:84",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "3448:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "3448:3:84"
                    },
                    "nativeSrc": "3448:54:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3448:54:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "3440:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "3440:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed",
            "nativeSrc": "2865:643:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "2973:9:84",
                "nodeType": "YulTypedName",
                "src": "2973:9:84",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "2984:6:84",
                "nodeType": "YulTypedName",
                "src": "2984:6:84",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "2992:6:84",
                "nodeType": "YulTypedName",
                "src": "2992:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "3003:4:84",
                "nodeType": "YulTypedName",
                "src": "3003:4:84",
                "type": ""
              }
            ],
            "src": "2865:643:84"
          },
          {
            "body": {
              "nativeSrc": "3591:199:84",
              "nodeType": "YulBlock",
              "src": "3591:199:84",
              "statements": [
                {
                  "body": {
                    "nativeSrc": "3637:16:84",
                    "nodeType": "YulBlock",
                    "src": "3637:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "3646:1:84",
                              "nodeType": "YulLiteral",
                              "src": "3646:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3649:1:84",
                              "nodeType": "YulLiteral",
                              "src": "3649:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "3639:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "3639:6:84"
                          },
                          "nativeSrc": "3639:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "3639:12:84"
                        },
                        "nativeSrc": "3639:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "3639:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nativeSrc": "3612:7:84",
                            "nodeType": "YulIdentifier",
                            "src": "3612:7:84"
                          },
                          {
                            "name": "headStart",
                            "nativeSrc": "3621:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "3621:9:84"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nativeSrc": "3608:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "3608:3:84"
                        },
                        "nativeSrc": "3608:23:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3608:23:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3633:2:84",
                        "nodeType": "YulLiteral",
                        "src": "3633:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nativeSrc": "3604:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "3604:3:84"
                    },
                    "nativeSrc": "3604:32:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3604:32:84"
                  },
                  "nativeSrc": "3601:52:84",
                  "nodeType": "YulIf",
                  "src": "3601:52:84"
                },
                {
                  "nativeSrc": "3662:29:84",
                  "nodeType": "YulVariableDeclaration",
                  "src": "3662:29:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3681:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "3681:9:84"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nativeSrc": "3675:5:84",
                      "nodeType": "YulIdentifier",
                      "src": "3675:5:84"
                    },
                    "nativeSrc": "3675:16:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3675:16:84"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nativeSrc": "3666:5:84",
                      "nodeType": "YulTypedName",
                      "src": "3666:5:84",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nativeSrc": "3744:16:84",
                    "nodeType": "YulBlock",
                    "src": "3744:16:84",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nativeSrc": "3753:1:84",
                              "nodeType": "YulLiteral",
                              "src": "3753:1:84",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nativeSrc": "3756:1:84",
                              "nodeType": "YulLiteral",
                              "src": "3756:1:84",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nativeSrc": "3746:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "3746:6:84"
                          },
                          "nativeSrc": "3746:12:84",
                          "nodeType": "YulFunctionCall",
                          "src": "3746:12:84"
                        },
                        "nativeSrc": "3746:12:84",
                        "nodeType": "YulExpressionStatement",
                        "src": "3746:12:84"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nativeSrc": "3713:5:84",
                            "nodeType": "YulIdentifier",
                            "src": "3713:5:84"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nativeSrc": "3734:5:84",
                                    "nodeType": "YulIdentifier",
                                    "src": "3734:5:84"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nativeSrc": "3727:6:84",
                                  "nodeType": "YulIdentifier",
                                  "src": "3727:6:84"
                                },
                                "nativeSrc": "3727:13:84",
                                "nodeType": "YulFunctionCall",
                                "src": "3727:13:84"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nativeSrc": "3720:6:84",
                              "nodeType": "YulIdentifier",
                              "src": "3720:6:84"
                            },
                            "nativeSrc": "3720:21:84",
                            "nodeType": "YulFunctionCall",
                            "src": "3720:21:84"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nativeSrc": "3710:2:84",
                          "nodeType": "YulIdentifier",
                          "src": "3710:2:84"
                        },
                        "nativeSrc": "3710:32:84",
                        "nodeType": "YulFunctionCall",
                        "src": "3710:32:84"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nativeSrc": "3703:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3703:6:84"
                    },
                    "nativeSrc": "3703:40:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3703:40:84"
                  },
                  "nativeSrc": "3700:60:84",
                  "nodeType": "YulIf",
                  "src": "3700:60:84"
                },
                {
                  "nativeSrc": "3769:15:84",
                  "nodeType": "YulAssignment",
                  "src": "3769:15:84",
                  "value": {
                    "name": "value",
                    "nativeSrc": "3779:5:84",
                    "nodeType": "YulIdentifier",
                    "src": "3779:5:84"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nativeSrc": "3769:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3769:6:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nativeSrc": "3513:277:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "3557:9:84",
                "nodeType": "YulTypedName",
                "src": "3557:9:84",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nativeSrc": "3568:7:84",
                "nodeType": "YulTypedName",
                "src": "3568:7:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nativeSrc": "3580:6:84",
                "nodeType": "YulTypedName",
                "src": "3580:6:84",
                "type": ""
              }
            ],
            "src": "3513:277:84"
          },
          {
            "body": {
              "nativeSrc": "3969:228:84",
              "nodeType": "YulBlock",
              "src": "3969:228:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "3986:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "3986:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "3997:2:84",
                        "nodeType": "YulLiteral",
                        "src": "3997:2:84",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "3979:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "3979:6:84"
                    },
                    "nativeSrc": "3979:21:84",
                    "nodeType": "YulFunctionCall",
                    "src": "3979:21:84"
                  },
                  "nativeSrc": "3979:21:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "3979:21:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4020:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "4020:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4031:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4031:2:84",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4016:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4016:3:84"
                        },
                        "nativeSrc": "4016:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4016:18:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4036:2:84",
                        "nodeType": "YulLiteral",
                        "src": "4036:2:84",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4009:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4009:6:84"
                    },
                    "nativeSrc": "4009:30:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4009:30:84"
                  },
                  "nativeSrc": "4009:30:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4009:30:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4059:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "4059:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4070:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4070:2:84",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4055:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4055:3:84"
                        },
                        "nativeSrc": "4055:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4055:18:84"
                      },
                      {
                        "hexValue": "5769746e65744465706c6f7965724d657465723a20616c72656164792070726f",
                        "kind": "string",
                        "nativeSrc": "4075:34:84",
                        "nodeType": "YulLiteral",
                        "src": "4075:34:84",
                        "type": "",
                        "value": "WitnetDeployerMeter: already pro"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4048:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4048:6:84"
                    },
                    "nativeSrc": "4048:62:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4048:62:84"
                  },
                  "nativeSrc": "4048:62:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4048:62:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nativeSrc": "4130:9:84",
                            "nodeType": "YulIdentifier",
                            "src": "4130:9:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4141:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4141:2:84",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4126:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4126:3:84"
                        },
                        "nativeSrc": "4126:18:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4126:18:84"
                      },
                      {
                        "hexValue": "786966696564",
                        "kind": "string",
                        "nativeSrc": "4146:8:84",
                        "nodeType": "YulLiteral",
                        "src": "4146:8:84",
                        "type": "",
                        "value": "xified"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4119:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4119:6:84"
                    },
                    "nativeSrc": "4119:36:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4119:36:84"
                  },
                  "nativeSrc": "4119:36:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4119:36:84"
                },
                {
                  "nativeSrc": "4164:27:84",
                  "nodeType": "YulAssignment",
                  "src": "4164:27:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nativeSrc": "4176:9:84",
                        "nodeType": "YulIdentifier",
                        "src": "4176:9:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4187:3:84",
                        "nodeType": "YulLiteral",
                        "src": "4187:3:84",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "4172:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "4172:3:84"
                    },
                    "nativeSrc": "4172:19:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4172:19:84"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nativeSrc": "4164:4:84",
                      "nodeType": "YulIdentifier",
                      "src": "4164:4:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_35301ced9723f633ba26a41ab9b6ac754c475b81a3607fce6b33ac3eddaf591d__to_t_string_memory_ptr__fromStack_reversed",
            "nativeSrc": "3795:402:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nativeSrc": "3946:9:84",
                "nodeType": "YulTypedName",
                "src": "3946:9:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nativeSrc": "3960:4:84",
                "nodeType": "YulTypedName",
                "src": "3960:4:84",
                "type": ""
              }
            ],
            "src": "3795:402:84"
          },
          {
            "body": {
              "nativeSrc": "4403:240:84",
              "nodeType": "YulBlock",
              "src": "4403:240:84",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "4420:3:84",
                        "nodeType": "YulIdentifier",
                        "src": "4420:3:84"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nativeSrc": "4429:6:84",
                            "nodeType": "YulIdentifier",
                            "src": "4429:6:84"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "4441:3:84",
                                "nodeType": "YulLiteral",
                                "src": "4441:3:84",
                                "type": "",
                                "value": "248"
                              },
                              {
                                "kind": "number",
                                "nativeSrc": "4446:3:84",
                                "nodeType": "YulLiteral",
                                "src": "4446:3:84",
                                "type": "",
                                "value": "255"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nativeSrc": "4437:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "4437:3:84"
                            },
                            "nativeSrc": "4437:13:84",
                            "nodeType": "YulFunctionCall",
                            "src": "4437:13:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "4425:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4425:3:84"
                        },
                        "nativeSrc": "4425:26:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4425:26:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4413:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4413:6:84"
                    },
                    "nativeSrc": "4413:39:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4413:39:84"
                  },
                  "nativeSrc": "4413:39:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4413:39:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "4472:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "4472:3:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4477:1:84",
                            "nodeType": "YulLiteral",
                            "src": "4477:1:84",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4468:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4468:3:84"
                        },
                        "nativeSrc": "4468:11:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4468:11:84"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "4489:2:84",
                                "nodeType": "YulLiteral",
                                "src": "4489:2:84",
                                "type": "",
                                "value": "96"
                              },
                              {
                                "name": "value1",
                                "nativeSrc": "4493:6:84",
                                "nodeType": "YulIdentifier",
                                "src": "4493:6:84"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nativeSrc": "4485:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "4485:3:84"
                            },
                            "nativeSrc": "4485:15:84",
                            "nodeType": "YulFunctionCall",
                            "src": "4485:15:84"
                          },
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nativeSrc": "4506:26:84",
                                "nodeType": "YulLiteral",
                                "src": "4506:26:84",
                                "type": "",
                                "value": "0xffffffffffffffffffffffff"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nativeSrc": "4502:3:84",
                              "nodeType": "YulIdentifier",
                              "src": "4502:3:84"
                            },
                            "nativeSrc": "4502:31:84",
                            "nodeType": "YulFunctionCall",
                            "src": "4502:31:84"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nativeSrc": "4481:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4481:3:84"
                        },
                        "nativeSrc": "4481:53:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4481:53:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4461:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4461:6:84"
                    },
                    "nativeSrc": "4461:74:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4461:74:84"
                  },
                  "nativeSrc": "4461:74:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4461:74:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "4555:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "4555:3:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4560:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4560:2:84",
                            "type": "",
                            "value": "21"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4551:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4551:3:84"
                        },
                        "nativeSrc": "4551:12:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4551:12:84"
                      },
                      {
                        "name": "value2",
                        "nativeSrc": "4565:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "4565:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4544:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4544:6:84"
                    },
                    "nativeSrc": "4544:28:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4544:28:84"
                  },
                  "nativeSrc": "4544:28:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4544:28:84"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nativeSrc": "4592:3:84",
                            "nodeType": "YulIdentifier",
                            "src": "4592:3:84"
                          },
                          {
                            "kind": "number",
                            "nativeSrc": "4597:2:84",
                            "nodeType": "YulLiteral",
                            "src": "4597:2:84",
                            "type": "",
                            "value": "53"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nativeSrc": "4588:3:84",
                          "nodeType": "YulIdentifier",
                          "src": "4588:3:84"
                        },
                        "nativeSrc": "4588:12:84",
                        "nodeType": "YulFunctionCall",
                        "src": "4588:12:84"
                      },
                      {
                        "name": "value3",
                        "nativeSrc": "4602:6:84",
                        "nodeType": "YulIdentifier",
                        "src": "4602:6:84"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nativeSrc": "4581:6:84",
                      "nodeType": "YulIdentifier",
                      "src": "4581:6:84"
                    },
                    "nativeSrc": "4581:28:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4581:28:84"
                  },
                  "nativeSrc": "4581:28:84",
                  "nodeType": "YulExpressionStatement",
                  "src": "4581:28:84"
                },
                {
                  "nativeSrc": "4618:19:84",
                  "nodeType": "YulAssignment",
                  "src": "4618:19:84",
                  "value": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nativeSrc": "4629:3:84",
                        "nodeType": "YulIdentifier",
                        "src": "4629:3:84"
                      },
                      {
                        "kind": "number",
                        "nativeSrc": "4634:2:84",
                        "nodeType": "YulLiteral",
                        "src": "4634:2:84",
                        "type": "",
                        "value": "85"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nativeSrc": "4625:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "4625:3:84"
                    },
                    "nativeSrc": "4625:12:84",
                    "nodeType": "YulFunctionCall",
                    "src": "4625:12:84"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nativeSrc": "4618:3:84",
                      "nodeType": "YulIdentifier",
                      "src": "4618:3:84"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed",
            "nativeSrc": "4202:441:84",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "pos",
                "nativeSrc": "4355:3:84",
                "nodeType": "YulTypedName",
                "src": "4355:3:84",
                "type": ""
              },
              {
                "name": "value3",
                "nativeSrc": "4360:6:84",
                "nodeType": "YulTypedName",
                "src": "4360:6:84",
                "type": ""
              },
              {
                "name": "value2",
                "nativeSrc": "4368:6:84",
                "nodeType": "YulTypedName",
                "src": "4368:6:84",
                "type": ""
              },
              {
                "name": "value1",
                "nativeSrc": "4376:6:84",
                "nodeType": "YulTypedName",
                "src": "4376:6:84",
                "type": ""
              },
              {
                "name": "value0",
                "nativeSrc": "4384:6:84",
                "nodeType": "YulTypedName",
                "src": "4384:6:84",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nativeSrc": "4395:3:84",
                "nodeType": "YulTypedName",
                "src": "4395:3:84",
                "type": ""
              }
            ],
            "src": "4202:441:84"
          }
        ]
      },
      "contents": "{\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 panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_bytes(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := 0xffffffffffffffff\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_bytes_memory_ptrt_bytes32(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_decode_tuple_t_bytes32t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := calldataload(headStart)\n        let value := calldataload(add(headStart, 32))\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value1 := value\n        let offset := calldataload(add(headStart, 64))\n        if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n        value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n    }\n    function abi_encode_tuple_t_contract$_WitnetProxy_$3700__to_t_address_payable__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_stringliteral_c0febb5364a27499c6fec52585c29500617ce8e21006c354030fb3280a8ed5f2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"WitnetDeployerMeter: deployment \")\n        mstore(add(headStart, 96), \"failed\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        let _1 := 32\n        mstore(add(headStart, 32), 64)\n        let length := mload(value1)\n        mstore(add(headStart, 64), length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, _1) }\n        {\n            mstore(add(add(headStart, i), 96), mload(add(add(value1, i), _1)))\n        }\n        mstore(add(add(headStart, length), 96), 0)\n        tail := add(add(headStart, and(add(length, 31), not(31))), 96)\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    function abi_encode_tuple_t_stringliteral_35301ced9723f633ba26a41ab9b6ac754c475b81a3607fce6b33ac3eddaf591d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"WitnetDeployerMeter: already pro\")\n        mstore(add(headStart, 96), \"xified\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n    {\n        mstore(pos, and(value0, shl(248, 255)))\n        mstore(add(pos, 1), and(shl(96, value1), not(0xffffffffffffffffffffffff)))\n        mstore(add(pos, 21), value2)\n        mstore(add(pos, 53), value3)\n        end := add(pos, 85)\n    }\n}",
      "id": 84,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "348:2916:30:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "348:2916:30:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2105:175;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;363:32:84;;;345:51;;333:2;318:18;2105:175:30;;;;;;;897:445;;;;;;:::i;:::-;;:::i;2288:971::-;;;;;;:::i;:::-;;:::i;1688:409::-;;;;;;:::i;:::-;;:::i;2105:175::-;2188:7;2220:52;2234:30;;;;;;;;:::i;:::-;-1:-1:-1;;2234:30:30;;;;;;;;;;;;;;2266:5;2220:13;:52::i;:::-;2213:59;2105:175;-1:-1:-1;;2105:175:30:o;897:445::-;986:17;1033:31;1047:9;1058:5;1033:13;:31::i;:::-;1021:43;;1079:9;-1:-1:-1;;;;;1079:21:30;;1104:1;1079:26;1075:260;;1214:5;1202:9;1196:16;1189:4;1178:9;1174:20;1171:1;1163:57;1150:70;-1:-1:-1;;;;;;1257:23:30;;1249:74;;;;-1:-1:-1;;;1249:74:30;;2660:2:84;1249:74:30;;;2642:21:84;2699:2;2679:18;;;2672:30;2738:34;2718:18;;;2711:62;-1:-1:-1;;;2789:18:84;;;2782:36;2835:19;;1249:74:30;;;;;;;;2288:971;2416:11;2445:18;2466:30;2485:10;2466:18;:30::i;:::-;2445:51;;2511:10;-1:-1:-1;;;;;2511:22:30;;2537:1;2511:27;2507:745;;2594:50;2601:30;;;;;;;;:::i;:::-;-1:-1:-1;;2601:30:30;;;;;;;;;;;;;;2633:10;2594:6;:50::i;:::-;;2732:10;-1:-1:-1;;;;;2712:42:30;;2773:20;2964:10;3062:9;2862:228;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2712:393;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3147:10:30;-1:-1:-1;3120:39:30;;2507:745;3192:48;;-1:-1:-1;;;3192:48:30;;3997:2:84;3192:48:30;;;3979:21:84;4036:2;4016:18;;;4009:30;4075:34;4055:18;;;4048:62;-1:-1:-1;;;4126:18:84;;;4119:36;4172:19;;3192:48:30;3795:402:84;2288:971:30;;;;;;:::o;1688:409::-;2022:20;;;;;;;1884:177;;;-1:-1:-1;;;;;;1884:177:30;;;4413:39:84;1966:4:30;4489:2:84;4485:15;-1:-1:-1;;4481:53:84;4468:11;;;4461:74;4551:12;;;4544:28;;;;4588:12;;;;4581:28;;;;1884:177:30;;;;;;;;;;4625:12:84;;;;1884:177:30;;;1856:220;;;;;;1688:409::o;-1:-1:-1:-;;;;;;;;:::o;14:180:84:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:84;;14:180;-1:-1:-1;14:180:84:o;407:127::-;468:10;463:3;459:20;456:1;449:31;499:4;496:1;489:15;523:4;520:1;513:15;539:718;581:5;634:3;627:4;619:6;615:17;611:27;601:55;;652:1;649;642:12;601:55;688:6;675:20;714:18;751:2;747;744:10;741:36;;;757:18;;:::i;:::-;832:2;826:9;800:2;886:13;;-1:-1:-1;;882:22:84;;;906:2;878:31;874:40;862:53;;;930:18;;;950:22;;;927:46;924:72;;;976:18;;:::i;:::-;1016:10;1012:2;1005:22;1051:2;1043:6;1036:18;1097:3;1090:4;1085:2;1077:6;1073:15;1069:26;1066:35;1063:55;;;1114:1;1111;1104:12;1063:55;1178:2;1171:4;1163:6;1159:17;1152:4;1144:6;1140:17;1127:54;1225:1;1218:4;1213:2;1205:6;1201:15;1197:26;1190:37;1245:6;1236:15;;;;;;539:718;;;;:::o;1262:388::-;1339:6;1347;1400:2;1388:9;1379:7;1375:23;1371:32;1368:52;;;1416:1;1413;1406:12;1368:52;1456:9;1443:23;1489:18;1481:6;1478:30;1475:50;;;1521:1;1518;1511:12;1475:50;1544:49;1585:7;1576:6;1565:9;1561:22;1544:49;:::i;:::-;1534:59;1640:2;1625:18;;;;1612:32;;-1:-1:-1;;;;1262:388:84:o;1655:562::-;1741:6;1749;1757;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;1849:23;;;-1:-1:-1;1922:2:84;1907:18;;1894:32;-1:-1:-1;;;;;1955:31:84;;1945:42;;1935:70;;2001:1;1998;1991:12;1935:70;2024:5;-1:-1:-1;2080:2:84;2065:18;;2052:32;2107:18;2096:30;;2093:50;;;2139:1;2136;2129:12;2093:50;2162:49;2203:7;2194:6;2183:9;2179:22;2162:49;:::i;:::-;2152:59;;;1655:562;;;;;:::o;2865:643::-;3069:1;3065;3060:3;3056:11;3052:19;3044:6;3040:32;3029:9;3022:51;3003:4;3092:2;3130;3125;3114:9;3110:18;3103:30;3162:6;3156:13;3205:6;3200:2;3189:9;3185:18;3178:34;3230:1;3240:140;3254:6;3251:1;3248:13;3240:140;;;3349:14;;;3345:23;;3339:30;3315:17;;;3334:2;3311:26;3304:66;3269:10;;3240:140;;;3244:3;3429:1;3424:2;3415:6;3404:9;3400:22;3396:31;3389:42;3499:2;3492;3488:7;3483:2;3475:6;3471:15;3467:29;3456:9;3452:45;3448:54;3440:62;;;;2865:643;;;;;:::o;3513:277::-;3580:6;3633:2;3621:9;3612:7;3608:23;3604:32;3601:52;;;3649:1;3646;3639:12;3601:52;3681:9;3675:16;3734:5;3727:13;3720:21;3713:5;3710:32;3700:60;;3756:1;3753;3746:12",
  "source": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity >=0.8.0 <0.9.0;\r\n\r\nimport \"../WitnetProxy.sol\";\r\n\r\n/// @notice WitnetDeployer contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, \r\n/// @notice and CREATE3 factory (EIP-3171) for Witnet proxies, on the Meter Ecosystem.\r\n/// @author Guillermo Díaz <guillermo@otherplane.com>\r\n\r\ncontract WitnetDeployerMeter {\r\n\r\n    /// @notice Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \r\n    /// @dev The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the address\r\n    /// @dev nor the nonce of the caller (i.e. see EIP-1014). \r\n    /// @param _initCode Creation code, including construction logic and input parameters.\r\n    /// @param _salt Arbitrary value to modify resulting address.\r\n    /// @return _deployed Just deployed contract address.\r\n    function deploy(bytes memory _initCode, bytes32 _salt)\r\n        public\r\n        returns (address _deployed)\r\n    {\r\n        _deployed = determineAddr(_initCode, _salt);\r\n        if (_deployed.code.length == 0) {\r\n            assembly {\r\n                _deployed := create2(0, add(_initCode, 0x20), mload(_initCode), _salt)\r\n            }\r\n            require(_deployed != address(0), \"WitnetDeployerMeter: deployment failed\");\r\n        }\r\n    }\r\n\r\n    /// @notice Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\r\n    /// @param _initCode Creation code, including construction logic and input parameters.\r\n    /// @param _salt Arbitrary value to modify resulting address.\r\n    /// @return Deterministic contract address.\r\n    function determineAddr(bytes memory _initCode, bytes32 _salt)\r\n        public view\r\n        returns (address)\r\n    {\r\n        return address(\r\n            uint160(uint(keccak256(\r\n                abi.encodePacked(\r\n                    bytes1(0xff),\r\n                    address(this),\r\n                    _salt,\r\n                    keccak256(_initCode)\r\n                )\r\n            )))\r\n        );\r\n    }\r\n\r\n    function determineProxyAddr(bytes32 _salt) \r\n        public view\r\n        returns (address)\r\n    {\r\n        return determineAddr(type(WitnetProxy).creationCode, _salt);\r\n    }\r\n\r\n    function proxify(bytes32 _proxySalt, address _firstImplementation, bytes memory _initData)\r\n        external \r\n        returns (WitnetProxy)\r\n    {\r\n        address _proxyAddr = determineProxyAddr(_proxySalt);\r\n        if (_proxyAddr.code.length == 0) {\r\n            // deploy the WitnetProxy\r\n            deploy(type(WitnetProxy).creationCode, _proxySalt);\r\n            // settle first implementation address,\r\n            WitnetProxy(payable(_proxyAddr)).upgradeTo(\r\n                _firstImplementation, \r\n                // and initialize it, providing\r\n                abi.encode(\r\n                    // the owner (i.e. the caller of this function)\r\n                    msg.sender,\r\n                    // and some (optional) initialization data\r\n                     _initData\r\n                )\r\n            );\r\n            return WitnetProxy(payable(_proxyAddr));\r\n        } else {\r\n            revert(\"WitnetDeployerMeter: already proxified\");\r\n        }\r\n    }\r\n\r\n}",
  "sourcePath": "C:\\Users\\guill\\github\\witnet\\witnet-solidity-bridge\\contracts\\core\\customs\\WitnetDeployerMeter.sol",
  "ast": {
    "absolutePath": "project:/contracts/core/customs/WitnetDeployerMeter.sol",
    "exportedSymbols": {
      "ERC165": [
        602
      ],
      "IERC165": [
        614
      ],
      "Initializable": [
        253
      ],
      "Proxiable": [
        24189
      ],
      "Upgradeable": [
        24304
      ],
      "WitnetDeployerMeter": [
        4212
      ],
      "WitnetProxy": [
        3700
      ]
    },
    "id": 4213,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4057,
        "literals": [
          "solidity",
          ">=",
          "0.8",
          ".0",
          "<",
          "0.9",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "35:31:30"
      },
      {
        "absolutePath": "project:/contracts/core/WitnetProxy.sol",
        "file": "../WitnetProxy.sol",
        "id": 4058,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 4213,
        "sourceUnit": 3701,
        "src": "70:28:30",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "WitnetDeployerMeter",
        "contractDependencies": [
          3700
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 4059,
          "nodeType": "StructuredDocumentation",
          "src": "102:244:30",
          "text": "@notice WitnetDeployer contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, \n @notice and CREATE3 factory (EIP-3171) for Witnet proxies, on the Meter Ecosystem.\n @author Guillermo Díaz <guillermo@otherplane.com>"
        },
        "fullyImplemented": true,
        "id": 4212,
        "linearizedBaseContracts": [
          4212
        ],
        "name": "WitnetDeployerMeter",
        "nameLocation": "357:19:30",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 4094,
              "nodeType": "Block",
              "src": "1010:332:30",
              "statements": [
                {
                  "expression": {
                    "id": 4074,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 4069,
                      "name": "_deployed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4067,
                      "src": "1021:9:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 4071,
                          "name": "_initCode",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4062,
                          "src": "1047:9:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "id": 4072,
                          "name": "_salt",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4064,
                          "src": "1058:5:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 4070,
                        "name": "determineAddr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4133,
                        "src": "1033:13:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$",
                          "typeString": "function (bytes memory,bytes32) view returns (address)"
                        }
                      },
                      "id": 4073,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1033:31:30",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1021:43:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 4075,
                  "nodeType": "ExpressionStatement",
                  "src": "1021:43:30"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4080,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 4076,
                          "name": "_deployed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4067,
                          "src": "1079:9:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4077,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "1089:4:30",
                        "memberName": "code",
                        "nodeType": "MemberAccess",
                        "src": "1079:14:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 4078,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "1094:6:30",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "1079:21:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4079,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1104:1:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "1079:26:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 4093,
                  "nodeType": "IfStatement",
                  "src": "1075:260:30",
                  "trueBody": {
                    "id": 4092,
                    "nodeType": "Block",
                    "src": "1107:228:30",
                    "statements": [
                      {
                        "AST": {
                          "nativeSrc": "1131:104:30",
                          "nodeType": "YulBlock",
                          "src": "1131:104:30",
                          "statements": [
                            {
                              "nativeSrc": "1150:70:30",
                              "nodeType": "YulAssignment",
                              "src": "1150:70:30",
                              "value": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nativeSrc": "1171:1:30",
                                    "nodeType": "YulLiteral",
                                    "src": "1171:1:30",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_initCode",
                                        "nativeSrc": "1178:9:30",
                                        "nodeType": "YulIdentifier",
                                        "src": "1178:9:30"
                                      },
                                      {
                                        "kind": "number",
                                        "nativeSrc": "1189:4:30",
                                        "nodeType": "YulLiteral",
                                        "src": "1189:4:30",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nativeSrc": "1174:3:30",
                                      "nodeType": "YulIdentifier",
                                      "src": "1174:3:30"
                                    },
                                    "nativeSrc": "1174:20:30",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1174:20:30"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "_initCode",
                                        "nativeSrc": "1202:9:30",
                                        "nodeType": "YulIdentifier",
                                        "src": "1202:9:30"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nativeSrc": "1196:5:30",
                                      "nodeType": "YulIdentifier",
                                      "src": "1196:5:30"
                                    },
                                    "nativeSrc": "1196:16:30",
                                    "nodeType": "YulFunctionCall",
                                    "src": "1196:16:30"
                                  },
                                  {
                                    "name": "_salt",
                                    "nativeSrc": "1214:5:30",
                                    "nodeType": "YulIdentifier",
                                    "src": "1214:5:30"
                                  }
                                ],
                                "functionName": {
                                  "name": "create2",
                                  "nativeSrc": "1163:7:30",
                                  "nodeType": "YulIdentifier",
                                  "src": "1163:7:30"
                                },
                                "nativeSrc": "1163:57:30",
                                "nodeType": "YulFunctionCall",
                                "src": "1163:57:30"
                              },
                              "variableNames": [
                                {
                                  "name": "_deployed",
                                  "nativeSrc": "1150:9:30",
                                  "nodeType": "YulIdentifier",
                                  "src": "1150:9:30"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "paris",
                        "externalReferences": [
                          {
                            "declaration": 4067,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1150:9:30",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4062,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1178:9:30",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4062,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1202:9:30",
                            "valueSize": 1
                          },
                          {
                            "declaration": 4064,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "1214:5:30",
                            "valueSize": 1
                          }
                        ],
                        "id": 4081,
                        "nodeType": "InlineAssembly",
                        "src": "1122:113:30"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 4088,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 4083,
                                "name": "_deployed",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4067,
                                "src": "1257:9:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "arguments": [
                                  {
                                    "hexValue": "30",
                                    "id": 4086,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "1278:1:30",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "id": 4085,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "1270:7:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 4084,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "1270:7:30",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 4087,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1270:10:30",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "1257:23:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "5769746e65744465706c6f7965724d657465723a206465706c6f796d656e74206661696c6564",
                              "id": 4089,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "1282:40:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c0febb5364a27499c6fec52585c29500617ce8e21006c354030fb3280a8ed5f2",
                                "typeString": "literal_string \"WitnetDeployerMeter: deployment failed\""
                              },
                              "value": "WitnetDeployerMeter: deployment failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c0febb5364a27499c6fec52585c29500617ce8e21006c354030fb3280a8ed5f2",
                                "typeString": "literal_string \"WitnetDeployerMeter: deployment failed\""
                              }
                            ],
                            "id": 4082,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967278,
                              4294967278
                            ],
                            "referencedDeclaration": 4294967278,
                            "src": "1249:7:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 4090,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1249:74:30",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4091,
                        "nodeType": "ExpressionStatement",
                        "src": "1249:74:30"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 4060,
              "nodeType": "StructuredDocumentation",
              "src": "386:505:30",
              "text": "@notice Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \n @dev The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the address\n @dev nor the nonce of the caller (i.e. see EIP-1014). \n @param _initCode Creation code, including construction logic and input parameters.\n @param _salt Arbitrary value to modify resulting address.\n @return _deployed Just deployed contract address."
            },
            "functionSelector": "4af63f02",
            "id": 4095,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deploy",
            "nameLocation": "906:6:30",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4065,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4062,
                  "mutability": "mutable",
                  "name": "_initCode",
                  "nameLocation": "926:9:30",
                  "nodeType": "VariableDeclaration",
                  "scope": 4095,
                  "src": "913:22:30",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4061,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "913:5:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4064,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nameLocation": "945:5:30",
                  "nodeType": "VariableDeclaration",
                  "scope": 4095,
                  "src": "937:13:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4063,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "937:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "912:39:30"
            },
            "returnParameters": {
              "id": 4068,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4067,
                  "mutability": "mutable",
                  "name": "_deployed",
                  "nameLocation": "994:9:30",
                  "nodeType": "VariableDeclaration",
                  "scope": 4095,
                  "src": "986:17:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4066,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "986:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "985:19:30"
            },
            "scope": 4212,
            "src": "897:445:30",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4132,
              "nodeType": "Block",
              "src": "1803:294:30",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "hexValue": "30786666",
                                            "id": 4116,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "1930:4:30",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_255_by_1",
                                              "typeString": "int_const 255"
                                            },
                                            "value": "0xff"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_255_by_1",
                                              "typeString": "int_const 255"
                                            }
                                          ],
                                          "id": 4115,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "1923:6:30",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_bytes1_$",
                                            "typeString": "type(bytes1)"
                                          },
                                          "typeName": {
                                            "id": 4114,
                                            "name": "bytes1",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "1923:6:30",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 4117,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1923:12:30",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "id": 4120,
                                            "name": "this",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4294967268,
                                            "src": "1966:4:30",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_contract$_WitnetDeployerMeter_$4212",
                                              "typeString": "contract WitnetDeployerMeter"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_contract$_WitnetDeployerMeter_$4212",
                                              "typeString": "contract WitnetDeployerMeter"
                                            }
                                          ],
                                          "id": 4119,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "1958:7:30",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_address_$",
                                            "typeString": "type(address)"
                                          },
                                          "typeName": {
                                            "id": 4118,
                                            "name": "address",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "1958:7:30",
                                            "typeDescriptions": {}
                                          }
                                        },
                                        "id": 4121,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "1958:13:30",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      },
                                      {
                                        "id": 4122,
                                        "name": "_salt",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4100,
                                        "src": "1994:5:30",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "id": 4124,
                                            "name": "_initCode",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 4098,
                                            "src": "2032:9:30",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bytes_memory_ptr",
                                              "typeString": "bytes memory"
                                            }
                                          ],
                                          "id": 4123,
                                          "name": "keccak256",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 4294967288,
                                          "src": "2022:9:30",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                            "typeString": "function (bytes memory) pure returns (bytes32)"
                                          }
                                        },
                                        "id": 4125,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "functionCall",
                                        "lValueRequested": false,
                                        "nameLocations": [],
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "2022:20:30",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        },
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      ],
                                      "expression": {
                                        "id": 4112,
                                        "name": "abi",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 4294967295,
                                        "src": "1884:3:30",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_abi",
                                          "typeString": "abi"
                                        }
                                      },
                                      "id": 4113,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "memberLocation": "1888:12:30",
                                      "memberName": "encodePacked",
                                      "nodeType": "MemberAccess",
                                      "src": "1884:16:30",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                                        "typeString": "function () pure returns (bytes memory)"
                                      }
                                    },
                                    "id": 4126,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "1884:177:30",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 4111,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967288,
                                  "src": "1856:9:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                    "typeString": "function (bytes memory) pure returns (bytes32)"
                                  }
                                },
                                "id": 4127,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "1856:220:30",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 4110,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "1851:4:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 4109,
                                "name": "uint",
                                "nodeType": "ElementaryTypeName",
                                "src": "1851:4:30",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 4128,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "1851:226:30",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 4108,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1843:7:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint160_$",
                            "typeString": "type(uint160)"
                          },
                          "typeName": {
                            "id": 4107,
                            "name": "uint160",
                            "nodeType": "ElementaryTypeName",
                            "src": "1843:7:30",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 4129,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1843:235:30",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint160",
                          "typeString": "uint160"
                        }
                      ],
                      "id": 4106,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "1821:7:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 4105,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1821:7:30",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 4130,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1821:268:30",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4104,
                  "id": 4131,
                  "nodeType": "Return",
                  "src": "1814:275:30"
                }
              ]
            },
            "documentation": {
              "id": 4096,
              "nodeType": "StructuredDocumentation",
              "src": "1350:332:30",
              "text": "@notice Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\n @param _initCode Creation code, including construction logic and input parameters.\n @param _salt Arbitrary value to modify resulting address.\n @return Deterministic contract address."
            },
            "functionSelector": "d3933c29",
            "id": 4133,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "determineAddr",
            "nameLocation": "1697:13:30",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4101,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4098,
                  "mutability": "mutable",
                  "name": "_initCode",
                  "nameLocation": "1724:9:30",
                  "nodeType": "VariableDeclaration",
                  "scope": 4133,
                  "src": "1711:22:30",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4097,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1711:5:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4100,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nameLocation": "1743:5:30",
                  "nodeType": "VariableDeclaration",
                  "scope": 4133,
                  "src": "1735:13:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4099,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1735:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1710:39:30"
            },
            "returnParameters": {
              "id": 4104,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4103,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4133,
                  "src": "1789:7:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1789:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1788:9:30"
            },
            "scope": 4212,
            "src": "1688:409:30",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4148,
              "nodeType": "Block",
              "src": "2202:78:30",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4142,
                              "name": "WitnetProxy",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3700,
                              "src": "2239:11:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$3700_$",
                                "typeString": "type(contract WitnetProxy)"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$3700_$",
                                "typeString": "type(contract WitnetProxy)"
                              }
                            ],
                            "id": 4141,
                            "name": "type",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967269,
                            "src": "2234:4:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 4143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2234:17:30",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_meta_type_t_contract$_WitnetProxy_$3700",
                            "typeString": "type(contract WitnetProxy)"
                          }
                        },
                        "id": 4144,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "memberLocation": "2252:12:30",
                        "memberName": "creationCode",
                        "nodeType": "MemberAccess",
                        "src": "2234:30:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 4145,
                        "name": "_salt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4135,
                        "src": "2266:5:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 4140,
                      "name": "determineAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4133,
                      "src": "2220:13:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes memory,bytes32) view returns (address)"
                      }
                    },
                    "id": 4146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2220:52:30",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 4139,
                  "id": 4147,
                  "nodeType": "Return",
                  "src": "2213:59:30"
                }
              ]
            },
            "functionSelector": "4998f038",
            "id": 4149,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "determineProxyAddr",
            "nameLocation": "2114:18:30",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4136,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4135,
                  "mutability": "mutable",
                  "name": "_salt",
                  "nameLocation": "2141:5:30",
                  "nodeType": "VariableDeclaration",
                  "scope": 4149,
                  "src": "2133:13:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4134,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2133:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2132:15:30"
            },
            "returnParameters": {
              "id": 4139,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4138,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4149,
                  "src": "2188:7:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4137,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2188:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2187:9:30"
            },
            "scope": 4212,
            "src": "2105:175:30",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4210,
              "nodeType": "Block",
              "src": "2434:825:30",
              "statements": [
                {
                  "assignments": [
                    4162
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 4162,
                      "mutability": "mutable",
                      "name": "_proxyAddr",
                      "nameLocation": "2453:10:30",
                      "nodeType": "VariableDeclaration",
                      "scope": 4210,
                      "src": "2445:18:30",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 4161,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2445:7:30",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 4166,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 4164,
                        "name": "_proxySalt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4151,
                        "src": "2485:10:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 4163,
                      "name": "determineProxyAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4149,
                      "src": "2466:18:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view returns (address)"
                      }
                    },
                    "id": 4165,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2466:30:30",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2445:51:30"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 4171,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "expression": {
                          "id": 4167,
                          "name": "_proxyAddr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4162,
                          "src": "2511:10:30",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "2522:4:30",
                        "memberName": "code",
                        "nodeType": "MemberAccess",
                        "src": "2511:15:30",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 4169,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2527:6:30",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "2511:22:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 4170,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2537:1:30",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2511:27:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 4208,
                    "nodeType": "Block",
                    "src": "3177:75:30",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "hexValue": "5769746e65744465706c6f7965724d657465723a20616c72656164792070726f786966696564",
                              "id": 4205,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3199:40:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_35301ced9723f633ba26a41ab9b6ac754c475b81a3607fce6b33ac3eddaf591d",
                                "typeString": "literal_string \"WitnetDeployerMeter: already proxified\""
                              },
                              "value": "WitnetDeployerMeter: already proxified"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_35301ced9723f633ba26a41ab9b6ac754c475b81a3607fce6b33ac3eddaf591d",
                                "typeString": "literal_string \"WitnetDeployerMeter: already proxified\""
                              }
                            ],
                            "id": 4204,
                            "name": "revert",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              4294967277,
                              4294967277
                            ],
                            "referencedDeclaration": 4294967277,
                            "src": "3192:6:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (string memory) pure"
                            }
                          },
                          "id": 4206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3192:48:30",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 4207,
                        "nodeType": "ExpressionStatement",
                        "src": "3192:48:30"
                      }
                    ]
                  },
                  "id": 4209,
                  "nodeType": "IfStatement",
                  "src": "2507:745:30",
                  "trueBody": {
                    "id": 4203,
                    "nodeType": "Block",
                    "src": "2540:631:30",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 4174,
                                    "name": "WitnetProxy",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 3700,
                                    "src": "2606:11:30",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$3700_$",
                                      "typeString": "type(contract WitnetProxy)"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$3700_$",
                                      "typeString": "type(contract WitnetProxy)"
                                    }
                                  ],
                                  "id": 4173,
                                  "name": "type",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967269,
                                  "src": "2601:4:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 4175,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "2601:17:30",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_meta_type_t_contract$_WitnetProxy_$3700",
                                  "typeString": "type(contract WitnetProxy)"
                                }
                              },
                              "id": 4176,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "2619:12:30",
                              "memberName": "creationCode",
                              "nodeType": "MemberAccess",
                              "src": "2601:30:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 4177,
                              "name": "_proxySalt",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4151,
                              "src": "2633:10:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 4172,
                            "name": "deploy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4095,
                            "src": "2594:6:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes memory,bytes32) returns (address)"
                            }
                          },
                          "id": 4178,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2594:50:30",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 4179,
                        "nodeType": "ExpressionStatement",
                        "src": "2594:50:30"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 4187,
                              "name": "_firstImplementation",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4153,
                              "src": "2773:20:30",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "expression": {
                                    "id": 4190,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967281,
                                    "src": "2964:3:30",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 4191,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "2968:6:30",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "2964:10:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 4192,
                                  "name": "_initData",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4155,
                                  "src": "3062:9:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes_memory_ptr",
                                    "typeString": "bytes memory"
                                  }
                                ],
                                "expression": {
                                  "id": 4188,
                                  "name": "abi",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967295,
                                  "src": "2862:3:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_abi",
                                    "typeString": "abi"
                                  }
                                },
                                "id": 4189,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberLocation": "2866:6:30",
                                "memberName": "encode",
                                "nodeType": "MemberAccess",
                                "src": "2862:10:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                  "typeString": "function () pure returns (bytes memory)"
                                }
                              },
                              "id": 4193,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2862:228:30",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 4183,
                                      "name": "_proxyAddr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 4162,
                                      "src": "2732:10:30",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 4182,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2724:8:30",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_payable_$",
                                      "typeString": "type(address payable)"
                                    },
                                    "typeName": {
                                      "id": 4181,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2724:8:30",
                                      "stateMutability": "payable",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 4184,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2724:19:30",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address_payable",
                                    "typeString": "address payable"
                                  }
                                ],
                                "id": 4180,
                                "name": "WitnetProxy",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3700,
                                "src": "2712:11:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$3700_$",
                                  "typeString": "type(contract WitnetProxy)"
                                }
                              },
                              "id": 4185,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2712:32:30",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_WitnetProxy_$3700",
                                "typeString": "contract WitnetProxy"
                              }
                            },
                            "id": 4186,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2745:9:30",
                            "memberName": "upgradeTo",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3690,
                            "src": "2712:42:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                              "typeString": "function (address,bytes memory) external returns (bool)"
                            }
                          },
                          "id": 4194,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2712:393:30",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 4195,
                        "nodeType": "ExpressionStatement",
                        "src": "2712:393:30"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "id": 4199,
                                  "name": "_proxyAddr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4162,
                                  "src": "3147:10:30",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 4198,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "3139:8:30",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_payable_$",
                                  "typeString": "type(address payable)"
                                },
                                "typeName": {
                                  "id": 4197,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "3139:8:30",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 4200,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "3139:19:30",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 4196,
                            "name": "WitnetProxy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3700,
                            "src": "3127:11:30",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$3700_$",
                              "typeString": "type(contract WitnetProxy)"
                            }
                          },
                          "id": 4201,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3127:32:30",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_WitnetProxy_$3700",
                            "typeString": "contract WitnetProxy"
                          }
                        },
                        "functionReturnParameters": 4160,
                        "id": 4202,
                        "nodeType": "Return",
                        "src": "3120:39:30"
                      }
                    ]
                  }
                }
              ]
            },
            "functionSelector": "5ba489e7",
            "id": 4211,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "proxify",
            "nameLocation": "2297:7:30",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4156,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4151,
                  "mutability": "mutable",
                  "name": "_proxySalt",
                  "nameLocation": "2313:10:30",
                  "nodeType": "VariableDeclaration",
                  "scope": 4211,
                  "src": "2305:18:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 4150,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2305:7:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4153,
                  "mutability": "mutable",
                  "name": "_firstImplementation",
                  "nameLocation": "2333:20:30",
                  "nodeType": "VariableDeclaration",
                  "scope": 4211,
                  "src": "2325:28:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 4152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2325:7:30",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 4155,
                  "mutability": "mutable",
                  "name": "_initData",
                  "nameLocation": "2368:9:30",
                  "nodeType": "VariableDeclaration",
                  "scope": 4211,
                  "src": "2355:22:30",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 4154,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2355:5:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2304:74:30"
            },
            "returnParameters": {
              "id": 4160,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4159,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 4211,
                  "src": "2416:11:30",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_WitnetProxy_$3700",
                    "typeString": "contract WitnetProxy"
                  },
                  "typeName": {
                    "id": 4158,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 4157,
                      "name": "WitnetProxy",
                      "nameLocations": [
                        "2416:11:30"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 3700,
                      "src": "2416:11:30"
                    },
                    "referencedDeclaration": 3700,
                    "src": "2416:11:30",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_WitnetProxy_$3700",
                      "typeString": "contract WitnetProxy"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2415:13:30"
            },
            "scope": 4212,
            "src": "2288:971:30",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 4213,
        "src": "348:2916:30",
        "usedErrors": [],
        "usedEvents": []
      }
    ],
    "src": "35:3229:30"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.25+commit.b61c2a91.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2024-12-05T09:36:04.227Z",
  "devdoc": {
    "author": "Guillermo Díaz <guillermo@otherplane.com>",
    "kind": "dev",
    "methods": {
      "deploy(bytes,bytes32)": {
        "details": "The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the addressnor the nonce of the caller (i.e. see EIP-1014). ",
        "params": {
          "_initCode": "Creation code, including construction logic and input parameters.",
          "_salt": "Arbitrary value to modify resulting address."
        },
        "returns": {
          "_deployed": "Just deployed contract address."
        }
      },
      "determineAddr(bytes,bytes32)": {
        "params": {
          "_initCode": "Creation code, including construction logic and input parameters.",
          "_salt": "Arbitrary value to modify resulting address."
        },
        "returns": {
          "_0": "Deterministic contract address."
        }
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "deploy(bytes,bytes32)": {
        "notice": "Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. "
      },
      "determineAddr(bytes,bytes32)": {
        "notice": "Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`."
      }
    },
    "notice": "WitnetDeployer contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, and CREATE3 factory (EIP-3171) for Witnet proxies, on the Meter Ecosystem.",
    "version": 1
  }
}